[PATCH] D87901: [Driver] Filter out <libdir>/gcc and <libdir>/gcc-cross if they do not exists
Dmitry Antipov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 28 20:16:36 PDT 2020
dmantipov updated this revision to Diff 294873.
dmantipov added a comment.
Prefer locals and function parameters to class members.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87901/new/
https://reviews.llvm.org/D87901
Files:
clang/lib/Driver/ToolChains/Gnu.cpp
clang/lib/Driver/ToolChains/Gnu.h
Index: clang/lib/Driver/ToolChains/Gnu.h
===================================================================
--- clang/lib/Driver/ToolChains/Gnu.h
+++ clang/lib/Driver/ToolChains/Gnu.h
@@ -270,7 +270,8 @@
const llvm::opt::ArgList &Args,
const std::string &LibDir,
StringRef CandidateTriple,
- bool NeedsBiarchSuffix = false);
+ bool NeedsBiarchSuffix, bool GCCDirExists,
+ bool GCCCrossDirExists);
bool ScanGentooConfigs(const llvm::Triple &TargetTriple,
const llvm::opt::ArgList &Args,
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -1939,27 +1939,36 @@
// installation available. GCC installs are ranked by version number.
Version = GCCVersion::Parse("0.0.0");
for (const std::string &Prefix : Prefixes) {
- if (!D.getVFS().exists(Prefix))
+ auto &VFS = D.getVFS();
+ if (!VFS.exists(Prefix))
continue;
for (StringRef Suffix : CandidateLibDirs) {
const std::string LibDir = Prefix + Suffix.str();
- if (!D.getVFS().exists(LibDir))
+ if (!VFS.exists(LibDir))
continue;
+ // Maybe filter out <libdir>/gcc and <libdir>/gcc-cross.
+ bool GCCDirExists = VFS.exists(LibDir + "/gcc");
+ bool GCCCrossDirExists = VFS.exists(LibDir + "/gcc-cross");
// Try to match the exact target triple first.
- ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, TargetTriple.str());
+ ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, TargetTriple.str(),
+ false, GCCDirExists, GCCCrossDirExists);
// Try rest of possible triples.
for (StringRef Candidate : ExtraTripleAliases) // Try these first.
- ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate);
+ ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate, false,
+ GCCDirExists, GCCCrossDirExists);
for (StringRef Candidate : CandidateTripleAliases)
- ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate);
+ ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate, false,
+ GCCDirExists, GCCCrossDirExists);
}
for (StringRef Suffix : CandidateBiarchLibDirs) {
const std::string LibDir = Prefix + Suffix.str();
- if (!D.getVFS().exists(LibDir))
+ if (!VFS.exists(LibDir))
continue;
+ bool GCCDirExists = VFS.exists(LibDir + "/gcc");
+ bool GCCCrossDirExists = VFS.exists(LibDir + "/gcc-cross");
for (StringRef Candidate : CandidateBiarchTripleAliases)
- ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate,
- /*NeedsBiarchSuffix=*/ true);
+ ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, Candidate, true,
+ GCCDirExists, GCCCrossDirExists);
}
}
}
@@ -2450,7 +2459,7 @@
void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
const llvm::Triple &TargetTriple, const ArgList &Args,
const std::string &LibDir, StringRef CandidateTriple,
- bool NeedsBiarchSuffix) {
+ bool NeedsBiarchSuffix, bool GCCDirExists, bool GCCCrossDirExists) {
llvm::Triple::ArchType TargetArch = TargetTriple.getArch();
// Locations relative to the system lib directory where GCC's triple-specific
// directories might reside.
@@ -2464,11 +2473,10 @@
bool Active;
} Suffixes[] = {
// This is the normal place.
- {"gcc/" + CandidateTriple.str(), "../..", true},
+ {"gcc/" + CandidateTriple.str(), "../..", GCCDirExists},
// Debian puts cross-compilers in gcc-cross.
- {"gcc-cross/" + CandidateTriple.str(), "../..",
- TargetTriple.getOS() != llvm::Triple::Solaris},
+ {"gcc-cross/" + CandidateTriple.str(), "../..", GCCCrossDirExists},
// The Freescale PPC SDK has the gcc libraries in
// <sysroot>/usr/lib/<triple>/x.y.z so have a look there as well. Only do
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87901.294873.patch
Type: text/x-patch
Size: 4248 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200929/2c51af57/attachment.bin>
More information about the cfe-commits
mailing list