summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Driver/Multilib.h3
-rw-r--r--clang/lib/Driver/ToolChains.cpp66
2 files changed, 26 insertions, 43 deletions
diff --git a/clang/include/clang/Driver/Multilib.h b/clang/include/clang/Driver/Multilib.h
index bc2c061df72..a2df8f1c29a 100644
--- a/clang/include/clang/Driver/Multilib.h
+++ b/clang/include/clang/Driver/Multilib.h
@@ -99,8 +99,7 @@ public:
typedef multilib_list::iterator iterator;
typedef multilib_list::const_iterator const_iterator;
- typedef std::function<std::vector<std::string>(StringRef InstallDir,
- const Multilib &M)>
+ typedef std::function<std::vector<std::string>(const Multilib &M)>
IncludeDirsFunc;
typedef llvm::function_ref<bool(const Multilib &)> FilterCallback;
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index 1a1c0f86cff..a46cb08003c 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -1923,16 +1923,12 @@ static bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple,
.Maybe(Nan2008)
.FilterOut(".*sof/nan2008")
.FilterOut(NonExistent)
- .setIncludeDirsCallback([](StringRef InstallDir,
- const Multilib &M) {
- std::vector<std::string> Dirs;
- Dirs.push_back((InstallDir + "/include").str());
- std::string SysRootInc =
- InstallDir.str() + "/../../../../sysroot";
+ .setIncludeDirsCallback([](const Multilib &M) {
+ std::vector<std::string> Dirs({"/include"});
if (StringRef(M.includeSuffix()).startswith("/uclibc"))
- Dirs.push_back(SysRootInc + "/uclibc/usr/include");
+ Dirs.push_back("/../../../../sysroot/uclibc/usr/include");
else
- Dirs.push_back(SysRootInc + "/usr/include");
+ Dirs.push_back("/../../../../sysroot/usr/include");
return Dirs;
});
}
@@ -1954,12 +1950,9 @@ static bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple,
MuslMipsMultilibs = MultilibSet().Either(MArchMipsR2, MArchMipselR2);
// Specify the callback that computes the include directories.
- MuslMipsMultilibs.setIncludeDirsCallback([](StringRef InstallDir,
- const Multilib &M) {
- std::vector<std::string> Dirs;
- Dirs.push_back(
- (InstallDir + "/../sysroot" + M.osSuffix() + "/usr/include").str());
- return Dirs;
+ MuslMipsMultilibs.setIncludeDirsCallback([](const Multilib &M) {
+ return std::vector<std::string>(
+ {"/../sysroot" + M.osSuffix() + "/usr/include"});
});
}
@@ -2006,16 +1999,13 @@ static bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple,
.FilterOut("/mips16.*/64")
.FilterOut("/micromips.*/64")
.FilterOut(NonExistent)
- .setIncludeDirsCallback([](StringRef InstallDir,
- const Multilib &M) {
- std::vector<std::string> Dirs;
- Dirs.push_back((InstallDir + "/include").str());
- std::string SysRootInc =
- InstallDir.str() + "/../../../../mips-linux-gnu";
+ .setIncludeDirsCallback([](const Multilib &M) {
+ std::vector<std::string> Dirs({"/include"});
if (StringRef(M.includeSuffix()).startswith("/uclibc"))
- Dirs.push_back(SysRootInc + "/libc/uclibc/usr/include");
+ Dirs.push_back(
+ "/../../../../mips-linux-gnu/libc/uclibc/usr/include");
else
- Dirs.push_back(SysRootInc + "/libc/usr/include");
+ Dirs.push_back("/../../../../mips-linux-gnu/libc/usr/include");
return Dirs;
});
}
@@ -2059,13 +2049,9 @@ static bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple,
.Maybe(MAbi64)
.Maybe(LittleEndian)
.FilterOut(NonExistent)
- .setIncludeDirsCallback([](StringRef InstallDir,
- const Multilib &M) {
- std::vector<std::string> Dirs;
- Dirs.push_back((InstallDir + "/include").str());
- Dirs.push_back(
- (InstallDir + "/../../../../sysroot/usr/include").str());
- return Dirs;
+ .setIncludeDirsCallback([](const Multilib &M) {
+ return std::vector<std::string>(
+ {"/include", "/../../../../sysroot/usr/include"});
});
}
@@ -2540,9 +2526,9 @@ void MipsLLVMToolChain::AddClangSystemIncludeArgs(
const auto &Callback = Multilibs.includeDirsCallback();
if (Callback) {
- const auto IncludePaths = Callback(D.getInstalledDir(), SelectedMultilib);
- for (const auto &Path : IncludePaths)
- addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path);
+ for (const auto &Path : Callback(SelectedMultilib))
+ addExternCSystemIncludeIfExists(DriverArgs, CC1Args,
+ D.getInstalledDir() + Path);
}
}
@@ -2587,11 +2573,10 @@ void MipsLLVMToolChain::AddClangCXXStdlibIncludeArgs(
const auto &Callback = Multilibs.includeDirsCallback();
if (Callback) {
- const auto IncludePaths =
- Callback(getDriver().getInstalledDir(), SelectedMultilib);
- for (const auto &Path : IncludePaths) {
- if (llvm::sys::fs::exists(Path + "/c++/v1")) {
- addSystemInclude(DriverArgs, CC1Args, Path + "/c++/v1");
+ for (std::string Path : Callback(SelectedMultilib)) {
+ Path = getDriver().getInstalledDir() + Path + "/c++/v1";
+ if (llvm::sys::fs::exists(Path)) {
+ addSystemInclude(DriverArgs, CC1Args, Path);
break;
}
}
@@ -3969,10 +3954,9 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
if (GCCInstallation.isValid()) {
const auto &Callback = Multilibs.includeDirsCallback();
if (Callback) {
- const auto IncludePaths = Callback(GCCInstallation.getInstallPath(),
- GCCInstallation.getMultilib());
- for (const auto &Path : IncludePaths)
- addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path);
+ for (const auto &Path : Callback(GCCInstallation.getMultilib()))
+ addExternCSystemIncludeIfExists(
+ DriverArgs, CC1Args, GCCInstallation.getInstallPath() + Path);
}
}
OpenPOWER on IntegriCloud