a426b286c8
patch for r263619, and unify all the URLs to point to svnweb.
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; }
|