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