This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Sequential build of libjava
- From: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>
- To: mrs at apple dot com, psmith at gnu dot org
- Cc: gcc-patches at gcc dot gnu dot org, gcc at gcc dot gnu dot org, java-patches at gcc dot gnu dot org, java at gcc dot gnu dot org, lucier at math dot purdue dot edu, matz at suse dot de, mszick at goquest dot com, phil at jaj dot com, tromey at redhat dot com
- Date: Sun, 22 Sep 2002 10:46:09 -0400 (EDT)
- Subject: Re: Sequential build of libjava
- References: <15746.47316.175325.160337@lemming.engeast.baynetworks.com> <65F01575-C99B-11D6-9548-000393941EE6@apple.com> <15750.31165.816608.780674@lemming.engeast.baynetworks.com>
> 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: