This represents a major update to the buildworld subsystem.
Compartmentalize the bootstrap/buildtools, the cross-build setup,
and the world stage. /usr/obj/usr/src is now far more readable
(e.g. /usr/obj/usr/src/{btools_i386,ctools_i386_i386,world_i386}).
Use a completely private command path for the world stage of the build.
The bootstrap/buildtools stage compiles all required system programs
(like rm, ln, chmod, etc). At the moment the build compiles everything
it needs, but this can be augmented later to 'cp' the required binaries
into btools_<arch> instead of building them, including potentially copying
the compiler binaries so the ctools_<arch> build could use a private
path too).
The 'buildworld' target now properly removes all object modules for
all major stages. Several new targets have been added to reduce
build times, the most useful of which is 'quickworld', which skips
the btools and ctools stages (they must have already been built).
sys.mk has been augmented to support .nx binaries and .no object
modules, which are built using ${NXCC} and friends, which always uses
the system's native compiler rather then potentially using the
cross-build compiler, for generating helper programs during the build.
This way we do not have to special-case building the helper programs in
an earlier stage as FreeBSD does.
Fix a bug in 'wmake', which simulates the buildworld environment for
piecemeal compilation/testing. It was not using /usr/src/share/mk.
Add additional .ORDER: constraints to better support make -j N
(incomplete). Note that recent changes to the DragonFly scheduler make
it more likely for buildworld to trip over parallel make races.
TOOLS_PREFIX was used to generate cross-compiler directory targets
for exec'd utility binaries and access to libraries and include
files. However, in the new compartmentalized breakdown the cross
compiler's utility binaries will reside in ctools_* while the
include files and libraries are expected to be installed and accessed
in world_*. Add a USRDATA_PREFIX which defaults to TOOLS_PREFIX to
allow the cross compilation stage to separate the two entities.