summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2019-06-13 09:42:43 +0000
committerSam Clegg <sbc@chromium.org>2019-06-13 09:42:43 +0000
commit818dd8666a5728d4bcdef39596f9f3bc692b0750 (patch)
treef4a51be4a856079b35223a6ad510aa6502ed7b1f /clang/lib
parent51c2fa0e2ac1ee0afdffb45ff3c2bac4bf09c3cf (diff)
downloadbcm5719-llvm-818dd8666a5728d4bcdef39596f9f3bc692b0750.tar.gz
bcm5719-llvm-818dd8666a5728d4bcdef39596f9f3bc692b0750.zip
[WebAssembly] Modernize include path handling
Move include path construction from InitHeaderSearch::AddDefaultIncludePaths in the Driver which appears to be the more modern/correct way of doing things. Differential Revision: https://reviews.llvm.org/D63030 llvm-svn: 363241
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/ToolChains/WebAssembly.cpp41
-rw-r--r--clang/lib/Frontend/InitHeaderSearch.cpp8
2 files changed, 42 insertions, 7 deletions
diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index 9f63d2e374b..a6a881873e2 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -8,6 +8,7 @@
#include "WebAssembly.h"
#include "CommonArgs.h"
+#include "clang/Config/config.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/DriverDiagnostic.h"
@@ -170,14 +171,39 @@ WebAssembly::GetCXXStdlibType(const ArgList &Args) const {
void WebAssembly::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
ArgStringList &CC1Args) const {
- if (!DriverArgs.hasArg(options::OPT_nostdinc)) {
- if (getTriple().getOS() != llvm::Triple::UnknownOS) {
- const std::string MultiarchTriple =
- getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
- addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include/" + MultiarchTriple);
+ if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
+ return;
+
+ const Driver &D = getDriver();
+
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+ SmallString<128> P(D.ResourceDir);
+ llvm::sys::path::append(P, "include");
+ addSystemInclude(DriverArgs, CC1Args, P);
+ }
+
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc))
+ return;
+
+ // Check for configure-time C include directories.
+ StringRef CIncludeDirs(C_INCLUDE_DIRS);
+ if (CIncludeDirs != "") {
+ SmallVector<StringRef, 5> dirs;
+ CIncludeDirs.split(dirs, ":");
+ for (StringRef dir : dirs) {
+ StringRef Prefix =
+ llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) : "";
+ addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
}
- addSystemInclude(DriverArgs, CC1Args, getDriver().SysRoot + "/include");
+ return;
+ }
+
+ if (getTriple().getOS() != llvm::Triple::UnknownOS) {
+ const std::string MultiarchTriple =
+ getMultiarchTriple(D, getTriple(), D.SysRoot);
+ addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include/" + MultiarchTriple);
}
+ addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include");
}
void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
@@ -188,7 +214,8 @@ void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
const std::string MultiarchTriple =
getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
addSystemInclude(DriverArgs, CC1Args,
- getDriver().SysRoot + "/include/" + MultiarchTriple + "/c++/v1");
+ getDriver().SysRoot + "/include/" + MultiarchTriple +
+ "/c++/v1");
}
addSystemInclude(DriverArgs, CC1Args,
getDriver().SysRoot + "/include/c++/v1");
diff --git a/clang/lib/Frontend/InitHeaderSearch.cpp b/clang/lib/Frontend/InitHeaderSearch.cpp
index e6cd8235b01..d65d13489dc 100644
--- a/clang/lib/Frontend/InitHeaderSearch.cpp
+++ b/clang/lib/Frontend/InitHeaderSearch.cpp
@@ -414,9 +414,11 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang,
default:
break; // Everything else continues to use this routine's logic.
+ case llvm::Triple::Emscripten:
case llvm::Triple::Linux:
case llvm::Triple::Hurd:
case llvm::Triple::Solaris:
+ case llvm::Triple::WASI:
return;
case llvm::Triple::Win32:
@@ -424,6 +426,12 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang,
triple.isOSBinFormatMachO())
return;
break;
+
+ case llvm::Triple::UnknownOS:
+ if (triple.getArch() == llvm::Triple::wasm32 ||
+ triple.getArch() == llvm::Triple::wasm64)
+ return;
+ break;
}
// All header search logic is handled in the Driver for Darwin.
OpenPOWER on IntegriCloud