diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 273654cfa25..778ec09c75d 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1750,6 +1750,8 @@ $(FULL_DRIVER_NAME): ./xgcc$(exeext) # Otherwise $(SELFTEST_DEPS) is empty when used from /Make-lang.in. SELFTEST_DEPS = $(GCC_PASSES) stmp-int-hdrs $(srcdir)/testsuite/selftests +DO_LINK_SERIALIZATION = @DO_LINK_SERIALIZATION@ + # Language makefile fragments. # The following targets define the interface between us and the languages. @@ -1767,6 +1769,23 @@ SELFTEST_DEPS = $(GCC_PASSES) stmp-int-hdrs $(srcdir)/testsuite/selftests # language hooks, generated by configure @language_hooks@ +ifeq ($(DO_LINK_SERIALIZATION),) +LINK_PROGRESS = : +else +LINK_PROGRESS = msg="Linking |"; cnt=0; if test "$(2)" = start; then \ + idx=0; cnt2=$(DO_LINK_SERIALIZATION); \ + while test $$cnt2 -le $(1); do msg="$${msg}=="; cnt2=`expr $$cnt2 + 1`; idx=`expr $$idx + 1`; done; \ + cnt=$$idx; \ + while test $$cnt -lt $(1); do msg="$${msg}>>"; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}--"; cnt=`expr $$cnt + 1`; \ + else \ + idx=`expr $(1) + 1`; \ + while test $$cnt -le $(1); do msg="$${msg}=="; cnt=`expr $$cnt + 1`; done; \ + fi; \ + while test $$cnt -lt $(SERIAL_COUNT); do msg="$${msg} "; cnt=`expr $$cnt + 1`; done; \ + msg="$${msg}| `expr 100 \* $$idx / $(SERIAL_COUNT)`%"; echo "$$msg" +endif + # Wire in install-gnatlib invocation with `make install' for a configuration # with top-level libada disabled. gnat_install_lib = @gnat_install_lib@ diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index 78fe6023e5b..e41465761c8 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -146,9 +146,10 @@ endif # Define the names for selecting Ada in LANGUAGES. ada: gnat1$(exeext) gnatbind$(exeext) +ada.serial: gnat1$(exeext) # Tell GNU Make to ignore these, if they exist. -.PHONY: ada +.PHONY: ada ada.serial ada.prev # Compute the FLAGS to pass for gnattools, now linked with a C++ driver as # we're linking against at least libcommon which contains C++ compiled code. @@ -667,10 +668,13 @@ ada/libgnat/s-excmac.adb: $(srcdir)/ada/libgnat/s-excmac__$(EH_MECHANISM).adb # Needs to be built with CC=gcc # Since the RTL should be built with the latest compiler, remove the # stamp target in the parent directory whenever gnat1 is rebuilt -gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) libcommon-target.a $(LIBDEPS) +gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) libcommon-target.a \ + $(LIBDEPS) ada.prev + @$(call LINK_PROGRESS,$(INDEX.ada),start) +$(GCC_LLINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) \ libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(CFLAGS) $(RM) stamp-gnatlib2-rts stamp-tools + @$(call LINK_PROGRESS,$(INDEX.ada),end) gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) ggc-none.o libcommon-target.a $(LIBDEPS) +$(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(CFLAGS) diff --git a/gcc/brig/Make-lang.in b/gcc/brig/Make-lang.in index f5538564ed4..dffc7503c14 100644 --- a/gcc/brig/Make-lang.in +++ b/gcc/brig/Make-lang.in @@ -29,8 +29,9 @@ GCCBRIG_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gccbrig|sed \ # The name for selecting brig in LANGUAGES. brig: brig1$(exeext) +brig.serial: brig -.PHONY: brig +.PHONY: brig brig.serial brig.prev CFLAGS-brig/brigspec.o += $(DRIVER_DEFINES) @@ -81,15 +82,12 @@ BRIG_OBJS = \ brig_OBJS = $(BRIG_OBJS) brig/brigspec.o -# brig1$(exeext): $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBDEPS) -# +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ -# $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) - - -brig1$(exeext): $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBDEPS) +brig1$(exeext): $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBDEPS) brig.prev + @$(call LINK_PROGRESS,$(INDEX.brig),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBS) \ $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.brig),end) # Documentation. diff --git a/gcc/c/Make-lang.in b/gcc/c/Make-lang.in index 7efc7c2c332..c776ab65f05 100644 --- a/gcc/c/Make-lang.in +++ b/gcc/c/Make-lang.in @@ -37,9 +37,10 @@ # # Define the names for selecting c in LANGUAGES. c: cc1$(exeext) +c.serial: c # Tell GNU make to ignore these if they exist. -.PHONY: c gcc +.PHONY: c gcc c.serial # The C front end driver. This is different from the drivers for other # front ends, because there is no C language specific driver (i.e. nothing @@ -82,8 +83,10 @@ cc1-checksum.c : build/genchecksum$(build_exeext) checksum-options \ fi cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS) + @$(call LINK_PROGRESS,$(INDEX.c),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) \ cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.c),end) cc1.fda: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov cc1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 diff --git a/gcc/configure b/gcc/configure index ba69f73ed9c..f61b815801e 100755 --- a/gcc/configure +++ b/gcc/configure @@ -710,6 +710,7 @@ subdirs dollar gcc_tooldir enable_lto +DO_LINK_SERIALIZATION DO_LINK_MUTEX MAINT zlibinc @@ -1013,6 +1014,7 @@ with_gc with_system_zlib enable_maintainer_mode enable_link_mutex +enable_link_serialization enable_version_specific_runtime_libs enable_plugin enable_host_shared @@ -1768,6 +1770,10 @@ Optional Features: sometimes confusing) to the casual installer --enable-link-mutex avoid linking multiple front-ends at once to avoid thrashing on the build machine + --enable-link-serialization + avoid linking multiple GCC front-ends at once using + make dependencies to avoid thrashing on the build + machine --enable-version-specific-runtime-libs specify that runtime libraries should be installed in a compiler-specific directory @@ -19030,7 +19036,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19033 "configure" +#line 19039 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -19136,7 +19142,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19139 "configure" +#line 19145 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -30573,6 +30579,31 @@ else fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to serialize linking of multiple front-ends" >&5 +$as_echo_n "checking whether to serialize linking of multiple front-ends... " >&6; } + # Check whether --enable-link-serialization was given. +if test "${enable_link_serialization+set}" = set; then : + enableval=$enable_link_serialization; do_link_serialization=$enableval +else + do_link_serialization=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $do_link_serialization" >&5 +$as_echo "$do_link_serialization" >&6; } + +case "$do_link_serialization" in + yes) + DO_LINK_SERIALIZATION=1;; + [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) + DO_LINK_SERIALIZATION=$do_link_serialization;; + no) + DO_LINK_SERIALIZATION=;; + *) + as_fn_error $? "bad value ${do_link_serialization} given for --enable-link-serialization" "$LINENO" 5 ;; +esac + + # -------------- # Language hooks # -------------- @@ -30733,6 +30764,43 @@ do echo "lang.$t: $x" >> Make-hooks done +echo "ifeq (\$(DO_LINK_SERIALIZATION),)" >> Make-hooks +echo "SERIAL_LIST =" >> Make-hooks +echo else >> Make-hooks +lang_cnt=0 +lang_list= +prev=c.serial +serialization_languages=c +for lang in $all_selected_languages +do + test $lang = c && continue + if test $lang = lto; then + serialization_languages="$serialization_languages lto1 lto2" + else + serialization_languages="$serialization_languages $lang" + fi +done +for lang in $serialization_languages +do + test $lang = c && continue + lang_cnt=`expr $lang_cnt + 1` + lang_list=" $prev$lang_list" + prev=${lang}.serial +done +echo "SERIAL_LIST = \$(wordlist \$(DO_LINK_SERIALIZATION),$lang_cnt,$lang_list)" >> Make-hooks +echo endif >> Make-hooks +echo "SERIAL_COUNT = `expr $lang_cnt + 1`" >> Make-hooks +echo "INDEX.c = 0" >> Make-hooks +lang_idx=1 +for lang in $serialization_languages +do + test $lang = c && continue + echo "$lang.prev: \$(word $lang_cnt,\$(SERIAL_LIST))" >> Make-hooks + echo "INDEX.$lang = $lang_idx" >> Make-hooks + lang_cnt=`expr $lang_cnt - 1` + lang_idx=`expr $lang_idx + 1` +done + # -------- # Option include files # -------- diff --git a/gcc/configure.ac b/gcc/configure.ac index 28d96d1cba3..b2732d17bf4 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -6676,6 +6676,29 @@ else fi AC_SUBST(DO_LINK_MUTEX) +dnl Whether to prevent multiple GCC front-ends from linking at the same time + +AC_MSG_CHECKING([whether to serialize linking of multiple front-ends]) + AC_ARG_ENABLE(link-serialization, +[AS_HELP_STRING([--enable-link-serialization], + [avoid linking multiple GCC front-ends at once using make + dependencies to avoid thrashing on the build machine])], + do_link_serialization=$enableval, + do_link_serialization=no) +AC_MSG_RESULT($do_link_serialization) + +case "$do_link_serialization" in + yes) + DO_LINK_SERIALIZATION=1;; + [[1-9]] | [[1-9]][[0-9]] | [[1-9]][[0-9]][[0-9]]) + DO_LINK_SERIALIZATION=$do_link_serialization;; + no) + DO_LINK_SERIALIZATION=;; + *) + AC_MSG_ERROR(bad value ${do_link_serialization} given for --enable-link-serialization) ;; +esac +AC_SUBST(DO_LINK_SERIALIZATION) + # -------------- # Language hooks # -------------- @@ -6836,6 +6859,43 @@ do echo "lang.$t: $x" >> Make-hooks done +echo "ifeq (\$(DO_LINK_SERIALIZATION),)" >> Make-hooks +echo "SERIAL_LIST =" >> Make-hooks +echo else >> Make-hooks +lang_cnt=0 +lang_list= +prev=c.serial +serialization_languages=c +for lang in $all_selected_languages +do + test $lang = c && continue + if test $lang = lto; then + serialization_languages="$serialization_languages lto1 lto2" + else + serialization_languages="$serialization_languages $lang" + fi +done +for lang in $serialization_languages +do + test $lang = c && continue + lang_cnt=`expr $lang_cnt + 1` + lang_list=" $prev$lang_list" + prev=${lang}.serial +done +echo "SERIAL_LIST = \$(wordlist \$(DO_LINK_SERIALIZATION),$lang_cnt,$lang_list)" >> Make-hooks +echo endif >> Make-hooks +echo "SERIAL_COUNT = `expr $lang_cnt + 1`" >> Make-hooks +echo "INDEX.c = 0" >> Make-hooks +lang_idx=1 +for lang in $serialization_languages +do + test $lang = c && continue + echo "$lang.prev: \$(word $lang_cnt,\$(SERIAL_LIST))" >> Make-hooks + echo "INDEX.$lang = $lang_idx" >> Make-hooks + lang_cnt=`expr $lang_cnt - 1` + lang_idx=`expr $lang_idx + 1` +done + # -------- # Option include files # -------- diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 6ee4e41266f..6be4678776b 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -47,9 +47,10 @@ CP_PLUGIN_HEADERS := cp-tree.h cxx-pretty-print.h name-lookup.h type-utils.h ope # into the C++ rule, but that needs a little bit of work # to do the right thing within all.cross. c++: cc1plus$(exeext) +c++.serial: c++ # Tell GNU make to ignore these if they exist. -.PHONY: c++ +.PHONY: c++ c++.serial c++.prev CFLAGS-cp/g++spec.o += $(DRIVER_DEFINES) @@ -116,9 +117,11 @@ cc1plus-checksum.c : build/genchecksum$(build_exeext) checksum-options \ $(srcdir)/../move-if-change cc1plus-checksum.c.tmp cc1plus-checksum.c; \ fi -cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS) +cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS) c++.prev + @$(call LINK_PROGRESS,$(INDEX.c++),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.c++),end) ifeq ($(ENABLE_MAINTAINER_RULES), true) # Special build rule. This is a maintainer rule, that is only diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in index 18d99abab35..0242c9cc04e 100644 --- a/gcc/d/Make-lang.in +++ b/gcc/d/Make-lang.in @@ -27,9 +27,10 @@ D_LIBPHOBOS = -DLIBPHOBOS=\"gphobos\" # The name for selecting d in LANGUAGES. d: d21$(exeext) +d.serial: d # Tell GNU make to ignore these if they exist. -.PHONY: d +.PHONY: d d.serial d.prev # Create the compiler driver for D. CFLAGS-d/d-spec.o += $(DRIVER_DEFINES) $(D_LIBPHOBOS) @@ -162,9 +163,11 @@ D_ALL_OBJS = $(D_FRONTEND_OBJS) $(D_GENERATED_OBJS) $(D_OBJS) $(D_TARGET_OBJS) d_OBJS = $(D_ALL_OBJS) d/d-spec.o -d21$(exeext): $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBDEPS) +d21$(exeext): $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBDEPS) d.prev + @$(call LINK_PROGRESS,$(INDEX.d),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.d),end) # Documentation. diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index e8fd34c6494..297831fda55 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1564,6 +1564,14 @@ When building GCC, use a mutex to avoid linking the compilers for multiple languages at the same time, to avoid thrashing on build systems with limited free memory. The default is not to use such a mutex. +@item --enable-link-serialization +When building GCC, use make dependencies to serialize linking the compilers for +multiple languages, to avoid thrashing on build +systems with limited free memory. The default is not to add such +dependencies and thus with parallel make potentially link different +compilers concurrently. If the argument is a positive integer, allow +that number of concurrent link processes for the large binaries. + @item --enable-maintainer-mode The build rules that regenerate the Autoconf and Automake output files as well as the GCC master message catalog @file{gcc.pot} are normally diff --git a/gcc/fortran/Make-lang.in b/gcc/fortran/Make-lang.in index 977db6092bc..ea2e49bc086 100644 --- a/gcc/fortran/Make-lang.in +++ b/gcc/fortran/Make-lang.in @@ -72,9 +72,10 @@ fortran_OBJS = $(F95_OBJS) fortran/gfortranspec.o # # Define the names for selecting gfortran in LANGUAGES. fortran: f951$(exeext) +fortran.serial: fortran # Tell GNU make to ignore files by these names if they exist. -.PHONY: fortran +.PHONY: fortran fortran.serial fortran.prev CFLAGS-fortran/gfortranspec.o += $(DRIVER_DEFINES) @@ -92,11 +93,12 @@ gfortran-cross$(exeext): gfortran$(exeext) cp gfortran$(exeext) gfortran-cross$(exeext) # The compiler itself is called f951. -f951$(exeext): $(F95_OBJS) \ - $(BACKEND) $(LIBDEPS) attribs.o +f951$(exeext): $(F95_OBJS) $(BACKEND) $(LIBDEPS) attribs.o fortran.prev + @$(call LINK_PROGRESS,$(INDEX.fortran),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(F95_OBJS) $(BACKEND) $(ZLIB) $(LIBS) attribs.o \ $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.fortran),end) gt-fortran-trans.h : s-gtype; @true # diff --git a/gcc/go/Make-lang.in b/gcc/go/Make-lang.in index ce711b2cbde..7c586cbb535 100644 --- a/gcc/go/Make-lang.in +++ b/gcc/go/Make-lang.in @@ -27,8 +27,9 @@ GCCGO_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gccgo|sed '$(pr # The name for selecting go in LANGUAGES. go: go1$(exeext) +go.serial: go -.PHONY: go +.PHONY: go go.serial go.prev CFLAGS-go/gospec.o += $(DRIVER_DEFINES) @@ -78,9 +79,11 @@ GO_OBJS = \ go_OBJS = $(GO_OBJS) go/gospec.o -go1$(exeext): $(GO_OBJS) attribs.o $(BACKEND) $(LIBDEPS) +go1$(exeext): $(GO_OBJS) attribs.o $(BACKEND) $(LIBDEPS) go.prev + @$(call LINK_PROGRESS,$(INDEX.go),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(GO_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.go),end) # Documentation. diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index 3b543926c98..012f62d830c 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -81,8 +81,10 @@ jit: $(LIBGCCJIT_FILENAME) \ $(FULL_DRIVER_NAME) endif +jit.serial: $(LIBGCCJIT_FILENAME) + # Tell GNU make to ignore these if they exist. -.PHONY: jit +.PHONY: jit jit.serial jit.prev jit_OBJS = attribs.o \ jit/dummy-frontend.o \ @@ -117,12 +119,14 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) \ $(LIBDEPS) $(srcdir)/jit/libgccjit.map \ - $(EXTRA_GCC_OBJS) + $(EXTRA_GCC_OBJS) jit.prev + @$(call LINK_PROGRESS,$(INDEX.jit),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) $(EXTRA_GCC_LIBS) $(LIBS) $(BACKENDLIBS) \ $(EXTRA_GCC_OBJS) \ $(LIBGCCJIT_EXTRA_OPTS) + @$(call LINK_PROGRESS,$(INDEX.jit),end) # Create symlinks when not building for Windows ifeq (,$(findstring mingw,$(target))) diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in index 0b73f9ef7bb..4a03f1930c4 100644 --- a/gcc/lto/Make-lang.in +++ b/gcc/lto/Make-lang.in @@ -41,10 +41,16 @@ lto_dump_OBJS = $(LTO_DUMP_OBJS) # Rules +lto: $(LTO_EXE) $(LTO_DUMP_EXE) +lto1.serial: $(LTO_EXE) +lto2.serial: $(LTO_DUMP_EXE) + +.PHONY: lto lto1.serial lto1.prev lto2.serial lto2.prev + # These hooks are used by the main GCC Makefile. Consult that # Makefile for documentation. -lto.all.cross: $(LTO_EXE) $(LTO_DUMP_EXE) -lto.start.encap: $(LTO_EXE) $(LTO_DUMP_EXE) +lto.all.cross: +lto.start.encap: lto.rest.encap: lto.tags: lto.install-common: installdirs @@ -84,13 +90,17 @@ lto.stagefeedback: # Use strict warnings for this front end. lto-warn = $(STRICT_WARN) -$(LTO_EXE): $(LTO_OBJS) $(BACKEND) $(LIBDEPS) +$(LTO_EXE): $(LTO_OBJS) $(BACKEND) $(LIBDEPS) lto1.prev + @$(call LINK_PROGRESS,$(INDEX.lto1),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(LTO_OBJS) $(BACKEND) $(BACKENDLIBS) $(LIBS) + @$(call LINK_PROGRESS,$(INDEX.lto1),end) -$(LTO_DUMP_EXE): $(LTO_DUMP_OBJS) $(BACKEND) $(LIBDEPS) +$(LTO_DUMP_EXE): $(LTO_DUMP_OBJS) $(BACKEND) $(LIBDEPS) lto2.prev + @$(call LINK_PROGRESS,$(INDEX.lto2),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(LTO_DUMP_OBJS) $(BACKEND) $(BACKENDLIBS) $(LIBS) + @$(call LINK_PROGRESS,$(INDEX.lto2),end) lto/lto-dump.o: $(LTO_OBJS) diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in index add1355a096..a19befb68a0 100644 --- a/gcc/objc/Make-lang.in +++ b/gcc/objc/Make-lang.in @@ -38,9 +38,10 @@ # # Define the names for selecting Objective-C in LANGUAGES. objc: cc1obj$(exeext) +objc.serial: objc # Tell GNU make to ignore these if they exist. -.PHONY: objc +.PHONY: objc objc.serial objc.prev # Use maximal warnings for this front end. objc-warn = $(STRICT_WARN) @@ -62,10 +63,13 @@ cc1obj-checksum.c : build/genchecksum$(build_exeext) checksum-options \ $(BACKEND) $(LIBDEPS) checksum-options > cc1obj-checksum.c.tmp && \ $(srcdir)/../move-if-change cc1obj-checksum.c.tmp cc1obj-checksum.c -cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(LIBDEPS) +cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) \ + $(LIBDEPS) objc.prev + @$(call LINK_PROGRESS,$(INDEX.objc),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \ $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.objc),end) objc.srcextra: diff --git a/gcc/objcp/Make-lang.in b/gcc/objcp/Make-lang.in index 5bfef2410f2..2f6954e37c0 100644 --- a/gcc/objcp/Make-lang.in +++ b/gcc/objcp/Make-lang.in @@ -39,9 +39,10 @@ # # Define the names for selecting Objective-C++ in LANGUAGES. obj-c++: cc1objplus$(exeext) +obj-c++.serial: obj-c++ # Tell GNU make to ignore these if they exist. -.PHONY: obj-c++ +.PHONY: obj-c++ obj-c++.serial obj-c++.prev # Use maximal warnings for this front end. Also, make ObjC and C++ # headers accessible. @@ -66,9 +67,12 @@ cc1objplus-checksum.c : build/genchecksum$(build_exeext) checksum-options \ $(srcdir)/../move-if-change cc1objplus-checksum.c.tmp \ cc1objplus-checksum.c -cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS) +cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) \ + $(LIBDEPS) obj-c++.prev + @$(call LINK_PROGRESS,$(INDEX.obj-c++),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.obj-c++),end) # Objective C++ language specific files.