[PATCH] Fix driver-related things for FreeBSD
Viktor Kutuzov
vkutuzov at accesssoftek.com
Tue Apr 15 10:26:40 PDT 2014
Hi kcc, samsonov, cpirker, compnerd, dexonsmith, theraven,
This patch adds libcxxrt when clang is invoked with -stdlib=libc++ on FreeBSD (which is necessary to build llvm against libc++ on FreeBSD 9.2). It also adds the default path to the libc++ headers (which is /usr/local/include/c++/v1 and not /usr/include/c++/v1 as clang currently expect). Furthermore, it fixes the path to the clang's headers (which is /usr/include/clang/X.Y.Z and not <resource-dir>/include).
http://reviews.llvm.org/D3381
Files:
lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h
lib/Frontend/InitHeaderSearch.cpp
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -2490,6 +2490,9 @@
case ToolChain::CST_Libcxx:
addSystemInclude(DriverArgs, CC1Args,
getDriver().SysRoot + "/usr/include/c++/v1");
+ // The libc++ port installs headers to /usr/local by default.
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/usr/local/include/c++/v1");
break;
case ToolChain::CST_Libstdcxx:
addSystemInclude(DriverArgs, CC1Args,
@@ -2530,6 +2533,19 @@
return getSanitizerArgs().hasZeroBaseShadow();
}
+void FreeBSD::AddCXXStdlibLibArgs(const ArgList &Args,
+ ArgStringList &CmdArgs) const {
+ switch (GetCXXStdlibType(Args)) {
+ case ToolChain::CST_Libcxx:
+ CmdArgs.push_back("-lc++");
+ CmdArgs.push_back("-lcxxrt");
+ break;
+ case ToolChain::CST_Libstdcxx:
+ CmdArgs.push_back("-lstdc++");
+ break;
+ }
+}
+
/// 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)
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -584,6 +584,8 @@
void
AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const override;
+ void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const override;
bool IsIntegratedAssemblerDefault() const override {
if (getTriple().getArch() == llvm::Triple::ppc ||
getTriple().getArch() == llvm::Triple::ppc64)
Index: lib/Frontend/InitHeaderSearch.cpp
===================================================================
--- lib/Frontend/InitHeaderSearch.cpp
+++ lib/Frontend/InitHeaderSearch.cpp
@@ -14,6 +14,7 @@
#include "clang/Frontend/Utils.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/Version.h"
#include "clang/Config/config.h" // C_INCLUDE_DIRS
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
@@ -242,11 +243,16 @@
// Builtin includes use #include_next directives and should be positioned
// just prior C include dirs.
if (HSOpts.UseBuiltinIncludes) {
- // Ignore the sys root, we *always* look for clang headers relative to
- // supplied path.
- SmallString<128> P = StringRef(HSOpts.ResourceDir);
- llvm::sys::path::append(P, "include");
- AddUnmappedPath(P.str(), ExternCSystem, false);
+ // On FreeBSD the include path is not resource-dir-relative.
+ if (os == llvm::Triple::FreeBSD) {
+ AddPath("/usr/include/clang/" CLANG_VERSION_STRING, ExternCSystem, false);
+ } else {
+ // Ignore the sys root, we *always* look for clang headers relative to
+ // supplied path.
+ SmallString<128> P = StringRef(HSOpts.ResourceDir);
+ llvm::sys::path::append(P, "include");
+ AddUnmappedPath(P.str(), ExternCSystem, false);
+ }
}
// All remaining additions are for system include directories, early exit if
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3381.1.patch
Type: text/x-patch
Size: 3297 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140415/eb62cd1f/attachment.bin>
More information about the llvm-commits
mailing list