[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 01:42:04 PDT 2020
dmantipov updated this revision to Diff 294625.
dmantipov added a comment.
Initialize GCCDirExists and GCCCrossDirExists before calling ScanLibDirForGCCTriple().
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
@@ -215,6 +215,10 @@
// Gentoo-specific toolchain configurations are stored here.
const std::string GentooConfigDir = "/etc/env.d/gcc";
+ // Internal flags used to filter out <libdir>/gcc and <libdir>/gcc-cross.
+ bool GCCDirExists;
+ bool GCCCrossDirExists;
+
public:
explicit GCCInstallationDetector(const Driver &D) : IsValid(false), D(D) {}
void init(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
@@ -1935,6 +1935,10 @@
return;
}
+ // These should be set before calling ScanLibDirForGCCTriple().
+ GCCDirExists = false;
+ GCCCrossDirExists = false;
+
// Loop over the various components which exist and select the best GCC
// installation available. GCC installs are ranked by version number.
Version = GCCVersion::Parse("0.0.0");
@@ -1945,6 +1949,9 @@
const std::string LibDir = Prefix + Suffix.str();
if (!D.getVFS().exists(LibDir))
continue;
+ // Maybe filter out <libdir>/gcc and <libdir>/gcc-cross.
+ GCCDirExists = D.getVFS().exists(LibDir + "/gcc");
+ GCCCrossDirExists = D.getVFS().exists(LibDir + "/gcc-cross");
// Try to match the exact target triple first.
ScanLibDirForGCCTriple(TargetTriple, Args, LibDir, TargetTriple.str());
// Try rest of possible triples.
@@ -2463,12 +2470,13 @@
// Whether this library suffix is relevant for the triple.
bool Active;
} Suffixes[] = {
- // This is the normal place.
- {"gcc/" + CandidateTriple.str(), "../..", true},
+ // This is the normal place if Clang is installed alongside with GCC,
+ // probably with the same prefix. But it's likely does not exists in
+ // case of standalone Clang install.
+ {"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.294625.patch
Type: text/x-patch
Size: 2549 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200928/4e2a5fcc/attachment-0001.bin>
More information about the cfe-commits
mailing list