forked from OSchip/llvm-project
[clang] [ToolChains/NetBSD] Support relative libc++ header path
Support locating the libc++ header files relatively to the clang executable, in addition to the default system path. This is meant to cover two use cases: running just-built clang from the install directory, and running installed clang from non-standard location (e.g. /usr/local). This is the first step towards ensuring that tests of more LLVM projects can work out-of-the-box within the build tree, and use the correct set of headers (rather than e.g. mixing just-built clang+libcxx with system install of libcxx). It avoids requiring the user to hack around missing include paths, or LLVM build system to replicate system-specific C++ library defaults in order to append appropriate paths implicitly. Differential Revision: https://reviews.llvm.org/D58592 llvm-svn: 355282
This commit is contained in:
parent
ce68659772
commit
d3516b51ca
|
@ -16,6 +16,7 @@
|
||||||
#include "clang/Driver/Options.h"
|
#include "clang/Driver/Options.h"
|
||||||
#include "clang/Driver/SanitizerArgs.h"
|
#include "clang/Driver/SanitizerArgs.h"
|
||||||
#include "llvm/Option/ArgList.h"
|
#include "llvm/Option/ArgList.h"
|
||||||
|
#include "llvm/Support/VirtualFileSystem.h"
|
||||||
|
|
||||||
using namespace clang::driver;
|
using namespace clang::driver;
|
||||||
using namespace clang::driver::tools;
|
using namespace clang::driver::tools;
|
||||||
|
@ -422,8 +423,23 @@ ToolChain::CXXStdlibType NetBSD::GetDefaultCXXStdlibType() const {
|
||||||
|
|
||||||
void NetBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
void NetBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
||||||
llvm::opt::ArgStringList &CC1Args) const {
|
llvm::opt::ArgStringList &CC1Args) const {
|
||||||
addSystemInclude(DriverArgs, CC1Args,
|
const std::string Candidates[] = {
|
||||||
getDriver().SysRoot + "/usr/include/c++/");
|
// directory relative to build tree
|
||||||
|
getDriver().Dir + "/../include/c++/v1",
|
||||||
|
// system install with full upstream path
|
||||||
|
getDriver().SysRoot + "/usr/include/c++/v1",
|
||||||
|
// system install from src
|
||||||
|
getDriver().SysRoot + "/usr/include/c++",
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const auto &IncludePath : Candidates) {
|
||||||
|
if (!getVFS().exists(IncludePath + "/__config"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Use the first candidate that looks valid.
|
||||||
|
addSystemInclude(DriverArgs, CC1Args, IncludePath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetBSD::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
void NetBSD::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
||||||
|
|
Loading…
Reference in New Issue