enabling libc++ by default when building with clang
Brooks Davis
brooks at freebsd.org
Mon Sep 17 19:51:42 UTC 2012
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.
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.
-- 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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-toolchain/attachments/20120917/561c2b1d/attachment.pgp
More information about the freebsd-toolchain
mailing list