Avoid race condition by "make install -j1" in canadian build->target
Andrew Hsieh [Fri, 18 Jan 2013 18:53:36 +0000 (10:53 -0800)]
The first stage of canadian build "build->target" fails very
frequently during libiberty.a installation in parallel ( > -j4)
The observed sympton is that all threads try to install the
same libiberty.a and latecomer fails in "mv -f" when libiberty.an
is already renamed. eg.

  /usr/bin/install -c -m 644 ./libiberty.a \
    my-build-path/host-x86_64-linux-gnu/install/lib/libiberty.an
  ( cd my-build-path/host-x86_64-linux-gnu/install/lib ;
    chmod 644 ./libiberty.an ;
    x86_64-linux-gnu-ranlib ./libiberty.an )
  mv -f my-build-path/host-x86_64-linux-gnu/install/lib/libiberty.an \
        my-build-path/host-x86_64-linux-gnu/install/lib/libiberty.a

build/tools/build-gcc.sh can scale back and continue in half -j
until it succeeds, but the 2nd stage "host->target" often build
slowly with lower -j

Reduce compilations time of GCC 4.7 --mingw from 669s to 543s, or
1.23X

Change-Id: Ie683319adf445303f485258c65ef3189f605f300

Makefile.in

index 9f78f6f..f55c7c3 100644 (file)
@@ -253,7 +253,7 @@ install-canadian-tools: stmp-install-canadian-tools
 stmp-install-canadian-tools: stmp-build-canadian-tools
        ($(canadian_build_env) \
         cd $(CANADIAN_ROOT) && \
-        $(MAKE) install prefix=$(CANADIAN_ROOT)/install) && \
+        $(MAKE) -j1 install prefix=$(CANADIAN_ROOT)/install) && \
        $(STAMP) $@
 
 # When building canadian cross toolchain we cannot build GCC target libraries.