forked from OSchip/llvm-project
Revert "[Driver] Move detectLibcxxIncludePath to ToolChain"
This reverts commit e25bf25920
.
Breaks tests on Windows, see comments on https://reviews.llvm.org/D88452
This commit is contained in:
parent
fcb0ab5933
commit
ba60dc0aa7
|
@ -575,9 +575,6 @@ public:
|
|||
// 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
|
||||
|
|
|
@ -924,29 +924,6 @@ 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.
|
||||
|
|
|
@ -319,8 +319,8 @@ void Fuchsia::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
|
|||
switch (GetCXXStdlibType(DriverArgs)) {
|
||||
case ToolChain::CST_Libcxx: {
|
||||
SmallString<128> P(getDriver().Dir);
|
||||
llvm::sys::path::append(P, "..", "include", "c++");
|
||||
addSystemInclude(DriverArgs, CC1Args, detectLibcxxIncludePath(P.str()));
|
||||
llvm::sys::path::append(P, "..", "include", "c++", "v1");
|
||||
addSystemInclude(DriverArgs, CC1Args, P.str());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -2877,11 +2877,31 @@ void Generic_GCC::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
|
|||
}
|
||||
}
|
||||
|
||||
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(Path);
|
||||
std::string IncludePath = DetectLibcxxIncludePath(getVFS(), Path);
|
||||
if (IncludePath.empty() || !getVFS().exists(IncludePath))
|
||||
return false;
|
||||
addSystemInclude(DriverArgs, CC1Args, IncludePath);
|
||||
|
|
Loading…
Reference in New Issue