forked from qt-creator/qt-creator
ToolChains: Check typeId first before doing expensive checks
This should speed up toolchain auto-detection a lot. Change-Id: Id732ed359a4c9de1d49cb658cc91c2e7c9d1b7a6 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -356,8 +356,8 @@ static AndroidToolChain *findToolChain(Utils::FileName &compilerPath, const QLis
|
|||||||
{
|
{
|
||||||
return static_cast<AndroidToolChain *>(
|
return static_cast<AndroidToolChain *>(
|
||||||
Utils::findOrDefault(alreadyKnown, [compilerPath](ToolChain *tc) {
|
Utils::findOrDefault(alreadyKnown, [compilerPath](ToolChain *tc) {
|
||||||
return tc->compilerCommand() == compilerPath
|
return tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID
|
||||||
&& tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID;
|
&& tc->compilerCommand() == compilerPath;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -779,10 +779,13 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
|||||||
QList<ToolChain *> tcs;
|
QList<ToolChain *> tcs;
|
||||||
if (HostOsInfo::isMacHost()) {
|
if (HostOsInfo::isMacHost()) {
|
||||||
// Old mac compilers needed to support macx-gccXY mkspecs:
|
// Old mac compilers needed to support macx-gccXY mkspecs:
|
||||||
tcs.append(autoDetectToolchains(QLatin1String("g++-4.0"), Abi::hostAbi(), alreadyKnown));
|
tcs.append(autoDetectToolchains(QLatin1String("g++-4.0"), Abi::hostAbi(),
|
||||||
tcs.append(autoDetectToolchains(QLatin1String("g++-4.2"), Abi::hostAbi(), alreadyKnown));
|
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
|
||||||
|
tcs.append(autoDetectToolchains(QLatin1String("g++-4.2"), Abi::hostAbi(),
|
||||||
|
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
|
||||||
}
|
}
|
||||||
tcs.append(autoDetectToolchains(QLatin1String("g++"), Abi::hostAbi(), alreadyKnown));
|
tcs.append(autoDetectToolchains(QLatin1String("g++"), Abi::hostAbi(),
|
||||||
|
Constants::GCC_TOOLCHAIN_TYPEID,alreadyKnown));
|
||||||
|
|
||||||
return tcs;
|
return tcs;
|
||||||
}
|
}
|
||||||
@@ -810,6 +813,7 @@ GccToolChain *GccToolChainFactory::createToolChain(bool autoDetect)
|
|||||||
|
|
||||||
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler,
|
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler,
|
||||||
const Abi &requiredAbi,
|
const Abi &requiredAbi,
|
||||||
|
const Core::Id requiredTypeId,
|
||||||
const QList<ToolChain *> &alreadyKnown)
|
const QList<ToolChain *> &alreadyKnown)
|
||||||
{
|
{
|
||||||
QList<ToolChain *> result;
|
QList<ToolChain *> result;
|
||||||
@@ -819,7 +823,10 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
|
|||||||
if (compilerPath.isEmpty())
|
if (compilerPath.isEmpty())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
result = Utils::filtered(alreadyKnown, Utils::equal(&ToolChain::compilerCommand, compilerPath));
|
result = Utils::filtered(alreadyKnown, [requiredTypeId, compilerPath](ToolChain *tc) {
|
||||||
|
return tc->typeId() == requiredTypeId
|
||||||
|
&& tc->compilerCommand() == compilerPath;
|
||||||
|
});
|
||||||
if (!result.isEmpty())
|
if (!result.isEmpty())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -1114,7 +1121,8 @@ ClangToolChainFactory::ClangToolChainFactory()
|
|||||||
|
|
||||||
QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
||||||
{
|
{
|
||||||
return autoDetectToolchains(QLatin1String("clang++"), Abi::hostAbi(), alreadyKnown);
|
return autoDetectToolchains(QLatin1String("clang++"), Abi::hostAbi(),
|
||||||
|
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClangToolChainFactory::canRestore(const QVariantMap &data)
|
bool ClangToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
@@ -1194,7 +1202,8 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
{
|
{
|
||||||
Abi ha = Abi::hostAbi();
|
Abi ha = Abi::hostAbi();
|
||||||
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
|
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
|
||||||
return autoDetectToolchains(QLatin1String("g++"), ha, alreadyKnown);
|
return autoDetectToolchains(QLatin1String("g++"), ha,
|
||||||
|
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MingwToolChainFactory::canRestore(const QVariantMap &data)
|
bool MingwToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
@@ -1269,7 +1278,8 @@ LinuxIccToolChainFactory::LinuxIccToolChainFactory()
|
|||||||
|
|
||||||
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
||||||
{
|
{
|
||||||
return autoDetectToolchains(QLatin1String("icpc"), Abi::hostAbi(), alreadyKnown);
|
return autoDetectToolchains(QLatin1String("icpc"), Abi::hostAbi(),
|
||||||
|
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)
|
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
|
|||||||
@@ -66,8 +66,8 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual GccToolChain *createToolChain(bool autoDetect);
|
virtual GccToolChain *createToolChain(bool autoDetect);
|
||||||
QList<ToolChain *> autoDetectToolchains(const QString &compiler,
|
QList<ToolChain *> autoDetectToolchains(const QString &compiler, const Abi &requiredAbi,
|
||||||
const Abi &,
|
const Core::Id requiredTypeId,
|
||||||
const QList<ToolChain *> &alreadyKnown);
|
const QList<ToolChain *> &alreadyKnown);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user