[PATCH] Bitrig switches C++ standard library

Richard Smith richard at metafoo.co.uk
Thu May 1 15:08:07 PDT 2014


On Thu, May 1, 2014 at 1:46 PM, Patrick Wildt <mail at patrick-wildt.de> wrote:

> Hi,
>
> Bitrig's standard C++ standard library changed from libstdc++ to libc++.
> Also, it uses libc++abi and needs pthread.  While there, fix the libc++
> include path.
>
> \Patrick
>
> diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
> index 9465be8..d8ed34f 100644
> --- a/lib/Driver/ToolChains.cpp
> +++ b/lib/Driver/ToolChains.cpp
> @@ -2407,6 +2407,21 @@ Tool *Bitrig::buildLinker() const {
>    return new tools::bitrig::Link(*this);
>  }
>
> +ToolChain::CXXStdlibType
> +Bitrig::GetCXXStdlibType(const ArgList &Args) const {
> +  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
> +    StringRef Value = A->getValue();
> +    if (Value == "libstdc++")
> +      return ToolChain::CST_Libstdcxx;
> +    if (Value == "libc++")
> +      return ToolChain::CST_Libcxx;
> +
> +    getDriver().Diag(diag::err_drv_invalid_stdlib_name)
> +      << A->getAsString(Args);
> +  }
> +  return ToolChain::CST_Libcxx;
> +}
> +
>  void Bitrig::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
>                                            ArgStringList &CC1Args) const {
>    if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
> @@ -2416,7 +2431,7 @@ void Bitrig::AddClangCXXStdlibIncludeArgs(const
> ArgList &DriverArgs,
>    switch (GetCXXStdlibType(DriverArgs)) {
>    case ToolChain::CST_Libcxx:
>      addSystemInclude(DriverArgs, CC1Args,
> -                     getDriver().SysRoot + "/usr/include/c++/");
> +                     getDriver().SysRoot + "/usr/include/c++/v1");
>      break;
>    case ToolChain::CST_Libstdcxx:
>      addSystemInclude(DriverArgs, CC1Args,
> @@ -2442,9 +2457,8 @@ void Bitrig::AddCXXStdlibLibArgs(const ArgList &Args,
>    switch (GetCXXStdlibType(Args)) {
>    case ToolChain::CST_Libcxx:
>      CmdArgs.push_back("-lc++");
> -    CmdArgs.push_back("-lcxxrt");
> -    // Include supc++ to provide Unwind until provided by libcxx.
> -    CmdArgs.push_back("-lgcc");
> +    CmdArgs.push_back("-lc++abi");
> +    CmdArgs.push_back("-lpthread");
>

Should this be controlled by the -pthread switch, or do you need it for all
C++ builds for some reason?


>      break;
>    case ToolChain::CST_Libstdcxx:
>      CmdArgs.push_back("-lstdc++");
> diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h
> index ad4d4c1..b1a0627 100644
> --- a/lib/Driver/ToolChains.h
> +++ b/lib/Driver/ToolChains.h
> @@ -557,6 +557,7 @@ public:
>    bool IsMathErrnoDefault() const override { return false; }
>    bool IsObjCNonFragileABIDefault() const override { return true; }
>
> +  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const
> override;
>    void
>    AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
>                                llvm::opt::ArgStringList &CC1Args) const
> override;
> diff --git a/test/Driver/bitrig.c b/test/Driver/bitrig.c
> index 876a9cd..d36d204 100644
> --- a/test/Driver/bitrig.c
> +++ b/test/Driver/bitrig.c
> @@ -4,15 +4,15 @@
>  // CHECK-LD-C: ld{{.*}}" {{.*}} "-lc" "-lclang_rt.amd64"
>
>  // RUN: %clangxx -no-canonical-prefixes -target amd64-pc-bitrig %s -###
> 2>&1 \
> +// RUN:   | FileCheck --check-prefix=CHECK-LD-CXX-STDLIB %s
> +// CHECK-LD-CXX-STDLIB: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
> +// CHECK-LD-CXX-STDLIB: ld{{.*}}" {{.*}} "-lc++" "-lc++abi" "-lpthread"
> "-lm" "-lc" "-lclang_rt.amd64"
> +
> +// RUN: %clangxx -stdlib=libstdc++ -no-canonical-prefixes -target
> amd64-pc-bitrig %s -### 2>&1 \
>  // RUN:   | FileCheck --check-prefix=CHECK-LD-CXX %s
>  // CHECK-LD-CXX: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
>  // CHECK-LD-CXX: ld{{.*}}" {{.*}} "-lstdc++" "-lm" "-lc"
> "-lclang_rt.amd64"
>
> -// RUN: %clangxx -stdlib=libc++ -no-canonical-prefixes -target
> amd64-pc-bitrig %s -### 2>&1 \
> -// RUN:   | FileCheck --check-prefix=CHECK-LD-CXX-STDLIB %s
> -// CHECK-LD-CXX-STDLIB: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
> -// CHECK-LD-CXX-STDLIB: ld{{.*}}" {{.*}} "-lc++" "-lcxxrt" "-lgcc" "-lm"
> "-lc" "-lclang_rt.amd64"
> -
>  // RUN: %clang -no-canonical-prefixes -target amd64-pc-bitrig -pthread %s
> -### 2>&1 \
>  // RUN:   | FileCheck --check-prefix=CHECK-PTHREAD %s
>  // CHECK-PTHREAD: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140501/36c0d207/attachment.html>


More information about the cfe-commits mailing list