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