On Tue, 17 Aug 2010 13:32:39 +0200 Dimitry Andric <dimitry_at_andric.com> wrote: > Hi, > > Since clang has gone into the tree, there has been an effort to get > head in a state where world can optionally be built with it. A > number of changes required for this have already been committed, > mainly thanks to Ed Schouten, Roman Divacky and Rui Paulo. Most of > these changes were adapted from the clangbsd project branch. > > There are several other changes in the queue, pending review and/or > further enhancement, but I would like to solicit your comments about > one particular set: the changes required to let buildworld use clang > as the compiler. > > Probably the most logical way to specify that you want world built > with clang, is to put CC=clang and CXX=clang++ in /etc/src.conf. Any > necessary modifications to Makefile.inc1 or bsd.*.mk can then be put > between conditionals like: > > .if ${CC:T:Mclang} == "clang" > [...stuff specific to clang...] > .endif > > so nothing will change for non-clang builds. > > Now, for building clang as the bootstrap compiler, there are basically > two methods to make it use the correct headers, C startup objects, and > libraries from the object tree (${WORLDTMP}): > > 1) The "isysroot" method: build a regular version of clang, and make > sure WMAKEENV contains something like: > > CC="${CC} -isysroot ${WORLDTMP} -B${WORLDTMP}/usr/lib/ \ > -L${WORLDTMP}/usr/lib/" > > 2) The "tools-prefix" method: build a special version of clang, that > has its default search paths for headers, startup objects and > libraries modified, to look for everything under ${WORLDTMP}. > > Method 1) is used in the clangbsd project branch. > > Method 2) is similar to what is used for building the in-tree gcc as > the bootstrap compiler. During the cross-tools stage, TOOLS_PREFIX is > defined to point at ${WORLDTMP}, and the bootstrap gcc's built-in > search paths get prefixed with it. > > An advantage of method 1) is that it does not require any > modifications to the compiler, and basically just a few extra command > line arguments. The same method could probably even be made to work > for gcc. > > However, a disadvantage is that the built-in search paths of the > bootstrap compiler are not entirely disabled by using the -isysroot, > -B and -L flags, so there is still a chance that headers, objects or > libraries outside of ${WORLDTMP} will be picked up during the world > stage. > > An advantage of method 2) is that you can be 100% sure all built-in > search paths of the bootstrap compiler point to directories under > ${WORLDTMP}. Of course, a disadvantage is that you have to make some > modifications to the compiler source itself. > > I would like to hear your opinions about which method is preferred, or > if there may be another good way to solve the bootstrap compiler > issue. > > I have also attached two patches to this mail, which can be applied to > head, to show the exact set of changes required for each method. > Does method 1) work fine with 'make buildenv'? I doubt that. I would strongly suggest we should not lose this feature. I do not like the idea of having to depend on -isystem in CFLAGS in such an environment. -- Alexander Kabaev
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:06 UTC