OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [tn_m001/] [newlib/] [config-ml.in] - Blame information for rev 39

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
# Configure fragment invoked in the post-target section for subdirs
2
# wanting multilib support.
3
#
4
# It is advisable to support a few --enable/--disable options to let the
5
# user select which libraries s/he really wants.
6
#
7
# Subdirectories wishing to use multilib should put the following lines
8
# in the "post-target" section of configure.in.
9
#
10
# if [ "${srcdir}" = "." ] ; then
11
#   if [ "${with_target_subdir}" != "." ] ; then
12
#     . ${with_multisrctop}../../config-ml.in
13
#   else
14
#     . ${with_multisrctop}../config-ml.in
15
#   fi
16
# else
17
#   . ${srcdir}/../config-ml.in
18
# fi
19
#
20
# See librx/configure.in in the libg++ distribution for an example of how
21
# to handle autoconf'd libraries.
22
#
23
# Things are complicated because 6 separate cases must be handled:
24
# 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
25
#
26
# srcdir=. is special.  It must handle make programs that don't handle VPATH.
27
# To implement this, a symlink tree is built for each library and for each
28
# multilib subdir.
29
#
30
# The build tree is layed out as
31
#
32
# ./
33
#   libg++
34
#   newlib
35
#   m68020/
36
#          libg++
37
#          newlib
38
#          m68881/
39
#                 libg++
40
#                 newlib
41
#
42
# The nice feature about this arrangement is that inter-library references
43
# in the build tree work without having to care where you are.  Note that
44
# inter-library references also work in the source tree because symlink trees
45
# are built when srcdir=.
46
#
47
# Unfortunately, trying to access the libraries in the build tree requires
48
# the user to manually choose which library to use as GCC won't be able to
49
# find the right one.  This is viewed as the lesser of two evils.
50
#
51
# Configure variables:
52
# ${with_target_subdir} = "." for native, or ${target_alias} for cross.
53
# Set by top level Makefile.
54
# ${with_multisrctop} = how many levels of multilibs there are in the source
55
# tree.  It exists to handle the case of configuring in the source tree:
56
# ${srcdir} is not constant.
57
# ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881).
58
#
59
# Makefile variables:
60
# MULTISRCTOP = number of multilib levels in source tree (+1 if cross)
61
# (FIXME: note that this is different than ${with_multisrctop}.  Check out.).
62
# MULTIBUILDTOP = number of multilib levels in build tree
63
# MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...)
64
# (only defined in each library's main Makefile).
65
# MULTISUBDIR = installed subdirectory name with leading '/' (eg: /m68000)
66
# (only defined in each multilib subdir).
67
 
68
# FIXME: Multilib is currently disabled by default for everything other than
69
# newlib.  It is up to each target to turn on multilib support for the other
70
# libraries as desired.
71
 
72
# We have to handle being invoked by both Cygnus configure and Autoconf.
73
#
74
# Cygnus configure incoming variables:
75
# srcdir, subdir, target, arguments
76
#
77
# Autoconf incoming variables:
78
# srcdir, target, ac_configure_args
79
#
80
# We *could* figure srcdir and target out, but we'd have to do work that
81
# our caller has already done to figure them out and requiring these two
82
# seems reasonable.
83
 
84
if [ -n "${ac_configure_args}" ]; then
85
  Makefile=${ac_file-Makefile}
86
  ml_config_shell=${CONFIG_SHELL-/bin/sh}
87
  ml_arguments="${ac_configure_args}"
88
  ml_realsrcdir=${srcdir}
89
else
90
  Makefile=${Makefile-Makefile}
91
  ml_config_shell=${config_shell-/bin/sh}
92
  ml_arguments="${arguments}"
93
  if [ -n "${subdir}" -a "${subdir}" != "." ] ; then
94
    ml_realsrcdir=${srcdir}/${subdir}
95
  else
96
    ml_realsrcdir=${srcdir}
97
  fi
98
fi
99
 
100
# Scan all the arguments and set all the ones we need.
101
 
102
for option in ${ml_arguments}
103
do
104
  case $option in
105
  --*) ;;
106
  -*) option=-$option ;;
107
  esac
108
 
109
  case $option in
110
  --*=*)
111
        optarg=`echo $option | sed -e 's/^[^=]*=//'`
112
        ;;
113
  esac
114
 
115
  case $option in
116
  --disable-*)
117
        enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'`
118
        eval $enableopt=no
119
        ;;
120
  --enable-*)
121
        case "$option" in
122
        *=*)    ;;
123
        *)      optarg=yes ;;
124
        esac
125
        enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
126
        eval $enableopt="$optarg"
127
        ;;
128
  --norecursion | --no*)
129
        ml_norecursion=yes
130
        ;;
131
  --verbose | --v | --verb*)
132
        ml_verbose=--verbose
133
        ;;
134
  --with-*)
135
        case "$option" in
136
        *=*)    ;;
137
        *)      optarg=yes ;;
138
        esac
139
        withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
140
        eval $withopt="$optarg"
141
        ;;
142
  --without-*)
143
        withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'`
144
        eval $withopt=no
145
        ;;
146
  esac
147
done
148
 
149
# Only do this if --enable-multilib.
150
if [ "${enable_multilib}" = yes ]; then
151
 
152
# Compute whether this is the library's top level directory
153
# (ie: not a multilib subdirectory, and not a subdirectory like libg++/src).
154
# ${with_multisubdir} tells us we're in the right branch, but we could be
155
# in a subdir of that.
156
# ??? The previous version could void this test by separating the process into
157
# two files: one that only the library's toplevel configure.in ran (to
158
# configure the multilib subdirs), and another that all configure.in's ran to
159
# update the Makefile.  It seemed reasonable to collapse all multilib support
160
# into one file, but it does leave us with having to perform this test.
161
ml_toplevel_p=no
162
if [ -z "${with_multisubdir}" ]; then
163
  if [ "${srcdir}" = "." ]; then
164
    # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
165
    # ${with_target_subdir} = "." for native, otherwise target alias.
166
    if [ "${with_target_subdir}" = "." ]; then
167
      if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
168
        ml_toplevel_p=yes
169
      fi
170
    else
171
      if [ -f ${ml_realsrcdir}/../../config-ml.in ]; then
172
        ml_toplevel_p=yes
173
      fi
174
    fi
175
  else
176
    # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
177
    if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
178
      ml_toplevel_p=yes
179
    fi
180
  fi
181
fi
182
 
183
# If this is the library's top level directory, set multidirs to the
184
# multilib subdirs to support.  This lives at the top because we need
185
# `multidirs' set right away.
186
 
187
if [ "${ml_toplevel_p}" = yes ]; then
188
 
189
multidirs=
190
for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
191
  dir=`echo $i | sed -e 's/;.*$//'`
192
  if [ "${dir}" = "." ]; then
193
    true
194
  else
195
    if [ -z "${multidirs}" ]; then
196
      multidirs="${dir}"
197
    else
198
      multidirs="${multidirs} ${dir}"
199
    fi
200
  fi
201
done
202
 
203
case "${target}" in
204
arc-*-elf*)
205
        if [ x$enable_biendian != xyes ]
206
        then
207
          old_multidirs=${multidirs}
208
          multidirs=""
209
          for x in ${old_multidirs}; do
210
            case "${x}" in
211
              *be*) : ;;
212
              *) multidirs="${multidirs} ${x}" ;;
213
            esac
214
          done
215
        fi
216
        ;;
217
m68*-*-*)
218
        if [ x$enable_softfloat = xno ]
219
        then
220
          old_multidirs="${multidirs}"
221
          multidirs=""
222
          for x in ${old_multidirs}; do
223
            case "$x" in
224
              *soft-float* ) : ;;
225
              *) multidirs="${multidirs} ${x}" ;;
226
            esac
227
          done
228
        fi
229
        if [ x$enable_m68881 = xno ]
230
        then
231
          old_multidirs="${multidirs}"
232
          multidirs=""
233
          for x in ${old_multidirs}; do
234
            case "$x" in
235
              *m68881* ) : ;;
236
              *) multidirs="${multidirs} ${x}" ;;
237
            esac
238
          done
239
        fi
240
        if [ x$enable_m68000 = xno ]
241
        then
242
          old_multidirs="${multidirs}"
243
          multidirs=""
244
          for x in ${old_multidirs}; do
245
            case "$x" in
246
              *m68000* ) : ;;
247
              *) multidirs="${multidirs} ${x}" ;;
248
            esac
249
          done
250
        fi
251
        if [ x$enable_m68020 = xno ]
252
        then
253
          old_multidirs="${multidirs}"
254
          multidirs=""
255
          for x in ${old_multidirs}; do
256
            case "$x" in
257
              *m68020* ) : ;;
258
              *) multidirs="${multidirs} ${x}" ;;
259
            esac
260
          done
261
        fi
262
        ;;
263
mips*-*-*)
264
        if [ x$enable_single_float = xno ]
265
        then
266
          old_multidirs="${multidirs}"
267
          multidirs=""
268
          for x in ${old_multidirs}; do
269
            case "$x" in
270
              *single* ) : ;;
271
              *) multidirs="${multidirs} ${x}" ;;
272
            esac
273
          done
274
        fi
275
        if [ x$enable_biendian = xno ]
276
        then
277
          old_multidirs="${multidirs}"
278
          multidirs=""
279
          for x in ${old_multidirs}; do
280
            case "$x" in
281
              *el* ) : ;;
282
              *eb* ) : ;;
283
              *) multidirs="${multidirs} ${x}" ;;
284
            esac
285
          done
286
        fi
287
        if [ x$enable_softfloat = xno ]
288
        then
289
          old_multidirs="${multidirs}"
290
          multidirs=""
291
          for x in ${old_multidirs}; do
292
            case "$x" in
293
              *soft-float* ) : ;;
294
              *) multidirs="${multidirs} ${x}" ;;
295
            esac
296
          done
297
        fi
298
        ;;
299
powerpc*-*-* | rs6000*-*-*)
300
        if [ x$enable_softfloat = xno ]
301
        then
302
          old_multidirs="${multidirs}"
303
          multidirs=""
304
          for x in ${old_multidirs}; do
305
            case "$x" in
306
              *soft-float* ) : ;;
307
              *) multidirs="${multidirs} ${x}" ;;
308
            esac
309
          done
310
        fi
311
        if [ x$enable_powercpu = xno ]
312
        then
313
          old_multidirs="${multidirs}"
314
          multidirs=""
315
          for x in ${old_multidirs}; do
316
            case "$x" in
317
              power | */power | */power/* ) : ;;
318
              *) multidirs="${multidirs} ${x}" ;;
319
            esac
320
          done
321
        fi
322
        if [ x$enable_powerpccpu = xno ]
323
        then
324
          old_multidirs="${multidirs}"
325
          multidirs=""
326
          for x in ${old_multidirs}; do
327
            case "$x" in
328
              *powerpc* ) : ;;
329
              *) multidirs="${multidirs} ${x}" ;;
330
            esac
331
          done
332
        fi
333
        if [ x$enable_powerpcos = xno ]
334
        then
335
          old_multidirs="${multidirs}"
336
          multidirs=""
337
          for x in ${old_multidirs}; do
338
            case "$x" in
339
              *mcall-linux* | *mcall-solaris* ) : ;;
340
              *) multidirs="${multidirs} ${x}" ;;
341
            esac
342
          done
343
        fi
344
        if [ x$enable_biendian = xno ]
345
        then
346
          old_multidirs="${multidirs}"
347
          multidirs=""
348
          for x in ${old_multidirs}; do
349
            case "$x" in
350
              *mlittle* | *mbig* ) : ;;
351
              *) multidirs="${multidirs} ${x}" ;;
352
            esac
353
          done
354
        fi
355
        if [ x$enable_sysv = xno ]
356
        then
357
          old_multidirs="${multidirs}"
358
          multidirs=""
359
          for x in ${old_multidirs}; do
360
            case "$x" in
361
              *mcall-sysv* ) : ;;
362
              *) multidirs="${multidirs} ${x}" ;;
363
            esac
364
          done
365
        fi
366
        if [ x$enable_aix = xno ]
367
        then
368
          old_multidirs="${multidirs}"
369
          multidirs=""
370
          for x in ${old_multidirs}; do
371
            case "$x" in
372
              *mcall-aix* ) : ;;
373
              *) multidirs="${multidirs} ${x}" ;;
374
            esac
375
          done
376
        fi
377
        ;;
378
esac
379
 
380
# Remove extraneous blanks from multidirs.
381
# Tests like `if [ -n "$multidirs" ]' require it.
382
multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
383
 
384
# Add code to library's top level makefile to handle building the multilib
385
# subdirs.
386
 
387
cat > Multi.tem <<\EOF
388
 
389
# FIXME: There should be an @-sign in front of the `if'.
390
# Leave out until this is tested a bit more.
391
multi-do:
392
        if [ -z "$(MULTIDIRS)" ]; then \
393
          true; \
394
        else \
395
          rootpre=`pwd`/; export rootpre; \
396
          srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
397
          lib=`echo $${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \
398
          compiler="$(CC)"; \
399
          for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
400
            dir=`echo $$i | sed -e 's/;.*$$//'`; \
401
            if [ "$${dir}" = "." ]; then \
402
              true; \
403
            else \
404
              if [ -d ../$${dir}/$${lib} ]; then \
405
                flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
406
                if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
407
                                CFLAGS="$(CFLAGS) $${flags}" \
408
                                CXXFLAGS="$(CXXFLAGS) $${flags}" \
409
                                LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
410
                                LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
411
                                LDFLAGS="$(LDFLAGS) $${flags}" \
412
                                $(DO)); then \
413
                  true; \
414
                else \
415
                  exit 1; \
416
                fi; \
417
              else true; \
418
              fi; \
419
            fi; \
420
          done; \
421
        fi
422
 
423
# FIXME: There should be an @-sign in front of the `if'.
424
# Leave out until this is tested a bit more.
425
multi-clean:
426
        if [ -z "$(MULTIDIRS)" ]; then \
427
          true; \
428
        else \
429
          lib=`pwd | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
430
          for dir in Makefile $(MULTIDIRS); do \
431
            if [ -f ../$${dir}/$${lib}/Makefile ]; then \
432
              if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
433
              then true; \
434
              else exit 1; \
435
              fi; \
436
            else true; \
437
            fi; \
438
          done; \
439
        fi
440
EOF
441
 
442
cat ${Makefile} Multi.tem > Makefile.tem
443
rm -f ${Makefile} Multi.tem
444
mv Makefile.tem ${Makefile}
445
 
446
fi # ${ml_toplevel_p} = yes
447
 
448
if [ "${ml_verbose}" = --verbose ]; then
449
  echo "Adding multilib support to Makefile in ${ml_realsrcdir}"
450
  if [ "${ml_toplevel_p}" = yes ]; then
451
    echo "multidirs=${multidirs}"
452
  fi
453
  echo "with_multisubdir=${with_multisubdir}"
454
fi
455
 
456
if [ "${srcdir}" = "." ]; then
457
  if [ "${with_target_subdir}" != "." ]; then
458
    ml_srcdotdot="../"
459
  else
460
    ml_srcdotdot=""
461
  fi
462
else
463
  ml_srcdotdot=""
464
fi
465
 
466
if [ -z "${with_multisubdir}" ]; then
467
  ml_subdir=
468
  ml_builddotdot=
469
  : # ml_srcdotdot= # already set
470
else
471
  ml_subdir="/${with_multisubdir}"
472
  # The '[^/][^/]*' appears that way to work around a SunOS sed bug.
473
  ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
474
  if [ "$srcdir" = "." ]; then
475
    ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
476
  else
477
    : # ml_srcdotdot= # already set
478
  fi
479
fi
480
 
481
if [ "${ml_toplevel_p}" = yes ]; then
482
  ml_do='$(MAKE)'
483
  ml_clean='$(MAKE)'
484
else
485
  ml_do=true
486
  ml_clean=true
487
fi
488
 
489
# TOP is used by newlib and should not be used elsewhere for this purpose.
490
# MULTI{SRC,BUILD}TOP are the proper ones to use.  MULTISRCTOP is empty
491
# when srcdir != builddir.  MULTIBUILDTOP is always some number of ../'s.
492
# FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
493
# delete TOP.  Newlib may wish to continue to use TOP for its own purposes
494
# of course.
495
# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
496
# and lists the subdirectories to recurse into.
497
# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
498
# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
499
# a leading '/'.
500
# MULTIDO is used for targets like all, install, and check where
501
# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
502
# MULTICLEAN is used for the *clean targets.
503
#
504
# ??? It is possible to merge MULTIDO and MULTICLEAN into one.  They are
505
# currently kept separate because we don't want the *clean targets to require
506
# the existence of the compiler (which MULTIDO currently requires) and
507
# therefore we'd have to record the directory options as well as names
508
# (currently we just record the names and use --print-multi-lib to get the
509
# options).
510
 
511
sed -e "s:^TOP[         ]*=[    ]*\([./]*\)[    ]*$:TOP = ${ml_builddotdot}\1:" \
512
    -e "s:^MULTISRCTOP[         ]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
513
    -e "s:^MULTIBUILDTOP[       ]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
514
    -e "s:^MULTIDIRS[   ]*=.*$:MULTIDIRS = ${multidirs}:" \
515
    -e "s:^MULTISUBDIR[         ]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
516
    -e "s:^MULTIDO[     ]*=.*$:MULTIDO = $ml_do:" \
517
    -e "s:^MULTICLEAN[  ]*=.*$:MULTICLEAN = $ml_clean:" \
518
        ${Makefile} > Makefile.tem
519
rm -f ${Makefile}
520
mv Makefile.tem ${Makefile}
521
 
522
# If this is the library's top level, configure each multilib subdir.
523
# This is done at the end because this is the loop that runs configure
524
# in each multilib subdir and it seemed reasonable to finish updating the
525
# Makefile before going on to configure the subdirs.
526
 
527
if [ "${ml_toplevel_p}" = yes ]; then
528
 
529
# We must freshly configure each subdirectory.  This bit of code is
530
# actually partially stolen from the main configure script.  FIXME.
531
 
532
if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
533
 
534
  if [ "${ml_verbose}" = --verbose ]; then
535
    echo "Running configure in multilib subdirs ${multidirs}"
536
    echo "pwd: `pwd`"
537
  fi
538
 
539
  ml_origdir=`pwd`
540
  ml_libdir=`echo $ml_origdir | sed -e 's,^.*/,,'`
541
  # cd to top-level-build-dir/${with_target_subdir}
542
  cd ..
543
 
544
  for ml_dir in ${multidirs}; do
545
 
546
    if [ "${ml_verbose}" = --verbose ]; then
547
      echo "Running configure in multilib subdir ${ml_dir}"
548
      echo "pwd: `pwd`"
549
    fi
550
 
551
    if [ -d ${ml_dir} ]; then true; else mkdir ${ml_dir}; fi
552
    if [ -d ${ml_dir}/${ml_libdir} ]; then true; else mkdir ${ml_dir}/${ml_libdir}; fi
553
 
554
    # Eg: if ${ml_dir} = m68000/m68881, dotdot = ../../
555
    dotdot=../`echo ${ml_dir} | sed -e 's|[^/]||g' -e 's|/|../|g'`
556
 
557
    case ${srcdir} in
558
    ".")
559
      echo Building symlink tree in `pwd`/${ml_dir}/${ml_libdir}
560
      if [ "${with_target_subdir}" != "." ]; then
561
        ml_unsubdir="../"
562
      else
563
        ml_unsubdir=""
564
      fi
565
      (cd ${ml_dir}/${ml_libdir};
566
       ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
567
      if [ -f ${ml_dir}/${ml_libdir}/Makefile ]; then
568
        if [ x"${MAKE}" = x ]; then
569
          (cd ${ml_dir}/${ml_libdir}; make distclean)
570
        else
571
          (cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
572
        fi
573
      fi
574
      ml_newsrcdir="."
575
      ml_srcdiroption=
576
      multisrctop=${dotdot}
577
      ;;
578
    *)
579
      case "${srcdir}" in
580
      /*) # absolute path
581
        ml_newsrcdir=${srcdir}
582
        ;;
583
      *) # otherwise relative
584
        ml_newsrcdir=${dotdot}${srcdir}
585
        ;;
586
      esac
587
      ml_srcdiroption="-srcdir=${ml_newsrcdir}"
588
      multisrctop=
589
      ;;
590
    esac
591
 
592
    case "${progname}" in
593
    /*)     ml_recprog=${progname} ;;
594
    *)      ml_recprog=${dotdot}${progname} ;;
595
    esac
596
 
597
    # FIXME: POPDIR=${PWD=`pwd`} doesn't work here.
598
    ML_POPDIR=`pwd`
599
    cd ${ml_dir}/${ml_libdir}
600
 
601
    if [ -f ${ml_newsrcdir}/configure ]; then
602
      ml_recprog=${ml_newsrcdir}/configure
603
    fi
604
    if eval ${ml_config_shell} ${ml_recprog} \
605
        --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
606
        ${ml_arguments} ${ml_srcdiroption} ; then
607
      true
608
    else
609
      exit 1
610
    fi
611
 
612
    cd ${ML_POPDIR}
613
 
614
  done
615
 
616
  cd ${ml_origdir}
617
fi
618
 
619
fi # ${ml_toplevel_p} = yes
620
fi # ${enable_multilib} = yes

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.