This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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
 # --------------------------------------

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]