diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-09-14 23:12:40 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-09-14 23:12:40 +0000 |
| commit | 092b6fb1870946e7a82341ca92a87ac1f0b50ad9 (patch) | |
| tree | b6a146203d62b31e2e6477b2dabffa6c51e336c7 /clang/lib/Driver/ToolChain.cpp | |
| parent | bf11f790534282b8b0e1ee21560be5265eaf8ede (diff) | |
| download | bcm5719-llvm-092b6fb1870946e7a82341ca92a87ac1f0b50ad9.tar.gz bcm5719-llvm-092b6fb1870946e7a82341ca92a87ac1f0b50ad9.zip | |
Driver: Add a -stdlib= argument which can be used to select the C++ standard
library to use.
- This is currently useful for testing libc++; you can now use 'clang++
-stdlib=libc++ t.cpp' to compile using it if installed.
- In the future could also be used to select other standard library choices if
alternatives become available (for example, to use an alternate C library).
llvm-svn: 113891
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
| -rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 0f630464093..337ea4e8f94 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -175,6 +175,16 @@ std::string ToolChain::ComputeEffectiveClangTriple(const ArgList &Args) const { } ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{ + if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) { + llvm::StringRef Value = A->getValue(Args); + if (Value == "libc++") + return ToolChain::CST_Libcxx; + if (Value == "libstdc++") + return ToolChain::CST_Libstdcxx; + getDriver().Diag(clang::diag::err_drv_invalid_stdlib_name) + << A->getAsString(Args); + } + return ToolChain::CST_Libstdcxx; } @@ -183,6 +193,11 @@ void ToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &Args, CXXStdlibType Type = GetCXXStdlibType(Args); switch (Type) { + case ToolChain::CST_Libcxx: + CmdArgs.push_back("-cxx-system-include"); + CmdArgs.push_back("/usr/include/c++/v1"); + break; + case ToolChain::CST_Libstdcxx: // Currently handled by the mass of goop in InitHeaderSearch. break; @@ -194,6 +209,10 @@ void ToolChain::AddClangCXXStdlibLibArgs(const ArgList &Args, CXXStdlibType Type = GetCXXStdlibType(Args); switch (Type) { + case ToolChain::CST_Libcxx: + CmdArgs.push_back("-lc++"); + break; + case ToolChain::CST_Libstdcxx: CmdArgs.push_back("-lstdc++"); break; |

