As described in pr other/67627, the all-multi target can be built in parallel with the %_.lo targets which generate make dependencies that are parsed during the build of all-multi.
gcc -MD does not generate the makefile dependencies in an atomic way so make can fail if it concurrently parses those half-written files. (not observed on x86, but happens on arm native builds.) this workaround forces all-multi to only run after the *_.lo targets are done, but there might be a better solution using automake properly. (automake should know about the generated make dependency files that are included into the makefile so no manual tinkering is needed to get the right build order, but i don't know how to do that.) 2015-12-04 Szabolcs Nagy <szabolcs.n...@arm.com> PR other/67627 * Makefile.am (all-multi): Add dependency. * Makefile.in: Regenerate.
diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index bd0ab29..38c635f 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -139,3 +139,10 @@ endif libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) + +# Override the automake generated all-multi rule to guarantee that all-multi +# is not run in parallel with the %_.lo rules which generate $(DEPDIR)/*.Ppo +# makefile fragments to avoid broken *.Ppo getting included into the Makefile +# when it is reloaded during the build of all-multi. +all-multi: $(libatomic_la_LIBADD) + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index b696d55..a083d87 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -496,12 +496,6 @@ clean-libtool: distclean-libtool: -rm -f libtool config.lt - -# GNU Make needs to see an explicit $(MAKE) variable in the command it -# runs to enable its job server during parallel builds. Hence the -# comments below. -all-multi: - $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) install-multi: $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) @@ -800,6 +794,13 @@ vpath % $(strip $(search_path)) %_.lo: Makefile $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC) +# Override the automake generated all-multi rule to guarantee that all-multi +# is not run in parallel with the %_.lo rules which generate $(DEPDIR)/*.Ppo +# makefile fragments to avoid broken *.Ppo getting included into the Makefile +# when it is reloaded during the build of all-multi. +all-multi: $(libatomic_la_LIBADD) + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: