tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bootstrapping a C++ compiler

Edgar Fuß <> writes:

> 'm starting a subthread for GCC bootstrapping issues.
> EF> -- We need to assure gcc-inplace-math (and -nls) when building GCC as a 
> EF>    build dependency, either by making that the default or temporarily 
> EF>    overriding the options.
> GT> That is the perhaps controversial point.
> What's controversial about this? Without inplace-math, we install packages 
> providing libraries compiled with a lower GCC version, which renders them 
> unusuable, no?
> Or do you think the nls part is controversial?

I meant that I didn't understand the issues yet and suspected it was

>> So do you think we need two versions, the "real" gcc6, and the
>> "bootstrap" gcc6?  Two packages from same source?  Something else?

> I think the easiest solution would be to make lang/gccX use 
> PKG_OPTIONS.gccX-bootstrap instead of PKG_OPTIONS.gccX if it's being 
> bootstrapped.

This is the crux of what I was worried about.

Right now we have a package, and when you build it you get a certain
behavior.  If someone has simply built gcc6, they'll get one thing, but
if the package has been built as a dependency to compile C++, it will be
something else.  So I think a package of a given name has to be built
the same way regardless of being used as a build dependency or not.

If we want to have "regular gcc6" and "bootstrap gcc6" with different
names, that ccould be ok, but the question is what people expect from
regular and why.

So maybe you can explain (because at least I am not familiar with the

  gcc-inplace-math is a scheme to make a gcc package have a lot fewer
  dependencies, and in particular it installs fewer packages built with
  the base compiler.  That seems good for bootstrap use, even though it
  also means that the gcc package needs rebuilding if those packages
  have fixes (which is bad for non-bootstrap use, sort of).  So if this
  is default on, maybe that's ok, and we need to error out if
  bootstrapping and it's off.  Is that right?

  nls is about translated messages, which seems useful for users even in
  the bootstrapping case.  So disabling that basically means no version
  of gcc built by pkgsrc will have localized messages.  I imagine some
  fraction of the other-than en_US speakers won't like that, and
  reasonably so.   Do you have a notion of how to meet the no-nls-build
  goal and the needs of people that use the compiler at the same time?
  Some idea other than tow copies?

> The tricky part (it occurs to me) is what "it's being bootstrapped" means.
> I think the answer is "it's the Single Version" (or, regarding C, "one of 
> the two Single Verssions") AND "it's not installed as a package". So, if 
> you like lang/gcc6 (supposing that's one of your Single Versions) with nls, 
> you can build lang/gcc6 with that set of options, which will first build 
> your Single Version with the bootstrap options and then use that to copile 
> the final version.

Which means  we split gcc6 into multiple pieces and

  build first part of gcc6
  build other stuff with that gcc6-first
  build rest of gcc6?

that sounds complicated, and not clearly a better plan than buildings a
gcc6-bootstrap that is in /usr/pkg/bootstrap/bin instead of

Attachment: signature.asc
Description: PGP signature

Home | Main Index | Thread Index | Old Index