With multilib, libgcc.mk has crtendS.o: stmp-dirs $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CC="$(CC)" CFLAGS="$(CFLAGS)" \ BUILD_PREFIX="$(BUILD_PREFIX)" \ BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) " \ MULTILIB_CFLAGS="" T= crtendS.o 32/crtendS.o: stmp-dirs $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CC="$(CC)" CFLAGS="$(CFLAGS)" \ BUILD_PREFIX="$(BUILD_PREFIX)" \ BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) -m32 " \ MULTILIB_CFLAGS=" -m32" T=32/ 32/crtendS.o crtbeginT.o: stmp-dirs $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CC="$(CC)" CFLAGS="$(CFLAGS)" \ BUILD_PREFIX="$(BUILD_PREFIX)" \ BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) " \ MULTILIB_CFLAGS="" T= crtbeginT.o 32/crtbeginT.o: stmp-dirs $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CC="$(CC)" CFLAGS="$(CFLAGS)" \ BUILD_PREFIX="$(BUILD_PREFIX)" \ BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) -m32 " \ MULTILIB_CFLAGS=" -m32" T=32/ 32/crtbeginT.o all: stmp-dirs ./libgcc.a ./libgcov.a ./libgcc_eh.a ./libgcc_s.so 32/libgcc.a 32/libgcov.a 32/libgcc_eh.a 32/libgcc_s_32.so crtbegin.o 32/crtbegin.o crtend.o 32/crtend.o crtbeginS.o 32/crtbeginS.o crtendS.o 32/crtendS.o crtbeginT.o 32/crtbeginT.o
When we do "make -j N" on a SMP machine, we may get make GCC_FOR_TARGET=" ./xgcc -B./ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/ -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/include -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/sys-include -L/export/build/gnu/gcc/build-x86_64-linux/gcc/../ld" \ AR_FOR_TARGET="ar" \ AR_CREATE_FOR_TARGET="ar rc" \ AR_EXTRACT_FOR_TARGET="ar x" \ AR_FLAGS_FOR_TARGET="" \ CC="stage1/xgcc -Bstage1/ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/" CFLAGS="-g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Werror " \ BUILD_PREFIX="" \ BUILD_PREFIX_1="loser-" \ LANGUAGES="c gcov gcov-dump c++ java objc" \ LIBGCC2_CFLAGS="-O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -m32 " \ MULTILIB_CFLAGS=" -m32" T=32/ 32/crtbegin.o make GCC_FOR_TARGET=" ./xgcc -B./ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/ -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/include -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/sys-include -L/export/build/gnu/gcc/build-x86_64-linux/gcc/../ld" \ AR_FOR_TARGET="ar" \ AR_CREATE_FOR_TARGET="ar rc" \ AR_EXTRACT_FOR_TARGET="ar x" \ AR_FLAGS_FOR_TARGET="" \ CC="stage1/xgcc -Bstage1/ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/" CFLAGS="-g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Werror " \ BUILD_PREFIX="" \ BUILD_PREFIX_1="loser-" \ LANGUAGES="c gcov gcov-dump c++ java objc" \ LIBGCC2_CFLAGS="-O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -m32 " \ MULTILIB_CFLAGS=" -m32" T=32/ 32/crtend.o make[6]: Entering directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[6]: Entering directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' echo | ./xgcc -B./ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/ -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/include -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/sys-include -L/export/build/gnu/gcc/build-x86_64-linux/gcc/../ld -E -dM - | \ sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \ s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \ sort -u > tmp-macro_list echo | ./xgcc -B./ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/ -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/include -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/sys-include -L/export/build/gnu/gcc/build-x86_64-linux/gcc/../ld -E -dM - | \ sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \ s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \ sort -u > tmp-macro_list /bin/sh /net/gnu/export/gnu/src/gcc/gcc/gcc/../move-if-change tmp-macro_list macro_list /bin/sh /net/gnu/export/gnu/src/gcc/gcc/gcc/../move-if-change tmp-macro_list macro_list macro_list is unchanged ./xgcc -B./ -B/usr/gcc-4.0/x86_64-unknown-linux-gnu/bin/ -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/include -isystem /usr/gcc-4.0/x86_64-unknown-linux-gnu/sys-include -L/export/build/gnu/gcc/build-x86_64-linux/gcc/../ld -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -I. -I32 -I/net/gnu/export/gnu/src/gcc/gcc/gcc -I/net/gnu/export/gnu/src/gcc/gcc/gcc/32 -I/net/gnu/export/gnu/src/gcc/gcc/gcc/../include -I/net/gnu/export/gnu/src/gcc/gcc/gcc/../libcpp/include -m32 -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time -fno-omit-frame-pointer -fno-asynchronous-unwind-tables \ -c /net/gnu/export/gnu/src/gcc/gcc/gcc/crtstuff.c -DCRT_END \ -o 32/crtend.o cmp: tmp-macro_list: No such file or directory mv: cannot stat `tmp-macro_list': No such file or directory make[6]: *** [macro_list] Error 1 make[6]: Leaving directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[5]: *** [32/crtbegin.o] Error 2 make[5]: *** Waiting for unfinished jobs.... make[6]: Leaving directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[5]: Leaving directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[4]: *** [stmp-multilib] Error 2 make[4]: Leaving directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[3]: *** [stage2_build] Error 2 make[3]: Leaving directory `/export/build/gnu/gcc/build-x86_64-linux/gcc' make[2]: *** [bootstrap] Error 2 Basically, we can't have more than one "make xxx" if xxx have common dependencies. -- Summary: libgcc.mk isn't parallel build safe for multilib Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: normal Priority: P2 Component: bootstrap AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hjl at lucon dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18532