November 5th is Clang-Day

Brooks Davis brooks at
Fri Nov 2 03:41:03 UTC 2012

On Monday, November 5th I plan to commit the following patch to make
clang the default compiler on i386 and amd64.  Many people have worked
long and hard to make this a reality and we're finally close enough to
throw the switch.  For many users the transition should be transparent.
Others will likely hit some bumps, but I think we've addresses most
major issues at this point and the LLVM community has demonstrated it's
ability and willingness to help given actionable bug reports.

Known Issues
 - Not all ports compile with clang.  This can be worked around in
   individual ports by setting USE_GCC=any which will cause the base gcc
   to be used.  Depending how things shake out we may end up making
   USE_GCC=any the default for a period. [0]
 - Not all libm tests pass.  More work by subject matter experts is
   required to create tests cases for LLVM developers.  Most problems are
   not expected to be major in practice given that LLVM is being used for
   scientific computing in a number of products including Cray's FORTRAN
   compiler, most OpenCL compilers, and the Julia language.
 - Small but noticeable slowdown in some benchmarks.  For example
   sysbench against mysql was found to run about 1% slower on top of a
   clang compiled world+kernel.

Known Non-Issues
 - "make buildenv" works fine with clang.

-- Brooks

[0] Work is underway to switch to building ports with a ports specific
compiler version.  Likely this will be gcc-4.6 initially.  This would
help insulate ports from the base compiler.  That being said, there are
significant advantages to getting as many ports as possible to build
with clang.  Among other things, cross building for embedded systems is
much easier with clang.

Index: share/mk/
--- share/mk/	(revision 242464)
+++ share/mk/	(working copy)
@@ -426,7 +426,6 @@
     BIND_XML \
-    CLANG_IS_CC \
     CTF \
     HESIOD \
     ICONV \
@@ -455,6 +454,12 @@
+# Clang the default system compiler only on x86.
+.if ${__T} == "amd64" || ${__T} == "i386"
 # FDT is needed only for arm, mips and powerpc
 .if ${__T:Marm*} || ${__T:Mpowerpc*} || ${__T:Mmips*}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
URL: <>

More information about the freebsd-current mailing list