Pull in r196590 from upstream clang trunk (by rdivacky):
Move the body of GCCInstallationDetector ctor into an init() function and call it from its only user. The linux toolchain. This saves quite a lot of directory searching on other platforms. See http://docs.freebsd.org/cgi/mid.cgi?51E6FAF5.3080802 for the original discussion. With this fix, the search for gcc installations is completely eliminated on FreeBSD. Reported by: Kurt Lidl <lidl@pix.net> MFC after: 3 days
This commit is contained in:
parent
9b11826d3d
commit
914afe13c2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=259053
@ -991,7 +991,7 @@ static StringRef getGCCToolchainDir(const ArgList &Args) {
|
||||
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.
|
||||
@ -1000,11 +1000,9 @@ static StringRef getGCCToolchainDir(const ArgList &Args) {
|
||||
/// 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) {
|
||||
void
|
||||
Generic_GCC::GCCInstallationDetector::init(
|
||||
const Driver &D, const llvm::Triple &TargetTriple, const ArgList &Args) {
|
||||
llvm::Triple MultiarchTriple
|
||||
= TargetTriple.isArch32Bit() ? TargetTriple.get64BitArchVariant()
|
||||
: TargetTriple.get32BitArchVariant();
|
||||
@ -1448,7 +1446,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
|
||||
|
||||
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() {
|
||||
getProgramPaths().push_back(getDriver().getInstalledDir());
|
||||
if (getDriver().getInstalledDir() != getDriver().Dir)
|
||||
getProgramPaths().push_back(getDriver().Dir);
|
||||
@ -2243,6 +2241,7 @@ static StringRef getMultilibDir(const llvm::Triple &Triple,
|
||||
|
||||
Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
||||
: Generic_ELF(D, Triple, Args) {
|
||||
GCCInstallation.init(D, Triple, Args);
|
||||
llvm::Triple::ArchType Arch = Triple.getArch();
|
||||
std::string SysRoot = computeSysRoot(Args);
|
||||
|
||||
|
@ -78,7 +78,8 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public ToolChain {
|
||||
GCCVersion Version;
|
||||
|
||||
public:
|
||||
GCCInstallationDetector(const Driver &D, const llvm::Triple &TargetTriple,
|
||||
GCCInstallationDetector() : IsValid(false) {}
|
||||
void init(const Driver &D, const llvm::Triple &TargetTriple,
|
||||
const ArgList &Args);
|
||||
|
||||
/// \brief Check whether we detected a valid GCC install.
|
||||
|
Loading…
Reference in New Issue
Block a user