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.
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:06 UTC