]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - Makefile.tpl
[Ada] Improved support for aspect alignment in CCG
[thirdparty/gcc.git] / Makefile.tpl
index beabadc6213d886781c2a46e785e831737b905ac..efed1511750412f7dff03a363779b78c6ecccb41 100644 (file)
@@ -156,10 +156,11 @@ BUILD_EXPORTS = \
        CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
        CXX="$(CXX_FOR_BUILD)"; export CXX; \
        CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
-       GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
        GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
        GOC="$(GOC_FOR_BUILD)"; export GOC; \
        GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \
+       GDC="$(GDC_FOR_BUILD)"; export GDC; \
+       GDCFLAGS="$(GDCFLAGS_FOR_BUILD)"; export GDCFLAGS; \
        DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
        LD="$(LD_FOR_BUILD)"; export LD; \
        LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
@@ -194,12 +195,13 @@ HOST_EXPORTS = \
        CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
        CXX="$(CXX)"; export CXX; \
        CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
-       GCJ="$(GCJ)"; export GCJ; \
        GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \
        GOC="$(GOC)"; export GOC; \
+       GDC="$(GDC)"; export GDC; \
        AR="$(AR)"; export AR; \
        AS="$(AS)"; export AS; \
        CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
+       CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
        DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
        LD="$(LD)"; export LD; \
        LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \
@@ -209,6 +211,7 @@ HOST_EXPORTS = \
        WINDMC="$(WINDMC)"; export WINDMC; \
        OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
        OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
+       OTOOL="$(OTOOL)"; export OTOOL; \
        READELF="$(READELF)"; export READELF; \
        AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
        AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
@@ -217,6 +220,7 @@ HOST_EXPORTS = \
        NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \
        OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \
        OBJCOPY_FOR_TARGET="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY_FOR_TARGET; \
+       OTOOL_FOR_TARGET="$(OTOOL_FOR_TARGET)"; export OTOOL_FOR_TARGET; \
        RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
        READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \
        TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
@@ -227,6 +231,7 @@ HOST_EXPORTS = \
        ISLINC="$(HOST_ISLINC)"; export ISLINC; \
        LIBELFLIBS="$(HOST_LIBELFLIBS)"; export LIBELFLIBS; \
        LIBELFINC="$(HOST_LIBELFINC)"; export LIBELFINC; \
+       XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \
 @if gcc-bootstrap
        $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
@@ -260,6 +265,14 @@ POSTSTAGE1_HOST_EXPORTS = \
        CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \
        $(POSTSTAGE1_CXX_EXPORT) \
        $(LTO_EXPORTS) \
+       GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
+         -B$(build_tooldir)/bin/ $(GDC_FLAGS_FOR_TARGET) \
+         -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \
+         -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \
+         -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
+         -L$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/.libs"; \
+       export GDC; \
+       GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \
        GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
        LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
        HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
@@ -280,9 +293,9 @@ BASE_TARGET_EXPORTS = \
        CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
        CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
        CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
-       GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \
        GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \
        GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
+       GDC="$(GDC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GDC; \
        DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
        LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
        LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
@@ -290,6 +303,7 @@ BASE_TARGET_EXPORTS = \
        NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
        OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
        OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \
+       OTOOL="$(OTOOL_FOR_TARGET)"; export OTOOL; \
        RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
        READELF="$(READELF_FOR_TARGET)"; export READELF; \
        STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
@@ -314,7 +328,7 @@ NORMAL_TARGET_EXPORTS = \
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
 
-# Where to find ISL
+# Where to find isl
 HOST_ISLLIBS = @isllibs@
 HOST_ISLINC = @islinc@
 
@@ -322,8 +336,6 @@ HOST_ISLINC = @islinc@
 HOST_LIBELFLIBS = @libelflibs@
 HOST_LIBELFINC = @libelfinc@
 
-EXTRA_CONFIGARGS_LIBJAVA = @EXTRA_CONFIGARGS_LIBJAVA@
-
 # ----------------------------------------------
 # Programs producing files for the BUILD machine
 # ----------------------------------------------
@@ -347,9 +359,9 @@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
 CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
 CXX_FOR_BUILD = @CXX_FOR_BUILD@
 DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
-GCJ_FOR_BUILD = @GCJ_FOR_BUILD@
 GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@
 GOC_FOR_BUILD = @GOC_FOR_BUILD@
+GDC_FOR_BUILD = @GDC_FOR_BUILD@
 LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
 LD_FOR_BUILD = @LD_FOR_BUILD@
 NM_FOR_BUILD = @NM_FOR_BUILD@
@@ -379,6 +391,8 @@ MAKEINFO = @MAKEINFO@
 EXPECT = @EXPECT@
 RUNTEST = @RUNTEST@
 
+AUTO_PROFILE = gcc-auto-profile -c 10000000
+
 # This just becomes part of the MAKEINFO definition passed down to
 # sub-makes.  It lets flags be given on the command line while still
 # using the makeinfo from the object tree.
@@ -399,12 +413,14 @@ LD = @LD@
 LIPO = @LIPO@
 NM = @NM@
 OBJDUMP = @OBJDUMP@
+OTOOL = @OTOOL@
 RANLIB = @RANLIB@
 READELF = @READELF@
 STRIP = @STRIP@
 WINDRES = @WINDRES@
 WINDMC = @WINDMC@
 
+GDC = @GDC@
 GNATBIND = @GNATBIND@
 GNATMAKE = @GNATMAKE@
 
@@ -414,6 +430,9 @@ LIBCFLAGS = $(CFLAGS)
 CXXFLAGS = @CXXFLAGS@
 LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
 GOCFLAGS = $(CFLAGS)
+GDCFLAGS = $(CFLAGS)
+
+CREATE_GCOV = create_gcov
 
 TFLAGS =
 
@@ -453,11 +472,30 @@ STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \
          --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
          --disable-build-format-warnings
 
+# When using the slow stage1 compiler disable IL verification and forcefully
+# enable it when using the stage2 compiler instead.  As we later compare
+# stage2 and stage3 we are merely avoid doing redundant work, plus we apply
+# checking when building all target libraries for release builds.
+STAGE1_TFLAGS += -fno-checking
+STAGE2_CFLAGS += -fno-checking
+STAGE2_TFLAGS += -fno-checking
+STAGE3_CFLAGS += -fchecking=1
+STAGE3_TFLAGS += -fchecking=1
+
 STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
 STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
 
-STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use
-STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS)
+STAGEtrain_CFLAGS = $(filter-out -fchecking=1,$(STAGE3_CFLAGS))
+STAGEtrain_TFLAGS = $(filter-out -fchecking=1,$(STAGE3_TFLAGS))
+
+STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use
+STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS)
+
+STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g
+STAGEautoprofile_TFLAGS = $(STAGE2_TFLAGS)
+
+STAGEautofeedback_CFLAGS = $(STAGE3_CFLAGS)
+STAGEautofeedback_TFLAGS = $(STAGE3_TFLAGS)
 
 do-compare = @do_compare@
 do-compare3 = $(do-compare)
@@ -477,9 +515,9 @@ CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@
 GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@
 CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@
 RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@
-GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@
 GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@
 GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@
+GDC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GDC_FOR_TARGET@
 DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
 LD_FOR_TARGET=@LD_FOR_TARGET@
 
@@ -487,6 +525,7 @@ LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
 NM_FOR_TARGET=@NM_FOR_TARGET@
 OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
 OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@
+OTOOL_FOR_TARGET=@OTOOL_FOR_TARGET@
 RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
 READELF_FOR_TARGET=@READELF_FOR_TARGET@
 STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
@@ -504,6 +543,7 @@ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
 LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
 LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
 GOCFLAGS_FOR_TARGET = -O2 -g
+GDCFLAGS_FOR_TARGET = -O2 -g
 
 FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
 SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
@@ -585,11 +625,13 @@ BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \
        "[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \
        "STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \
        "STAGE[+id+]_CXXFLAGS=$(STAGE[+id+]_CXXFLAGS)" \
+       "STAGE[+id+]_GENERATOR_CFLAGS=$(STAGE[+id+]_GENERATOR_CFLAGS)" \
        "STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \
        $(CXX_FOR_TARGET_FLAG_TO_PASS) \
        "TFLAGS=$(TFLAGS)" \
        "CONFIG_SHELL=$(SHELL)" \
-       "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" 
+       "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+       $(if $(LSAN_OPTIONS),"LSAN_OPTIONS=$(LSAN_OPTIONS)")
 
 # We leave this in just in case, but it is not needed anymore.
 RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
@@ -602,18 +644,20 @@ EXTRA_HOST_FLAGS = \
        'CC=$(CC)' \
        'CXX=$(CXX)' \
        'DLLTOOL=$(DLLTOOL)' \
-       'GCJ=$(GCJ)' \
        'GFORTRAN=$(GFORTRAN)' \
        'GOC=$(GOC)' \
+       'GDC=$(GDC)' \
        'LD=$(LD)' \
        'LIPO=$(LIPO)' \
        'NM=$(NM)' \
        'OBJDUMP=$(OBJDUMP)' \
+       'OTOOL=$(OTOOL)' \
        'RANLIB=$(RANLIB)' \
        'READELF=$(READELF)' \
        'STRIP=$(STRIP)' \
        'WINDRES=$(WINDRES)' \
-       'WINDMC=$(WINDMC)'
+       'WINDMC=$(WINDMC)' \
+       'CREATE_GCOV=$(CREATE_GCOV)'
 
 FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)
 
@@ -628,6 +672,7 @@ STAGE1_FLAGS_TO_PASS = \
 POSTSTAGE1_FLAGS_TO_PASS = \
        CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
        CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \
+       GDC="$${GDC}" GDC_FOR_BUILD="$${GDC_FOR_BUILD}" \
        GNATBIND="$${GNATBIND}" \
        LDFLAGS="$${LDFLAGS}" \
        HOST_LIBS="$${HOST_LIBS}" \
@@ -657,10 +702,11 @@ EXTRA_TARGET_FLAGS = \
         $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
        'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
        'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
-       'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
        'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
        'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
        'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \
+       'GDC=$$(GDC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+       'GDCFLAGS=$$(GDCFLAGS_FOR_TARGET)' \
        'LD=$(COMPILER_LD_FOR_TARGET)' \
        'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
        'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
@@ -806,7 +852,7 @@ local-clean:
 
 local-distclean:
        -rm -f Makefile config.status config.cache mh-frag mt-frag
-       -rm -f maybedep.tmp serdep.tmp
+       -rm -f maybedep.tmp serdep.tmp stage_final
        -if [ "$(TARGET_SUBDIR)" != "." ]; then \
          rm -rf $(TARGET_SUBDIR); \
        else true; fi
@@ -818,7 +864,8 @@ local-distclean:
        -rm -f texinfo/doc/Makefile texinfo/po/POTFILES
        -rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
        -rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null
-       -rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null
+       -rmdir fastjar gcc gnattools gotools libcc1 libiberty 2>/dev/null
+       -rmdir texinfo zlib 2>/dev/null
        -find . -name config.cache -exec rm -f {} \; \; 2>/dev/null
 
 local-maintainer-clean:
@@ -1142,11 +1189,13 @@ all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
        [+exports+][+ IF prev +] \
        [+poststage1_exports+][+ ENDIF prev +] [+extra_exports+] \
        cd [+subdir+]/[+module+] && \
+       [+autoprofile+] \
        $(MAKE) $(BASE_FLAGS_TO_PASS)[+ IF prefix +] \
                CFLAGS="$(CFLAGS_FOR_TARGET)" \
                CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
                LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \
                CFLAGS="$(STAGE[+id+]_CFLAGS)" \
+               GENERATOR_CFLAGS="$(STAGE[+id+]_GENERATOR_CFLAGS)" \
                CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF prev +] \
                LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
                LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
@@ -1155,7 +1204,7 @@ all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
                LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
                [+args+] [+IF prev +][+poststage1_args+][+ ELSE prev +] \
                [+stage1_args+][+ ENDIF prev +] [+extra_make_flags+] \
-               TFLAGS="$(STAGE[+id+]_TFLAGS)" \
+               TFLAGS="$(STAGE[+id+]_TFLAGS)" [+profile_data+] \
                $(TARGET-stage[+id+]-[+prefix+][+module+])
 
 maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
@@ -1451,6 +1500,10 @@ ENDIF raw_cxx +]
 check-target-libgomp-c++:
        $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libgomp
 
+.PHONY: check-target-libgomp-fortran
+check-target-libgomp-fortran:
+       $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) fortran.exp" check-target-libgomp
+
 @endif target-libgomp
 
 @if target-libitm
@@ -1625,7 +1678,7 @@ do-clean: clean-stage[+id+]
         sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \
        files=`find stage[+id+]-* -name "*$(objext)" -print | \
                 sed -n s,^stage$$sed-,,p`; \
-       for file in $${files}; do \
+       for file in $${files} ${extra-compare}; do \
          f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \
          if test ! -f $$f1; then continue; fi; \
          $(do-[+compare-target+]) > /dev/null 2>&1; \
@@ -1805,25 +1858,46 @@ configure-target-[+module+]: maybe-all-gcc[+
    (define dep-maybe (lambda ()
       (if (exist? "hard") "" "maybe-")))
 
-   ;; dep-kind returns "normal" if the dependency is on an "install" target,
-   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
-   ;; configure or build dependencies between bootstrapped modules; it returns
-   ;; "prebootstrap" for configure or build dependencies of bootstrapped
-   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
-   ;; is only necessary for host modules.
+   ;; dep-kind returns returns "prebootstrap" for configure or build
+   ;; dependencies of bootstrapped modules on a build module
+   ;; (e.g. all-gcc on all-build-bison); "normal" if the dependency is
+   ;; on an "install" target, or if the dependence module is not
+   ;; bootstrapped; otherwise, it returns "bootstrap" or
+   ;; "postbootstrap" depending on whether the dependent module is
+   ;; bootstrapped.  All this is only necessary for host and target
+   ;; modules.  It might seem like, in order to avoid build races, we
+   ;; might need more elaborate detection between prebootstrap and
+   ;; postbootstrap modules, but there are no host prebootstrap
+   ;; modules.  If there were any non-bootstrap host modules that
+   ;; bootstrap modules depended on, we'd get unsatisfied per-stage
+   ;; dependencies on them, which would be immediately noticed.
    (define dep-kind (lambda ()
-      (if (and (hash-ref boot-modules (dep-module "module"))
-              (=* (dep-module "on") "build-"))
-         "prebootstrap"
+      (cond
+       ((and (hash-ref boot-modules (dep-module "module"))
+            (=* (dep-module "on") "build-"))
+       "prebootstrap")
+
+       ((or (= (dep-subtarget "on") "install-")
+           (not (hash-ref boot-modules (dep-module "on"))))
+       "normal")
+
+       ((hash-ref boot-modules (dep-module "module"))
+       "bootstrap")
+
+       (1 "postbootstrap"))))
 
-         (if (or (= (dep-subtarget "on") "install-")
-                 (not (hash-ref boot-modules (dep-module "module")))
-                 (not (hash-ref boot-modules (dep-module "on"))))
-              "normal"
-             "bootstrap"))))
+   (define make-postboot-dep (lambda ()
+     (let ((target (dep-module "module")) (dep "stage_last"))
+       (unless (= (hash-ref postboot-targets target) dep)
+        (hash-create-handle! postboot-targets target dep)
+        ;; All non-bootstrap modules' configure target already
+        ;; depend on dep.
+        (unless (=* target "target-")
+           (string-append "configure-" target ": " dep "\n"))))))
 
    ;; We now build the hash table that is used by dep-kind.
    (define boot-modules (make-hash-table 113))
+   (define postboot-targets (make-hash-table 113))
 +]
 
 [+ FOR host_modules +][+
@@ -1840,18 +1914,23 @@ configure-target-[+module+]: maybe-all-gcc[+
 # to check for bootstrap/prebootstrap dependencies.  To resolve
 # prebootstrap dependencies, prebootstrap modules are gathered in
 # a hash table.
-[+ FOR dependencies +][+ (make-dep "" "") +]
-[+ CASE (dep-kind) +]
-[+ == "prebootstrap"
-     +][+ FOR bootstrap_stage +]
-[+ (make-dep (dep-stage) "") +][+
-       ENDFOR bootstrap_stage +]
-[+ == "bootstrap"
-     +][+ FOR bootstrap_stage +]
-[+ (make-dep (dep-stage) (dep-stage)) +][+
-       ENDFOR bootstrap_stage +]
-[+ ESAC +][+
-ENDFOR dependencies +]
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "prebootstrap" +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
+[+ (make-dep (dep-stage) "") +][+ ENDFOR bootstrap_stage +]
+[+ == "bootstrap" +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
+[+ (make-dep (dep-stage) (dep-stage)) +][+ ENDFOR bootstrap_stage +]
+[+ == "normal" +][+ (make-dep "" "") +]
+[+ ESAC +][+ ENDFOR dependencies +]
+
+@if gcc-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap" +][+ (make-postboot-dep) +][+ ESAC +][+
+ENDFOR dependencies +]@endif gcc-bootstrap
+
+@unless gcc-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap" +][+ (make-dep "" "") +]
+[+ ESAC +][+ ENDFOR dependencies +]@endunless gcc-bootstrap
 
 # Dependencies for target modules on other target modules are
 # described by lang_env_dependencies; the defaults apply to anything
@@ -1926,7 +2005,10 @@ config.status: configure
 # Rebuilding configure.
 AUTOCONF = autoconf
 $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
-       $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
+       $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 \
+       $(srcdir)/config/elf.m4 $(srcdir)/config/isl.m4 \
+       $(srcdir)/libtool.m4 $(srcdir)/ltoptions.m4 $(srcdir)/ltsugar.m4 \
+       $(srcdir)/ltversion.m4 $(srcdir)/lt~obsolete.m4
        cd $(srcdir) && $(AUTOCONF)
 
 # ------------------------------