The top level bootstrap model is to rebuild all the useful bits of the
entire tree as a group; and repeat that as many times as necessary to
be able to compare them.
Please define "useful". I'm very concerned if we're doing more builds
than before and don't have a way to restrict the builds to what we
were doing previously since it slows down the development process,
especially for those people still on slower machines.
A bootstrap has a very precise purpose: you want to ensure that when
you install a new compiler, you won't lose the ability to recompile it.
So we ensure that everything that *has* to be compiled in order to build
the compiler is. As we extend that to ancilary pieces we're rapidly
getting into a process of diminishing returns and when I hear that we're
making it *easy* to keep adding pieces, I worry even more about bootstrap
speeds in the future.
We can bootstrap the assembler in a combined tree. The first stage's
gcc will invoke a stage1 assembler, the second stage's gcc will invoke
a stage2 assembler. This doesn't have any fundamental benefits except
for thoroughness; it's an even better sanity check.
Sure, but I think it should be viewed as an *additional* check, much like
we currently have two tests: bootstrap and "make check". So we'd have
three: a "simple" bootstrap, a complete bootstrap, and "make check". The
latter two would be a requirement for check-ins, but the former would exist
to be used as part of the "rough" testing process.
Eventually I expect we'll have at least one frontend written in C++.
We'll be able to build that frontend using a bootstrapped copy of
libstdc++.
Sure, but I don't see what the major gain of such a thing would be over
the current set of tests for libstdc++. Aren't those tests much more
exhaustive a test than the usage of libstdc++ by such a front-end?
Personally, I think this layout (which I did not pick) is superior.
It makes it far more difficult to accidentally mix stages.
I'm not sure I understand the logic of that conclusion, though I agree
that the order in which the directories are named isn't a critical issue
so long as the current *functionality* isn't lost.
We could change that decision, and move all the files around instead.
That wouldn't change the need to hand off to the top level in order to
do bootstraps though; the routines in gcc would be just for
convenience. A bootstrap would need to build top level versions of
helper tools and libraries.
Right, but it would avoid the need to rename directories and, as I said, I
think that's a problem waiting to happen.