[clang] d882ca7 - [Driver] Check whether Gentoo-specific configuration directory exists
Dmitry Antipov via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 23 10:25:56 PDT 2020
Author: Dmitry Antipov
Date: 2020-09-23T20:25:23+03:00
New Revision: d882ca7f1f1dee7d812d6b1ae060b5f671ab9ebc
URL: https://github.com/llvm/llvm-project/commit/d882ca7f1f1dee7d812d6b1ae060b5f671ab9ebc
DIFF: https://github.com/llvm/llvm-project/commit/d882ca7f1f1dee7d812d6b1ae060b5f671ab9ebc.diff
LOG: [Driver] Check whether Gentoo-specific configuration directory exists
Check whether /etc/env.d/gcc exists before trying to read from any
file from there. This saves a few OS calls on a non-Gentoo system.
Differential Revision: https://reviews.llvm.org/D87143
Added:
Modified:
clang/lib/Driver/ToolChains/Gnu.cpp
clang/lib/Driver/ToolChains/Gnu.h
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index 68a75db0b92a..64ae5ac500b2 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2535,6 +2535,9 @@ bool Generic_GCC::GCCInstallationDetector::ScanGentooConfigs(
const llvm::Triple &TargetTriple, const ArgList &Args,
const SmallVectorImpl<StringRef> &CandidateTriples,
const SmallVectorImpl<StringRef> &CandidateBiarchTriples) {
+ if (!D.getVFS().exists(D.SysRoot + GentooConfigDir))
+ return false;
+
for (StringRef CandidateTriple : CandidateTriples) {
if (ScanGentooGccConfig(TargetTriple, Args, CandidateTriple))
return true;
@@ -2551,7 +2554,7 @@ bool Generic_GCC::GCCInstallationDetector::ScanGentooGccConfig(
const llvm::Triple &TargetTriple, const ArgList &Args,
StringRef CandidateTriple, bool NeedsBiarchSuffix) {
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
- D.getVFS().getBufferForFile(D.SysRoot + "/etc/env.d/gcc/config-" +
+ D.getVFS().getBufferForFile(D.SysRoot + GentooConfigDir + "/config-" +
CandidateTriple.str());
if (File) {
SmallVector<StringRef, 2> Lines;
@@ -2563,7 +2566,7 @@ bool Generic_GCC::GCCInstallationDetector::ScanGentooGccConfig(
continue;
// Process the config file pointed to by CURRENT.
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ConfigFile =
- D.getVFS().getBufferForFile(D.SysRoot + "/etc/env.d/gcc/" +
+ D.getVFS().getBufferForFile(D.SysRoot + GentooConfigDir + "/" +
Line.str());
std::pair<StringRef, StringRef> ActiveVersion = Line.rsplit('-');
// List of paths to scan for libraries.
diff --git a/clang/lib/Driver/ToolChains/Gnu.h b/clang/lib/Driver/ToolChains/Gnu.h
index 52690ab4b83c..5f3d1bef7de0 100644
--- a/clang/lib/Driver/ToolChains/Gnu.h
+++ b/clang/lib/Driver/ToolChains/Gnu.h
@@ -212,6 +212,9 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public ToolChain {
/// The set of multilibs that the detected installation supports.
MultilibSet Multilibs;
+ // Gentoo-specific toolchain configurations are stored here.
+ const std::string GentooConfigDir = "/etc/env.d/gcc";
+
public:
explicit GCCInstallationDetector(const Driver &D) : IsValid(false), D(D) {}
void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args,
More information about the cfe-commits
mailing list