[PATCH] D88452: [Driver] Move detectLibcxxIncludePath to ToolChain
Petr Hosek via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 2 14:24:23 PDT 2020
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa594fd28e373: [Driver] Move detectLibcxxIncludePath to ToolChain (authored by phosek).
Changed prior to commit:
https://reviews.llvm.org/D88452?vs=294815&id=295909#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88452/new/
https://reviews.llvm.org/D88452
Files:
clang/include/clang/Driver/ToolChain.h
clang/lib/Driver/ToolChain.cpp
clang/lib/Driver/ToolChains/Fuchsia.cpp
clang/lib/Driver/ToolChains/Gnu.cpp
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2877,31 +2877,11 @@
}
}
-static std::string DetectLibcxxIncludePath(llvm::vfs::FileSystem &vfs,
- StringRef base) {
- std::error_code EC;
- int MaxVersion = 0;
- std::string MaxVersionString;
- for (llvm::vfs::directory_iterator LI = vfs.dir_begin(base, EC), LE;
- !EC && LI != LE; LI = LI.increment(EC)) {
- StringRef VersionText = llvm::sys::path::filename(LI->path());
- int Version;
- if (VersionText[0] == 'v' &&
- !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) {
- if (Version > MaxVersion) {
- MaxVersion = Version;
- MaxVersionString = std::string(VersionText);
- }
- }
- }
- return MaxVersion ? (base + "/" + MaxVersionString).str() : "";
-}
-
void
Generic_GCC::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
auto AddIncludePath = [&](std::string Path) {
- std::string IncludePath = DetectLibcxxIncludePath(getVFS(), Path);
+ std::string IncludePath = detectLibcxxIncludePath(Path);
if (IncludePath.empty() || !getVFS().exists(IncludePath))
return false;
addSystemInclude(DriverArgs, CC1Args, IncludePath);
Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -319,8 +319,8 @@
switch (GetCXXStdlibType(DriverArgs)) {
case ToolChain::CST_Libcxx: {
SmallString<128> P(getDriver().Dir);
- llvm::sys::path::append(P, "..", "include", "c++", "v1");
- addSystemInclude(DriverArgs, CC1Args, P.str());
+ llvm::sys::path::append(P, "..", "include", "c++");
+ addSystemInclude(DriverArgs, CC1Args, detectLibcxxIncludePath(P.str()));
break;
}
Index: clang/lib/Driver/ToolChain.cpp
===================================================================
--- clang/lib/Driver/ToolChain.cpp
+++ clang/lib/Driver/ToolChain.cpp
@@ -924,6 +924,29 @@
}
}
+std::string ToolChain::detectLibcxxIncludePath(StringRef Base) const {
+ std::error_code EC;
+ int MaxVersion = 0;
+ std::string MaxVersionString;
+ for (llvm::vfs::directory_iterator LI = getVFS().dir_begin(Base, EC), LE;
+ !EC && LI != LE; LI = LI.increment(EC)) {
+ StringRef VersionText = llvm::sys::path::filename(LI->path());
+ int Version;
+ if (VersionText[0] == 'v' &&
+ !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) {
+ if (Version > MaxVersion) {
+ MaxVersion = Version;
+ MaxVersionString = std::string(VersionText);
+ }
+ }
+ }
+ if (!MaxVersion)
+ return "";
+ SmallString<128> P(Base);
+ llvm::sys::path::append(P, MaxVersionString);
+ return std::string(P.str());
+}
+
void ToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
ArgStringList &CC1Args) const {
// Header search paths should be handled by each of the subclasses.
Index: clang/include/clang/Driver/ToolChain.h
===================================================================
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -575,6 +575,9 @@
// given compilation arguments.
virtual UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const;
+ // Detect the highest available version of libc++ in base path.
+ virtual std::string detectLibcxxIncludePath(StringRef Base) const;
+
/// AddClangCXXStdlibIncludeArgs - Add the clang -cc1 level arguments to set
/// the include paths to use for the given C++ standard library type.
virtual void
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88452.295909.patch
Type: text/x-patch
Size: 3906 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201002/4d58ea58/attachment-0001.bin>
More information about the cfe-commits
mailing list