Sequential build of libjava

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Sun Sep 22 07:46:00 GMT 2002


 > From: "Paul D. Smith" <psmith@gnu.org>
 > 
 > %% Mike Stump <mrs@apple.com> writes:
 > 
 >   ms> I have a question, if we do:
 > 
 >   ms> 	echo $(MAKE) >/dev/null; $(MULTIDO) what-ev-a
 > 
 > Good idea; yes, this will work.  GNU make merely looks for the text
 > $(MAKE) or ${MAKE}; it doesn't try to examine the shell script to
 > understand what's being done.
 > 
 > Here's another idea which might be even less overhead:
 > 
 >   : $(MAKE); $(MULTIDO) what-ev-a
 > 
 > Or vice versa; put the ": $(MAKE)" at the end after $(MULTIDO).


I didn't see anyone else do it, so I wrote up a patch to accomplish
this.  I'm testing it now, but if anyone else would like to help
verify it solves the problems I'd appreciate it.

My testing on a solaris2 32-way box (-j30) shows that it seems to fix
the multilib serialization problems.  I've noticed one place where
things are still built serial namely in libf2c/libE77.  However that's
because libE77 is built in a shell script loop and it'll do that
serially regardless of whether you have multilibs or not.  I.e. its
not related to "make" or this particular problem.

Notes:

1.  I didn't test libjava because of this issue:
    http://gcc.gnu.org/ml/gcc-bugs/2002-09/msg00265.html and I prefer
    to keep my environment clean for testing.  So I bootstrapped
    without java so if someone else can try that out and verify it I'd
    be appreciative, especially since libjava was the catalyst for all
    of this in the first place. :-)

2.  Wherever we had Makefile.am, I updated the .in file by hand rather
    than regenerating it since I don't have automake installed.  It's
    a one line change so I don't think that's a problem.

Tested via bootstrap -j30 on sparc-sun-solaris2.7 configured with
--enable-languages=c,objc,c++,f77 --disable-checking --disable-nls

The "jobserver unavailable: using -j1" warnings went away and visual
monitoring during bootstrap with `top' showed that the -m64 target
libs were built in parallel.


Once I hear from someone verifying libjava parallel multilibs,

ok to install on the trunk?

		Thanks,
		--Kaveh


2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

boehm-gc:
	* Makefile.am (all-multi): Fix multilib parallel build.
libf2c:
	* Makefile.in (all): Fix multilib parallel build.
libffi:
	* Makefile.am (all-multi): Fix multilib parallel build.
libiberty:
	* Makefile.in (all): Fix multilib parallel build.
libjava:
	* Makefile.am (all-multi): Fix multilib parallel build.
libobjc:
	* Makefile.in (all): Fix multilib parallel build.
libstdc++-v3:
	* Makefile.am (all-multi): Fix multilib parallel build.
zlib:
	* Makefile.am (all-multi): Fix multilib parallel build.

diff -rup orig/egcc-CVS20020921/boehm-gc/Makefile.am egcc-CVS20020921/boehm-gc/Makefile.am
--- orig/egcc-CVS20020921/boehm-gc/Makefile.am	2002-04-23 07:00:31.000000000 -0400
+++ egcc-CVS20020921/boehm-gc/Makefile.am	2002-09-22 09:50:19.450554784 -0400
@@ -144,7 +144,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/boehm-gc/Makefile.in egcc-CVS20020921/boehm-gc/Makefile.in
--- orig/egcc-CVS20020921/boehm-gc/Makefile.in	2002-07-20 19:22:54.000000000 -0400
+++ egcc-CVS20020921/boehm-gc/Makefile.in	2002-09-22 09:50:24.230160803 -0400
@@ -571,7 +571,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libf2c/Makefile.in egcc-CVS20020921/libf2c/Makefile.in
--- orig/egcc-CVS20020921/libf2c/Makefile.in	2002-06-03 22:21:03.000000000 -0400
+++ egcc-CVS20020921/libf2c/Makefile.in	2002-09-22 09:45:22.849185633 -0400
@@ -124,7 +124,7 @@ F2CEXT = abort derf derfc ef1asc ef1cmc 
 # the dependency) and then (perhaps) builds multilibs.
 
 all: all-unilib
-	$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="all-unilib"
+	: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="all-unilib"
 
 # `all-unilib' is the overall target in the absence of multilibs,
 # meant to be invoked via multi-do for multilibs.
diff -rup orig/egcc-CVS20020921/libffi/Makefile.am egcc-CVS20020921/libffi/Makefile.am
--- orig/egcc-CVS20020921/libffi/Makefile.am	2002-07-19 07:00:35.000000000 -0400
+++ egcc-CVS20020921/libffi/Makefile.am	2002-09-22 09:45:48.706697784 -0400
@@ -218,7 +218,7 @@ distclean-recursive: distclean-multi
 maintainer-clean-recursive: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libffi/Makefile.in egcc-CVS20020921/libffi/Makefile.in
--- orig/egcc-CVS20020921/libffi/Makefile.in	2002-07-19 07:00:35.000000000 -0400
+++ egcc-CVS20020921/libffi/Makefile.in	2002-09-22 09:46:10.334702872 -0400
@@ -773,7 +773,7 @@ distclean-recursive: distclean-multi
 maintainer-clean-recursive: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libiberty/Makefile.in egcc-CVS20020921/libiberty/Makefile.in
--- orig/egcc-CVS20020921/libiberty/Makefile.in	2002-07-01 07:00:52.000000000 -0400
+++ egcc-CVS20020921/libiberty/Makefile.in	2002-09-22 09:46:41.901592991 -0400
@@ -105,7 +105,7 @@ SUBDIRS = testsuite
 
 # FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
 all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
-	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
+	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
 
 .PHONY: check installcheck
 check: check-subdir
diff -rup orig/egcc-CVS20020921/libjava/Makefile.am egcc-CVS20020921/libjava/Makefile.am
--- orig/egcc-CVS20020921/libjava/Makefile.am	2002-09-18 07:00:43.000000000 -0400
+++ egcc-CVS20020921/libjava/Makefile.am	2002-09-22 09:47:11.788699643 -0400
@@ -2430,7 +2430,7 @@ distclean-recursive: distclean-multi
 maintainer-clean-recursive: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libjava/Makefile.in egcc-CVS20020921/libjava/Makefile.in
--- orig/egcc-CVS20020921/libjava/Makefile.in	2002-09-18 07:00:43.000000000 -0400
+++ egcc-CVS20020921/libjava/Makefile.in	2002-09-22 09:47:28.097174842 -0400
@@ -4310,7 +4310,7 @@ distclean-recursive: distclean-multi
 maintainer-clean-recursive: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libobjc/Makefile.in egcc-CVS20020921/libobjc/Makefile.in
--- orig/egcc-CVS20020921/libobjc/Makefile.in	2002-05-20 12:33:13.000000000 -0400
+++ egcc-CVS20020921/libobjc/Makefile.in	2002-09-22 09:47:48.355175794 -0400
@@ -137,7 +137,7 @@ FLAGS_TO_PASS = \
 	"tooldir=$(tooldir)"
 
 all: libobjc.la $(OBJC_BOEHM_GC)
-	$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
+	: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
 
 # User-visible header files.
 
diff -rup orig/egcc-CVS20020921/libstdc++-v3/Makefile.am egcc-CVS20020921/libstdc++-v3/Makefile.am
--- orig/egcc-CVS20020921/libstdc++-v3/Makefile.am	2002-09-16 16:00:36.000000000 -0400
+++ egcc-CVS20020921/libstdc++-v3/Makefile.am	2002-09-22 09:48:05.213635789 -0400
@@ -110,7 +110,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/libstdc++-v3/Makefile.in egcc-CVS20020921/libstdc++-v3/Makefile.in
--- orig/egcc-CVS20020921/libstdc++-v3/Makefile.in	2002-09-17 07:00:57.000000000 -0400
+++ egcc-CVS20020921/libstdc++-v3/Makefile.in	2002-09-22 09:48:10.123136801 -0400
@@ -536,7 +536,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/zlib/Makefile.am egcc-CVS20020921/zlib/Makefile.am
--- orig/egcc-CVS20020921/zlib/Makefile.am	2002-03-17 07:01:33.000000000 -0500
+++ egcc-CVS20020921/zlib/Makefile.am	2002-09-22 09:51:51.031704249 -0400
@@ -85,7 +85,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:
diff -rup orig/egcc-CVS20020921/zlib/Makefile.in egcc-CVS20020921/zlib/Makefile.in
--- orig/egcc-CVS20020921/zlib/Makefile.in	2002-03-17 07:01:34.000000000 -0500
+++ egcc-CVS20020921/zlib/Makefile.in	2002-09-22 09:51:58.341032588 -0400
@@ -483,7 +483,7 @@ distclean-am: distclean-multi
 maintainer-clean-am: maintainer-clean-multi
 
 all-multi:
-	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
+	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
 install-multi:
 	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
 mostlyclean-multi:



More information about the Gcc-patches mailing list