svn commit: r255321 - in head: contrib/llvm/tools/clang/lib/Driver gnu/lib gnu/usr.bin/cc share/mk sys/sys tools/build/options
Xin LI
delphij at gmail.com
Fri Sep 6 20:35:00 UTC 2013
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