make all vs make bootstrap

Paolo Bonzini paolo.bonzini@lu.unisi.ch
Fri Dec 16 09:00:00 GMT 2005


> Will make quickstrap do the same as "make all"?

No, there's no "make quickstrap" at all!  Citing from the "Top-Level 
Bootstrap" wiki page:

Toplevel bootstrap is able to bootstrap a compiler with separate 
reconfigurations and rebuilds of libiberty/libcpp/gcc in all the three 
stages. It is actually possible to bootstrap a whole toolchain, so that 
the final executable is built entirely with the assembler, binutils and 
linker that are in a combined tree.

When configuring in a native environment, make will do more or less what 
make bubblestrap used to do: start from stage1, rebuild everything that 
had to be rebuilt, configure stage2 if it has not been configured yet, 
build stage2, and the same for stage3. "Rebuilding" is not limited to 
GCC: libiberty, libcpp, and other dependencies of GCC are all configured 
and compiled three times. It is the same as rebuilding a whole tree from 
scratch three times, each time using the previous build as the result.

It supports all the bells and whistles like bubblestraps and restageN, 
which help during development. make restrap (taking a non-bootstrap 
build and using it as stage1) is not supported. make restageN is called 
make all-stageN, and there is also make all-stageN-gcc to rebuild gcc 
only. There is no equivalent to quickstrap, even though it can be added 
if there's demand.

Lean bootstraps are also supported, but they are enabled with 
--enable-bootstrap=lean rather than with special targets.

make profiledbootstrap works; it will build profile-optimized 
assemblers, binutils and linkers when run in a combined tree.

For a while, old-style bootstrap will still be available with 
./configure --disable-bootstrap; make bootstrap (non intuitive maybe, 
but in the long term, it would only be one more historic wart if the 
flag was called --{enable,disable}-toplevel-bootstrap).

> I *really* don't want to have to remember new configure options when
> this used to be a simple makefile target.

I'm sorry, there's no alternative.  The two bootstrap/non-bootstrap 
logics are very different.  If they could live together in the gcc 
directory, and most of the time working, it was only at the price of 
comparison failures when you were doing something a bit more weird than 
what is supported.

It's probably a matter of having different working patterns.  Mine is 
that if bootstrap breaks seriously (e.g. with wrong code), I make a .i 
of the failure, move it to prev-gcc, and work from there.  With the old 
bootstrapping logic I made the .i of the failure, typed "make restage1", 
and worked from there.  The number of steps is the same.

I agree that the "prev-gcc" naming is sub-ideal, but Daniel seems 
confident that it can be fixed after his toplevel libgcc work goes in. 
If that's true, we can actually do *entirely without* the unstage/stage 
mess and simply have build directories that are called "stage1-gcc", 
"stage2-gcc", "stage3-gcc".  This will make things even easier.

But please, let me recall that the first CFT for toplevel bootstrap 
(when everything was working except parallel builds, and bootstrapping 
combined trees) is from September 2004.

Paolo



More information about the Gcc mailing list