Clang and ports

Conrad J. Sabatier conrads at cox.net
Thu Feb 2 07:58:53 UTC 2012


On Thu, 02 Feb 2012 01:41:03 -0600
Joshua Isom <jrisom at gmail.com> wrote:

> I know that build cluster lists some ports that have problems with 
> clang, but it doesn't say if they're tested or not.  I set up a clang 
> jail to test out things before switching to clang for general use.
> When I try running mencoder to encode a file to x264, it seg faults. 
> Changing options doesn't change anything.  A gdb backtrace points to 
> x264 being the problem.  Everything compiles and installs, but the 
> build's useless.  Is clang ready for ports, or is it only safe for 
> kernel/world?

I've been using clang for ports for a while now, and many ports will
build and run just fine using it.

I've been gradually adding to two lists of exceptions in
my /etc/make.conf -- those that absolutely require the base system GNU
compiler (USE_GCC?=4.2) and those that simply need *some* version of
gcc (for which I use gcc46 from ports (USE_GCC?=4.6).  Before defining
CC and friends to use clang, I first list these exceptions (I use
the ?= operator so these can still be overridden from the command
line).  So, the general format is:

#
# default to using clang for all port builds, with the following exceptions
#

# ports which will only build with the base system GNU compiler (4.2)
#
# the "make index" target also needs this

.if target(index) | \
${.CURDIR:M*/graphics/ImageMagick* } | \
${.CURDIR:M*/graphics/opencv*}
USE_GCC?=4.2
.endif

# ports which need *some* version of the GNU compiler (won't build with clang)
# use the highest version of gcc we have installed from ports (4.6)

.if ${.CURDIR:M*/accessibility/jovie*} | \
${.CURDIR:M*/accessibility/kdeaccessibility4*} | \
${.CURDIR:M*/audio/grip*} | \
${.CURDIR:M*/audio/rosegarden*} | \
${.CURDIR:M*/deskutils/kdepimlibs4*} | \
${.CURDIR:M*/devel/icu*} | \
${.CURDIR:M*/games/kdegames4*} | \
${.CURDIR:M*/graphics/dri*} | \
${.CURDIR:M*/lang/gcc*} | \
${.CURDIR:M*/multimedia/avidemux2*} | \
${.CURDIR:M*/multimedia/kdemultimedia4*} | \
${.CURDIR:M*/multimedia/vlc*} | \
${.CURDIR:M*/multimedia/xbmc*} | \
${.CURDIR:M*/net/kdenetwork4*} | \
${.CURDIR:M*/net/opal3*} | \
${.CURDIR:M*/net-p2p/ktorrent*} | \
${.CURDIR:M*/sysutils/lsof*} | \
${.CURDIR:M*/x11/kde4-baseapps*} | \
${.CURDIR:M*/x11/kdelibs4*} | \
${.CURDIR:M*/x11/kde4-workspace*} | \
${.CURDIR:M*/x11/lxpanel*}
USE_GCC?=4.6+
.endif

#
# use clang unless gcc is explicitly required
#

.if !defined(USE_GCC)
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
.if !defined(CPP) || ${CPP} == "cpp"
CPP=clang-cpp
.endif
.endif

This, of course, doesn't fully address runtime issues, mainly just
build issues, but the same could be done for those, too.

For what it's worth.  :-)

-- 
Conrad J. Sabatier
conrads at cox.net


More information about the freebsd-questions mailing list