DragonFly bugs List (threaded) for 2004-10
Re: buildworld fails with distcc, buildkernel works fine though
:Can you explain what the need is for all that? What's preventing you
:from writing a make file to do them all individually? You build them
:individually for security updates anyway, right? I'm sorry, but I
:don't see where the need for all this complex /usr/obj stuff and
:building another compiler just for buildworld. If you're not cross
:compiling where is the need? It just doesn't make any sense. If you
:could clear this up, I'd appreciate it.
Basically it comes down to options and feature support in the compiler.
Even fairly small compiler upgrades usually necessitate changes in the
Makefiles and/or source code. We have to be able to build the world on
older systems (e.g. a week old, a month old, a year old) whos compilers
might not have the features or bug fixes that the current source code
base requires. This is true even if you ignore all the cross-compiler
environment stuff. But even the cross compiler environment is important.
We aren't going to rip it out because we know we are going to need it in
the near future for, e.g. 64-bit cpu support.
You might ask... well, it's all standard C, so what's the problem? Well,
yes, the utility programs are basically standard C. But the C libraries
are another matter. libc has to use all sorts of compiler tricks for,
e.g. interfacing to system calls. The dynamic loader must be very aware
of the compiler, and C++ programs tend to depend on the latest compiler's
libg++ or equivalent library to provide low level internal support
functions for the code generation output of the compiler.
What this means is that buildworld must not only build the compiler it
intends to install in the installworld, it must also build the compiler
that will build the rest of the system. The bootstrap programs and
Makefiles have all sorts of conditionals in them to make them compile on
much older compilers (all the way back to FreeBSD 4.x systems), but we
don't want to have to conditionalize the entire source base to support
older compilers, it would make too much of a mess.