This is the mail archive of the
mailing list for the GCC project.
Re: Converting GCC to compilation with C++
Paolo Bonzini wrote:
> It is too hard to use a different number of stages for different parts
> of the compiler. So if you build the C++ front-end needed to compile
> Java in stageN, you'll need N+2 stages (N+1 compiles the Java front-end,
> N+2 is needed to compare the object files).
Paolo, our understanding of what the bootstrap process and
its stages ought to be seems to be somewhat different.
*My understanding*, which might very well be wrong, of
the generalised bootstrap process is:
a. In stage1, build the minimal set of front-ends. This
includes the C front-end and any front-end that is not
written in C or in a language who's front-end in GCC is
not written in C (so the Ada front-end in Ada is built,
but not the Java front-end in C++, for example).
b. Use the stage1 compilers to build all front-ends that
are now build-able. So we can now build C, C++, Ada, ObjC
and Fortran, but not Java yet.
c. To guard against code/debug-info generation bugs,
repeat the above process but now with the stage2
compilers. So once again, C, C++, Ada, ObjC and Fortran
get built, but not Java.
d. Now build all front-ends that were not built in
stage2, i.e. those that are written in a non-C
language whose front-end in GCC is written in C. So
only Java (and not others) get built here.
(There is no point in having a stage5, as object
comparisons would be pointless.)
Only this, I claim, is a true "bootstrap". There are
of course shortcuts possible (as when you also want
to use the system C++ compiler for Java, for example),
but they are not "bootstraps" really.
> A 4-stage bootstrap obviously takes longer than a 3-stage bootstrap, so
> the scheme on the left is preferrable to the one on the right:
> stage1 C,C++,Ada C,Ada
> stage2 C,C++,Java,Ada C,C++,Ada
> stage3 C,C++,Java,Ada C,C++,Java,Ada
> stage4 C,C++,Java,Ada
The corresponding column for what I outline above would be:
>>This is so that we can benefit as much as possible from
>>new optimisation and/or other features in the GCC being
> You always end up installing the C++ compiler built in the final stage,
> so it makes no difference whether you first build C++ in stage1 or stage2.
It does - what if the vendor compiler (or existing GCC) does
not have the optimisations or extensions in the current GCC?
I want the C++, Java, etc. compilers built with as much
available optimisations as possible.
(I note that this process only gives me confidence in the C
and the Ada compilers, and not as much in the C++, Fortran,
ObjC and Java compilers.)
> If all you want is a GCC compiled with itself, you can use a 2-stage
> bootstrap (even faster, but without the self test introduced by
> bootstrap compares). That would work even if Java used C++, as long as
> you had a C++ compiler installed on your machine.
No, the comparison is vital in ensuring (to the extent
possible) that the newly-built compiler (or the vendor
compiler itself) does indeed generate correct code.
Ranjit Mathew Email: rmathew AT gmail DOT com
Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/