Hi Ludo, Ludovic Courtès <l...@gnu.org> writes:
> Hi Sarah, > > Sarah Morgensen <iskar...@mgsn.dev> skribis: > >> I notice that out of GCC's supported languages (ada, c, c++, d, fortran, >> go, jit, lto, objc, obj-c++) we currently build all except ada, and five >> of them (d, fortran, go, objc, and obj-c++) are built separately. Most >> of GCC's build time is spent bootstrapping and building the actual >> compiler, rather than building the frontends, so we would save a lot of >> build time by building them all together. > > Yes, but at the expense of the build time of the main GCC package and of > its size. Its size shouldn't change, as the other languages should be entirely in separate packages or outputs. The build time... yeah, that could be harsh, especially on slower arches. >> We could also possibly reuse the 'core' parts of GCC between language >> frontends, saving some space. (This is what distros seem to do.) > > That’d be ideal, but I’m not sure it’s feasible. It’s feasible for FHS > distros that “just” need to shuffle files around in various binary > packages, but here we’d have to have several outputs or something, and > most likely they’d refer to one another. Good point. I hadn't considered this. >> What do you all think? > > There’s definitely room for improvement in this area, but it’s not clear > to me what can be done within the constraints that we have, in > particular the closure size of gcc (gcc:lib in particular) and having a > reasonably small set of dependencies for ‘gcc-final’. I suppose > experimentation could tell us which approach to follow! I did some research, and it looks like the Debian GCC build scripts do a lot of what I am looking for. They allow building languages and libraries separately [0], and wow is it complicated! It looks the gist is liberal application of --disable-*, especially --disable-bootstrap. Doing something like this (with each language still built separately, but without bootstrapping again or building unnecessary libraries) should be feasible in Guix... with a fair amount of effort. I'm sure I don't have the familiarity with GCC to do anything but trial-and-error, so if anyone else wants to tackle this, have at it :) [0] https://salsa.debian.org/toolchain-team/gcc/-/blob/master/debian/rules2 -- Sarah