This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Last toplevel bootstrap patch
- From: Paolo Bonzini <bonzini at gnu dot org>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Nathanael Nerode <neroden at gcc dot gnu dot org>
- Date: Tue, 31 Aug 2004 12:24:17 +0200
- Subject: [PATCH] Last toplevel bootstrap patch
[Nathanael: this is the only pending patch for you]
This is the last toplevel bootstrap patch, which takes care of the clean
and distclean targets. All it remains is to enable it by default: this
cannot be done without prior testing by a larger audience. This surely
won't happen for September 5 -- we'll defer to Mark's judgement after
people will have expressed their thoughts about the
usefulness/robustness of the project.
I sidestepped the parallel make problem by making the toplevel not
parallel except for the recursive invocation of the all-stageN target. :-/
Of course builds of a single package will still be parallel: in practice
the only part where parallelism is hurted a lot is the never-ending
libgcj link, which typically won't be done together with anything else.
It would be nice to provide per-target .NOTPARALLELs, but it is not even
available in GNU make.
Paolo
2004-08-31 Paolo Bonzini <bonzini@gnu.org>
* Makefile.tpl (sorry): Remove.
(clean-stage[+id+], clean-stage[+id+]-module): New targets.
(cleanstrap targets): Depend on distclean, not distclean-stage1.
(do-clean): Clean per-stage directories too.
(do-distclean): Run distclean-stage1 too.
(.NOTPARALLEL): Enable during toplevel bootstrap.
(stage[+id+]-bubble): Enable parallel execution during
the recursive invocation.
* Makefile.in: Regenerate.
Index: Makefile.tpl
===================================================================
RCS file: /cvs/gcc/gcc/Makefile.tpl,v
retrieving revision 1.112
diff -u -r1.112 Makefile.tpl
--- Makefile.tpl 30 Aug 2004 08:02:31 -0000 1.112
+++ Makefile.tpl 31 Aug 2004 09:41:06 -0000
@@ -481,14 +481,6 @@
# Miscellaneous targets and flag lists
# ------------------------------------
-@if gcc-bootstrap
-# Let's leave this as the first rule in the file until toplevel
-# bootstrap is fleshed out completely.
-sorry:
- @echo Toplevel bootstrap temporarily out of commission.
- @echo Please reconfigure without --enable-bootstrap
-@endif gcc-bootstrap
-
# The first rule in the file had better be this one. Don't put any above it.
# This lives here to allow makefile fragments to contain dependencies.
@default_target@:
@@ -1338,7 +1330,7 @@
# (both in a combined tree, or separately). This however requires some
# change to the gcc driver, again in order to avoid comparison failures.
-# Bugs: This is almost certainly not parallel-make safe.
+# Bugs: This is crippled if parallel-makes are done.
# 'touch' doesn't work right on some platforms.
STAMP = echo timestamp >
@@ -1402,20 +1395,27 @@
IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
echo Skipping rebuild of stage[+id+] ; \
else \
- $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage[+id+]; \
fi
-.PHONY: all-stage[+id+]
+.PHONY: all-stage[+id+] clean-stage[+id+]
all-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
maybe-all-stage[+id+]-[+module+][+
ENDIF bootstrap+] [+ ENDFOR host_modules +]
+do-clean: clean-stage[+id+]
+clean-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
+ maybe-clean-stage[+id+]-[+module+][+
+ENDIF bootstrap+] [+ ENDFOR host_modules +]
+
[+ FOR host_modules +][+ IF bootstrap +]
.PHONY: configure-stage[+id+]-[+module+] maybe-configure-stage[+id+]-[+module+]
.PHONY: all-stage[+id+]-[+module+] maybe-all-stage[+id+]-[+module+]
+.PHONY: clean-stage[+id+]-[+module+] maybe-clean-stage[+id+]-[+module+]
maybe-configure-stage[+id+]-[+module+]:
maybe-all-stage[+id+]-[+module+]:
+maybe-clean-stage[+id+]-[+module+]:
@if [+module+]-bootstrap
maybe-configure-stage[+id+]-[+module+]: configure-stage[+id+]-[+module+]
@@ -1454,7 +1454,18 @@
$(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
$(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
[+stage_make_flags+] [+extra_make_flags+]
+
+maybe-clean-stage[+id+]-[+module+]: clean-stage[+id+]-[+module+]
+clean-stage[+id+]-[+module+]:
+ @[ -f [+module+]/Makefile ] || [ -f stage[+id+]-[+module+]/Makefile ] \
+ || exit 0 ; \
+ [ -f [+module+]/Makefile ] || $(MAKE) stage[+id+]-start ; \
+ cd [+module+] && \
+ $(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
+ $(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
+ [+stage_make_flags+] [+extra_make_flags+] clean
@endif [+module+]-bootstrap
+
[+ ENDIF bootstrap +][+ ENDFOR host_modules +]
# FIXME: Will not need to be conditional when toplevel bootstrap is the
@@ -1494,10 +1505,9 @@
[+bootstrap-target+]: stage[+id+]-bubble [+compare-target+] all
[+ ENDIF bootstrap-target +]
-.PHONY: distclean-stage[+id+]
-
-# Rules to wipe a stage and all the following ones, used for cleanstrap
+# Rules to wipe a stage and all the following ones, also used for cleanstrap
[+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
+.PHONY: distclean-stage[+id+]
distclean-stage[+id+]::
[ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
rm -rf stage[+id+]-* [+
@@ -1505,7 +1515,7 @@
[+ IF cleanstrap-target +]
.PHONY: [+cleanstrap-target+]
-[+cleanstrap-target+]: distclean-stage1 [+bootstrap-target+]
+[+cleanstrap-target+]: distclean [+bootstrap-target+]
[+ ENDIF cleanstrap-target +]
@endif gcc-bootstrap
@@ -1541,6 +1551,12 @@
$(MAKE) stagefeedback-bubble stagefeedback-end
@endif gcc-bootstrap
+@if gcc-bootstrap
+NOTPARALLEL = .NOTPARALLEL
+$(NOTPARALLEL):
+do-distclean: distclean-stage1
+@endif gcc-bootstrap
+
# --------------------------------------
# Dependencies between different modules
# --------------------------------------