Building DragonFly with "foreign" compilers (clang, gcc44, ...)
Sascha Wildner
saw at online.de
Tue Jun 9 15:12:06 PDT 2009
Hi,
here is small patch which adds a wrapper script into /usr/libexec that
allows non-base compilers (clang, gcc44, ...) into our build system:
http://leaf.dragonflybsd.org/~swildner/customcc.diff
Some explanation: Our /usr/bin/cc, /usr/bin/cpp etc. are hardlinks to
/usr/bin/objformat, which - based on the setting of CCVER - deflects
execution to /usr/libexec/$CCVER/cc, and so on. The patch deflects all
unknown CCVERs (that is, those which are not "gcc34" or "gcc41", our
base compilers) to /usr/libexec/custom where a small wrapper script
cares about the redirection to the actual compiler (based on the
settings in /etc/compilers.conf).
In order to use it with buildworld, -kernel, etc. the
etc/defaults/compilers.conf from the patch needs to be in /etc/defaults
and the patched objcopy needs to be built and installed. Either install
manually, or a quickworld/installworld should take care of everything.
After that, you should be able to do things like:
cd /usr/src
env WORLD_CCVER=clang make buildworld
or
env WORLD_CCVER=gcc44 make buildworld
env WORLD_CCVER=gcc44 make buildkernel
gcc44 buildworld, GENERIC and VKERNEL builds run through here, although
I haven't tested actual execution yet. :) For successful clang
compilation, I still have a few hacks in my src/ and some are clearly
wrong. If anyone's interested in helping, I can post them later.
The supplied defaults should work with clang (installed to /usr/local
which is the default for SVN trunk, see http://clang.llvm.org/ on how to
obtain and build) and with the gcc44 which is in /usr/pkgsrc/wip/gcc44.
Additional compilers should be relatively easy to add by adding
variables to /etc/compilers.conf (as per the compilers.conf(5) manual
page) and probably some wrapper hacking. The compiler has to have a
gcc-like command line interface of course.
If no objections are raised, I'll commit this some time during the week.
If there are questions, suggestions, etc. please post.
And last but not least, thanks to corecode for good advice as usual and
to Alex Hornung for his earlier DragonFly/clang work and for testing.
Have fun,
Sascha
P.S.: Note that this patch is not intended as an argument against
importing any of those compilers into our base (in fact, for more
advanced stuff like cross-compiling and so on, I think this would be
needed). If anything, it is intended as a little hack to make testing of
compilers easier with DragonFly without having to import them in the
first place.
--
http://yoyodyne.ath.cx
More information about the Kernel
mailing list