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, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits