enabling libc++ by default when building with clang

Warner Losh imp at bsdimp.com
Mon Sep 17 21:29:56 UTC 2012


On Sep 17, 2012, at 1:51 PM, Brooks Davis wrote:

> On Mon, Sep 17, 2012 at 01:36:53PM -0600, Warner Losh wrote:
>> 
>> On Sep 17, 2012, at 1:10 PM, Brooks Davis wrote:
>>> Now that we have the COMPILER_TYPE variable I'm following up on an idea
>>> by theraven@ that we should enable libc++ by default when we are
>>> building world with a compiler that supports it.  The following patch
>>> implements this:
>>> 
>>> http://people.freebsd.org/~brooks/patches/libc%2b%2b-default.diff
>>> 
>>> One key question is, when do we want to throw this switch?  Do we do it
>>> now so people using clang start using it sooner or do we wait until
>>> we've switched the default compiler and things have settled a bit?
>>> 
>>> I suspect that we'll want to wait, but I'm curious what others think.
>> 
>> Is the compiler type set to be the host's build, or the target's?
> 
> It's the target's compiler unless you do a make manually in a portion
> of the tree.  This means that if you do "make -DWITH_CLANG_IS_CC
> buildworld" with this patch that you get libc++ even on a 9-STABLE
> system.

I think that's good.  I'm mostly worried about cases where the host system is say gcc, but the target is clang or vice versa.  We've had lots of cross threading issues with the cross build and I was hoping this wouldn't introduce a new one.

> An alternative approach here would to enhance bsd.compiler.mk to have a
> COMPILER_FEATURES variable and key off of a feature named something like
> "c++11".  We'll certainly want to do something like that in the future
> to support external compilers with varying features.

I like this idea.  For user facing features, we should have COMPILER_VERSION keyed values of COMPILER_FEATURES so the tree can use COMPILER_FEATURES without the user having to know that gcc 4.3 needs what may be a longish list.

Warner

> -- Brooks
> 
>> 
>> Warner
>> 
>>> -- Brooks
>>> 
>>> Index: share/mk/bsd.own.mk
>>> ===================================================================
>>> --- share/mk/bsd.own.mk	(revision 240466)
>>> +++ share/mk/bsd.own.mk	(working copy)
>>> @@ -432,7 +432,6 @@
>>>    ICONV \
>>>    IDEA \
>>>    INSTALL_AS_USER \
>>> -    LIBCPLUSPLUS \
>>>    NAND \
>>>    OFED \
>>>    SHARED_TOOLCHAIN
>>> @@ -642,6 +641,33 @@
>>> .endif
>>> .endfor
>>> 
>>> +#
>>> +# MK_* options that default to on if the compiler is clang.
>>> +#
>>> +.include <bsd.compiler.mk>
>>> +.for var in \
>>> +    LIBCPLUSPLUS
>>> +.if defined(WITH_${var}) && defined(WITHOUT_${var})
>>> +.error WITH_${var} and WITHOUT_${var} can't both be set.
>>> +.endif
>>> +.if defined(MK_${var})
>>> +.error MK_${var} can't be set by a user.
>>> +.endif
>>> +.if ${COMPILER_TYPE} == "clang"
>>> +.if defined(WITHOUT_${var})
>>> +MK_${var}:=	no
>>> +.else
>>> +MK_${var}:=	yes
>>> +.endif
>>> +.else
>>> +.if defined(WITH_${var})
>>> +MK_${var}:=	yes
>>> +.else
>>> +MK_${var}:=	no
>>> +.endif
>>> +.endif
>>> +.endfor
>>> +
>>> .if ${MK_CTF} != "no"
>>> CTFCONVERT_CMD=	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
>>> .elif defined(MAKE_VERSION) && ${MAKE_VERSION} >= 5201111300
>> 



More information about the freebsd-toolchain mailing list