svn commit: r255321 - in head: contrib/llvm/tools/clang/lib/Driver gnu/lib gnu/usr.bin/cc share/mk sys/sys tools/build/options
David Chisnall
theraven at FreeBSD.org
Fri Sep 6 20:43:11 UTC 2013
Thanks for the report. I've now bracketed the extra flag in a check that we're compiling with clang, which should fix it, so let me know if it still breaks for you.
David
On 6 Sep 2013, at 21:34, Xin LI <delphij at gmail.com> wrote:
> Will this break cross building on 9.x host? I hit this:
>
> c++ -O2 -pipe -I/tank/home/delphij/head/lib/clang/libllvmsupport/../../../contrib/llvm/include
> -I/tank/home/delphij/head/lib/clang/libllvmsupport/../../../contrib/llvm/tools/clang/include
> -I/tank/home/delphij/head/lib/clang/libllvmsupport/../../../contrib/llvm/lib/Support
> -I. -I/tank/home/delphij/head/lib/clang/libllvmsupport/../../../contrib/llvm/../../lib/clang/include
> -DLLVM_ON_UNIX -DLLVM_ON_FREEBSD -D__STDC_LIMIT_MACROS
> -D__STDC_CONSTANT_MACROS -fno-strict-aliasing
> -DLLVM_DEFAULT_TARGET_TRIPLE=\"x86_64-unknown-freebsd10.0\"
> -DLLVM_HOST_TRIPLE=\"x86_64-unknown-freebsd10.0\"
> -DDEFAULT_SYSROOT=\"\"
> -I/tank/home/delphij/obj/tank/home/delphij/head/tmp/legacy/usr/include
> -Wno-c++11-extensions -fno-exceptions -fno-rtti -c
> /tank/home/delphij/head/lib/clang/libllvmsupport/../../../contrib/llvm/lib/Support/APFloat.cpp
> -o APFloat.o
> cc1plus: error: unrecognized command line option "-Wno-c++11-extensions"
>
> On Fri, Sep 6, 2013 at 1:08 PM, David Chisnall <theraven at freebsd.org> wrote:
>> Author: theraven
>> Date: Fri Sep 6 20:08:03 2013
>> New Revision: 255321
>> URL: http://svnweb.freebsd.org/changeset/base/255321
>>
>> Log:
>> On platforms where clang is the default compiler, don't build gcc or libstdc++.
>> To enable them, set WITH_GCC and WITH_GNUCXX in src.conf.
>> Make clang default to using libc++ on FreeBSD 10.
>> Bumped __FreeBSD_version for the change.
>>
>> GCC is still enabled on PC98, because the PC98 bootloader requires GCC to build
>> (or, at least, hard-codes the use of gcc into its build).
>>
>> Thanks to everyone who helped make the ports tree ready for this (and bapt
>> for coordinating them all). Also to imp for reviewing this and working on the
>> forward-porting of the changes in our gcc so that we're getting to a much
>> better place with regard to external toolchains.
>>
>> Sorry to all of the people who helped who I forgot to mention by name.
>>
>> Reviewed by: bapt, imp, dim, ...
>>
>> Added:
>> head/tools/build/options/WITHOUT_GNUCXX (contents, props changed)
>> head/tools/build/options/WITH_GNUCXX (contents, props changed)
>> Modified:
>> head/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
>> head/contrib/llvm/tools/clang/lib/Driver/ToolChains.h
>> head/gnu/lib/Makefile
>> head/gnu/usr.bin/cc/Makefile
>> head/share/mk/bsd.own.mk
>> head/sys/sys/param.h
>>
>> Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
>> ==============================================================================
>> --- head/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -1851,6 +1851,38 @@ bool FreeBSD::UseSjLjExceptions() const
>> }
>> }
>>
>> +ToolChain::CXXStdlibType
>> +FreeBSD::GetCXXStdlibType(const ArgList &Args) const {
>> + if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
>> + StringRef Value = A->getValue();
>> + if (Value == "libc++")
>> + return ToolChain::CST_Libcxx;
>> + if (Value == "libstdc++")
>> + return ToolChain::CST_Libstdcxx;
>> + getDriver().Diag(diag::err_drv_invalid_stdlib_name)
>> + << A->getAsString(Args);
>> + }
>> +
>> + return getTriple().getOSMajorVersion() >= 10 ? ToolChain::CST_Libcxx :
>> + ToolChain::CST_Libstdcxx;
>> +}
>> +
>> +void FreeBSD::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
>> + ArgStringList &CC1Args) const {
>> + if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
>> + DriverArgs.hasArg(options::OPT_nostdincxx))
>> + return;
>> +
>> + if (GetCXXStdlibType(DriverArgs) == ToolChain::CST_Libcxx)
>> + addSystemInclude(DriverArgs, CC1Args,
>> + getDriver().SysRoot + "/usr/include/c++/v1");
>> + else
>> + addSystemInclude(DriverArgs, CC1Args,
>> + getDriver().SysRoot + "/usr/include/c++/4.2");
>> + return;
>> +
>> +}
>> +
>> /// NetBSD - NetBSD tool chain which can call as(1) and ld(1) directly.
>>
>> NetBSD::NetBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args)
>>
>> Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains.h
>> ==============================================================================
>> --- head/contrib/llvm/tools/clang/lib/Driver/ToolChains.h Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains.h Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -458,9 +458,14 @@ class LLVM_LIBRARY_VISIBILITY FreeBSD :
>> public:
>> FreeBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args);
>>
>> + virtual CXXStdlibType GetCXXStdlibType(const ArgList &Args) const;
>> +
>> virtual bool IsMathErrnoDefault() const { return false; }
>> virtual bool IsObjCNonFragileABIDefault() const { return true; }
>>
>> + virtual void AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
>> + ArgStringList &CC1Args) const;
>> +
>> virtual bool UseSjLjExceptions() const;
>> protected:
>> virtual Tool *buildAssembler() const;
>>
>> Modified: head/gnu/lib/Makefile
>> ==============================================================================
>> --- head/gnu/lib/Makefile Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/gnu/lib/Makefile Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -10,7 +10,7 @@ SUBDIR+= libssp
>>
>> # libsupc++ uses libstdc++ headers, although 'make includes' should
>> # have taken care of that already.
>> -.if ${MK_CXX} != "no"
>> +.if ${MK_GNUCXX} != "no"
>> SUBDIR+= libstdc++ libsupc++
>> .endif
>>
>>
>> Modified: head/gnu/usr.bin/cc/Makefile
>> ==============================================================================
>> --- head/gnu/usr.bin/cc/Makefile Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/gnu/usr.bin/cc/Makefile Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -12,7 +12,12 @@ SUBDIR+= cpp
>> .endif
>>
>> .if ${MK_CXX} != "no"
>> -SUBDIR+= cc1plus c++ c++filt
>> +.if ${MK_GNUCXX} != "no"
>> +SUBDIR+= cc1plus c++
>> +.endif
>> +# This should be moved into the above block once c++filt from elftoolchain or
>> +# similar is provided.
>> +SUBDIR+= c++filt
>> .endif
>>
>> .if ${MK_GCOV} != "no"
>>
>> Modified: head/share/mk/bsd.own.mk
>> ==============================================================================
>> --- head/share/mk/bsd.own.mk Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/share/mk/bsd.own.mk Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -284,7 +284,6 @@ __DEFAULT_YES_OPTIONS = \
>> FP_LIBC \
>> FREEBSD_UPDATE \
>> GAMES \
>> - GCC \
>> GCOV \
>> GDB \
>> GNU \
>> @@ -400,6 +399,11 @@ __T=${TARGET_ARCH}
>> .else
>> __T=${MACHINE_ARCH}
>> .endif
>> +.if defined(TARGET)
>> +__TT=${TARGET}
>> +.else
>> +__TT=${MACHINE_ARCH}
>> +.endif
>> # Clang is only for x86, powerpc and little-endian arm right now, by default.
>> .if ${__T} == "amd64" || ${__T} == "i386" || ${__T:Mpowerpc*}
>> __DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL
>> @@ -414,8 +418,30 @@ __DEFAULT_NO_OPTIONS+=CLANG CLANG_FULL
>> .if ${__T} == "amd64" || ${__T} == "arm" || ${__T} == "armv6" || \
>> ${__T} == "i386"
>> __DEFAULT_YES_OPTIONS+=CLANG_IS_CC
>> +# The pc98 bootloader requires gcc to build and so we must leave gcc enabled
>> +# for pc98 for now.
>> +.if ${__TT} == "pc98"
>> +__DEFAULT_NO_OPTIONS+=GNUCXX
>> +__DEFAULT_YES_OPTIONS+=GCC
>> +.else
>> +__DEFAULT_NO_OPTIONS+=GCC GNUCXX
>> +.endif
>> +# The libc++ headers use c++11 extensions. These are normally silenced because
>> +# they are treated as system headers, but we explicitly disable that warning
>> +# suppression when building the base system to catch bugs in our headers.
>> +# Eventually we'll want to start building the base system C++ code as C++11,
>> +# but not yet.
>> +CXXFLAGS+= -Wno-c++11-extensions
>> .else
>> +# If clang is not cc, then build gcc by default
>> __DEFAULT_NO_OPTIONS+=CLANG_IS_CC
>> +__DEFAULT_YES_OPTIONS+=GCC
>> +# And if g++ is c++, build the rest of the GNU C++ stack
>> +.if defined(WITHOUT_CXX)
>> +__DEFAULT_NO_OPTIONS+=GNUCXX
>> +.else
>> +__DEFAULT_YES_OPTIONS+=GNUCXX
>> +.endif
>> .endif
>> # FDT is needed only for arm, mips and powerpc
>> .if ${__T:Marm*} || ${__T:Mpowerpc*} || ${__T:Mmips*}
>>
>> Modified: head/sys/sys/param.h
>> ==============================================================================
>> --- head/sys/sys/param.h Fri Sep 6 18:41:57 2013 (r255320)
>> +++ head/sys/sys/param.h Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -58,7 +58,7 @@
>> * in the range 5 to 9.
>> */
>> #undef __FreeBSD_version
>> -#define __FreeBSD_version 1000053 /* Master, propagated to newvers */
>> +#define __FreeBSD_version 1000054 /* Master, propagated to newvers */
>>
>> /*
>> * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
>>
>> Added: head/tools/build/options/WITHOUT_GNUCXX
>> ==============================================================================
>> --- /dev/null 00:00:00 1970 (empty, because file is newly added)
>> +++ head/tools/build/options/WITHOUT_GNUCXX Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -0,0 +1,3 @@
>> +.\" $FreeBSD$
>> +Do not build the GNU C++ stack (g++, libstdc++).
>> +This is the default on platforms where clang is the system compiler.
>>
>> Added: head/tools/build/options/WITH_GNUCXX
>> ==============================================================================
>> --- /dev/null 00:00:00 1970 (empty, because file is newly added)
>> +++ head/tools/build/options/WITH_GNUCXX Fri Sep 6 20:08:03 2013 (r255321)
>> @@ -0,0 +1,3 @@
>> +.\" $FreeBSD$
>> +Build the GNU C++ stack (g++, libstdc++).
>> +This is the default on platforms where gcc is the system compiler.
>
>
>
> --
> Xin LI <delphij at delphij.net> https://www.delphij.net/
> FreeBSD - The Power to Serve! Live free or die
More information about the svn-src-head
mailing list