]> git.pld-linux.org Git - packages/crossmingw32-gcc.git/blame - gcc-bootstrap.patch
- rel 4
[packages/crossmingw32-gcc.git] / gcc-bootstrap.patch
CommitLineData
53b567d6 1# DP: Make bootstrap: restartable at any point
2# DP: From: Donn Terry <donn@interix.com>
3
4Make bootstrap: restartable at any point.
5
6This is in response to a discussion on this topic. This is "take 2" |
7which should work with parallel builds, though I haven't tested that. |
8
9When doing a make bootstrap, it's hard to know (at least when
10not throughly versed in the process details) how to restart
11after making a fix. In general, retyping "make bootstrap"
12will do the wrong thing (particularly if the host and target
13compilers object files are incompatible!)
14
15This change keeps track of the stages completed. The old
16bootstrap2[234] (and *-lean) targets are rewritten, but work the
17same.
18
19I've tested this by doing a make bootstrap (on CVS sources as of |
20last night) and by typing 'make bootstrap' after it's done, |
21in which case it thinks a moment and does nothing. (Which is exactly
22the right answer.)
23
24I've also done a complete regression, with no surprises. |
25
26I tested whether stopping/restarting at a few arbitrary points along the
27way works with older sources, but haven't tested it real recently,
28except to do a ^C halfway through a testbuild at one point. |
29Again, if it works at all, it should work as well as it ever did.
30I specficially did test it during the period where make bootstrap
31wasn't succeeding for me, and it helped a LOT in being able to pick up
32where I left off.
33
34An interesting side-effect: make bootstrap-lean after a make bootstrap |
35JUST cleans out stage1, with no unwanted consequences. |
36
37
38Fri May 28 15:27:02 1999 Donn Terry (donn@interix.com)
39 * Makefile.in: restructure bootstrap stages to allow
40 clean restart after failure.
41
42diff -urP egcs.source.old/gcc/Makefile.in egcs.source/gcc/Makefile.in
43--- egcs.source.old/gcc/Makefile.in Sun May 23 13:39:21 1999
44+++ egcs.source/gcc/Makefile.in Thu May 27 16:59:42 1999
45@@ -2360,6 +2360,8 @@ clean: mostlyclean intl.clean lang.clean
46 rm -rf `echo $(MULTILIB_OPTIONS) | sed -e 's/\// /g'`; \
47 fi ; fi
48 -rm -fr stage1 stage2 stage3 stage4
49+ -rm -f boot_stage_a boot_stage_b boot_stage_c boot_stage_d
50+ -rm -f boot_stage_e boot_stage_f
51
52 # Delete all files that users would normally create
53 # while building and installing GCC.
54@@ -2924,33 +2926,83 @@ diff:
55 $(LANG_DIFF_EXCLUDES) \
56 gcc-$(oldversion) gcc-$(version) &gt; gcc-$(oldversion)-$(version).diff
57
58-bootstrap bootstrap-lean: force
59+
60 # Only build the C compiler for stage1, because that is the only one that
61 # we can guarantee will build with the native compiler, and also it is the
62 # only thing useful for building stage2.
63- $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
64- $(MAKE) stage1
65+boot_stage_a:
66+ +$(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)"
67+ touch boot_stage_a
68+ echo ---------------------- stage a complete ---------------------
69+
70+boot_stage_b:
71+ +$(MAKE) stage1
72+ touch boot_stage_b
73+ echo ---------------------- stage b complete ---------------------
74+
75 # This used to define ALLOCA as empty, but that would lead to bad results
76 # for a subsequent `make install' since that would not have ALLOCA empty.
77 # To prevent `make install' from compiling alloca.o and then relinking cc1
78 # because alloca.o is newer, we permit these recursive makes to compile
79 # alloca.o. Then cc1 is newer, so it won't have to be relinked.
80- $(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
81- $(MAKE) stage2
82- -if test $@ = bootstrap-lean; then rm -rf stage1; else true; fi
83- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
84+boot_stage_c:
85+ +$(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
86+ touch boot_stage_c
87+ echo ---------------------- stage c complete ---------------------
88
89-bootstrap2 bootstrap2-lean: force
90- $(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
91- $(MAKE) stage2
92- -if test $@ = bootstrap2-lean; then rm -rf stage1; else true; fi
93- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
94+boot_stage_d:
95+ +$(MAKE) stage2
96+ touch boot_stage_d
97+ echo ---------------------- stage d complete ---------------------
98
99-bootstrap3 bootstrap3-lean: force
100- $(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
101+boot_stage_e:
102+ +$(MAKE) CC="stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
103+ touch boot_stage_e
104+ echo ---------------------- stage e complete ---------------------
105+
106+# Only bootstrap4 uses stage f.
107+boot_stage_f:
108+ +$(MAKE) CC="stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage3/ LANGUAGES="$(LANGUAGES)"
109+ touch boot_stage_f
110+ echo ---------------------- stage f complete ---------------------
111+
112+boot_clean_stage1:
113+ rm -rf stage1
114+
115+# This next little bit is the way it is for parallel builds. It's simply
116+# a chain of stages which DO have to be done sequentially.
117+
118+bootstrap_a: boot_stage_a
119+bootstrap_b: bootstrap_a boot_stage_b
120+bootstrap_c: bootstrap_b boot_stage_c
121+bootstrap_d: bootstrap_c boot_stage_d
122+bootstrap_e: bootstrap_d boot_stage_e
123+bootstrap: force bootstrap_e
124+
125+bootstrap-lean_a: boot_stage_a
126+bootstrap-lean_b: bootstrap-lean_a boot_stage_b
127+bootstrap-lean_c: bootstrap-lean_b boot_stage_c
128+bootstrap-lean_d: bootstrap-lean_c boot_stage_d
129+bootstrap-lean_e: bootstrap-lean_d boot_clean_stage1
130+bootstrap-lean_f: bootstrap-lean_e boot_stage_e
131+bootstrap-lean: force bootstrap-lean_f
132+
133+bootstrap2_c: boot_stage_c
134+bootstrap2_d: bootstrap2_c boot_stage_d
135+bootstrap2_e: bootstrap2_d boot_stage_e
136+bootstrap2: force bootstrap2_e
137+
138+bootstrap2-lean_c: boot_stage_c
139+bootstrap2-lean_d: bootstrap2-lean_c boot_stage_d
140+bootstrap2-lean_e: bootstrap2-lean_d boot_clean_stage1
141+bootstrap2-lean_f: bootstrap2-lean_e boot_stage_e
142+bootstrap2-lean: force bootstrap2-lean_f
143+
144+bootstrap3 bootstrap3-lean: force boot_stage_e
145+
146+# Only bootstrap4 uses stage f.
147+bootstrap4 bootstrap4-lean: force boot_stage_f
148
149-bootstrap4 bootstrap4-lean: force
150- $(MAKE) CC="stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" CFLAGS="$(WARN_CFLAGS) $(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage3/ LANGUAGES="$(LANGUAGES)"
151
152 # Compare the object files in the current directory with those in the
153 # stage2 directory.
This page took 0.084559 seconds and 4 git commands to generate.