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/SanitizerArgs.h"
|
||||
#include "llvm/Option/ArgList.h"
|
||||
#include "llvm/Support/VirtualFileSystem.h"
|
||||
|
||||
using namespace clang::driver;
|
||||
using namespace clang::driver::tools;
|
||||
|
@ -422,8 +423,23 @@ ToolChain::CXXStdlibType NetBSD::GetDefaultCXXStdlibType() const {
|
|||
|
||||
void NetBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args) const {
|
||||
addSystemInclude(DriverArgs, CC1Args,
|
||||
getDriver().SysRoot + "/usr/include/c++/");
|
||||
const std::string Candidates[] = {
|
||||
// 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,
|
||||
|
|
Loading…
Reference in New Issue