aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
authorPetr Hosek <phosek@google.com>2020-09-22 01:01:16 -0700
committerPetr Hosek <phosek@google.com>2020-10-02 14:23:48 -0700
commita594fd28e373cb7cd348cf01f6a90e055bf6cf6d (patch)
tree553a44d59f57ca07a9227c250b6c439593ba90ff /clang/lib/Driver/ToolChain.cpp
parentf7e91e6cc7f35dd0dcc176463a355d78e1c020b1 (diff)
downloadllvm-a594fd28e373cb7cd348cf01f6a90e055bf6cf6d.zip
llvm-a594fd28e373cb7cd348cf01f6a90e055bf6cf6d.tar.gz
llvm-a594fd28e373cb7cd348cf01f6a90e055bf6cf6d.tar.bz2
[Driver] Move detectLibcxxIncludePath to ToolChain
This helper method is useful even outside of Gnu toolchains, so move it to ToolChain so it can be reused in other toolchains such as Fuchsia. Differential Revision: https://reviews.llvm.org/D88452
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r--clang/lib/Driver/ToolChain.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 8991216..8e98e32 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -924,6 +924,29 @@ void ToolChain::addExternCSystemIncludeIfExists(const ArgList &DriverArgs,
}
}
+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.