64 lines
3.0 KiB
Diff
64 lines
3.0 KiB
Diff
This patch eliminates the unnecessary search for various gcc installation
|
|
directories during each startup of clang.
|
|
|
|
Introduced here: http://svnweb.freebsd.org/changeset/base/259053
|
|
|
|
Index: tools/clang/lib/Driver/ToolChains.cpp
|
|
===================================================================
|
|
--- tools/clang/lib/Driver/ToolChains.cpp
|
|
+++ tools/clang/lib/Driver/ToolChains.cpp
|
|
@@ -1014,7 +1014,7 @@ static StringRef getGCCToolchainDir(const ArgList
|
|
return GCC_INSTALL_PREFIX;
|
|
}
|
|
|
|
-/// \brief Construct a GCCInstallationDetector from the driver.
|
|
+/// \brief Initialize a GCCInstallationDetector from the driver.
|
|
///
|
|
/// This performs all of the autodetection and sets up the various paths.
|
|
/// Once constructed, a GCCInstallationDetector is essentially immutable.
|
|
@@ -1023,9 +1023,9 @@ static StringRef getGCCToolchainDir(const ArgList
|
|
/// should instead pull the target out of the driver. This is currently
|
|
/// necessary because the driver doesn't store the final version of the target
|
|
/// triple.
|
|
-Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(
|
|
- const Driver &D, const llvm::Triple &TargetTriple, const ArgList &Args)
|
|
- : IsValid(false), D(D) {
|
|
+void
|
|
+Generic_GCC::GCCInstallationDetector::init(
|
|
+ const llvm::Triple &TargetTriple, const ArgList &Args) {
|
|
llvm::Triple BiarchVariantTriple =
|
|
TargetTriple.isArch32Bit() ? TargetTriple.get64BitArchVariant()
|
|
: TargetTriple.get32BitArchVariant();
|
|
@@ -1565,7 +1565,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLib
|
|
|
|
Generic_GCC::Generic_GCC(const Driver &D, const llvm::Triple& Triple,
|
|
const ArgList &Args)
|
|
- : ToolChain(D, Triple, Args), GCCInstallation(getDriver(), Triple, Args) {
|
|
+ : ToolChain(D, Triple, Args), GCCInstallation(getDriver()) {
|
|
getProgramPaths().push_back(getDriver().getInstalledDir());
|
|
if (getDriver().getInstalledDir() != getDriver().Dir)
|
|
getProgramPaths().push_back(getDriver().Dir);
|
|
@@ -2361,6 +2361,7 @@ static StringRef getMultilibDir(const llvm::Triple
|
|
|
|
Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
|
: Generic_ELF(D, Triple, Args) {
|
|
+ GCCInstallation.init(Triple, Args);
|
|
llvm::Triple::ArchType Arch = Triple.getArch();
|
|
std::string SysRoot = computeSysRoot();
|
|
|
|
Index: tools/clang/lib/Driver/ToolChains.h
|
|
===================================================================
|
|
--- tools/clang/lib/Driver/ToolChains.h
|
|
+++ tools/clang/lib/Driver/ToolChains.h
|
|
@@ -92,8 +92,8 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public
|
|
std::set<std::string> CandidateGCCInstallPaths;
|
|
|
|
public:
|
|
- GCCInstallationDetector(const Driver &D, const llvm::Triple &TargetTriple,
|
|
- const llvm::opt::ArgList &Args);
|
|
+ GCCInstallationDetector(const Driver &D) : IsValid(false), D(D) {}
|
|
+ void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args);
|
|
|
|
/// \brief Check whether we detected a valid GCC install.
|
|
bool isValid() const { return IsValid; }
|