forked from qt-creator/qt-creator
ProjectExplorer: Pass device to ToolChain::autodetect
Currently unused, will be useful to detect toolchains in docker containers. Change-Id: I0fd7643969ab02c05839332a436147ffb242635d Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -435,8 +435,10 @@ IarToolChainFactory::IarToolChainFactory()
|
|||||||
setUserCreatable(true);
|
setUserCreatable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> IarToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> IarToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device);
|
||||||
Candidates candidates;
|
Candidates candidates;
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
@@ -91,7 +91,8 @@ public:
|
|||||||
IarToolChainFactory();
|
IarToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
||||||
|
@@ -605,8 +605,10 @@ static QString extractVersion(const QString &toolsFile, const QString §ion)
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> KeilToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> KeilToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device)
|
||||||
#ifdef Q_OS_WIN64
|
#ifdef Q_OS_WIN64
|
||||||
static const char kRegistryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\" \
|
static const char kRegistryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\" \
|
||||||
"Windows\\CurrentVersion\\Uninstall\\Keil µVision4";
|
"Windows\\CurrentVersion\\Uninstall\\Keil µVision4";
|
||||||
|
@@ -92,7 +92,8 @@ public:
|
|||||||
KeilToolChainFactory();
|
KeilToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
||||||
|
@@ -313,8 +313,10 @@ SdccToolChainFactory::SdccToolChainFactory()
|
|||||||
setUserCreatable(true);
|
setUserCreatable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> SdccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> SdccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device)
|
||||||
Candidates candidates;
|
Candidates candidates;
|
||||||
|
|
||||||
if (Utils::HostOsInfo::isWindowsHost()) {
|
if (Utils::HostOsInfo::isWindowsHost()) {
|
||||||
|
@@ -83,7 +83,8 @@ public:
|
|||||||
SdccToolChainFactory();
|
SdccToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
||||||
|
@@ -580,8 +580,10 @@ IosToolChainFactory::IosToolChainFactory()
|
|||||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID});
|
ProjectExplorer::Constants::CXX_LANGUAGE_ID});
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &existingToolChains)
|
QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &existingToolChains,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device);
|
||||||
QList<ClangToolChain *> existingClangToolChains = clangToolChains(existingToolChains);
|
QList<ClangToolChain *> existingClangToolChains = clangToolChains(existingToolChains);
|
||||||
const QList<XcodePlatform> platforms = XcodeProbe::detectPlatforms().values();
|
const QList<XcodePlatform> platforms = XcodeProbe::detectPlatforms().values();
|
||||||
QList<ToolChain *> toolChains;
|
QList<ToolChain *> toolChains;
|
||||||
|
@@ -98,7 +98,9 @@ class IosToolChainFactory : public ProjectExplorer::ToolChainFactory
|
|||||||
public:
|
public:
|
||||||
IosToolChainFactory();
|
IosToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &existingToolChains) override;
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
|
const QList<ProjectExplorer::ToolChain *> &existingToolChains,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class IosConfigurations : public QObject
|
class IosConfigurations : public QObject
|
||||||
|
@@ -419,7 +419,7 @@ static ToolChain *iarToolChain(Id language)
|
|||||||
return f->supportedToolChainType() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID;
|
return f->supportedToolChainType() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID;
|
||||||
});
|
});
|
||||||
if (iarFactory) {
|
if (iarFactory) {
|
||||||
const QList<ToolChain*> detected = iarFactory->autoDetect(QList<ToolChain*>());
|
const QList<ToolChain*> detected = iarFactory->autoDetect({}, {});
|
||||||
for (auto tc: detected) {
|
for (auto tc: detected) {
|
||||||
if (tc->language() == language) {
|
if (tc->language() == language) {
|
||||||
toolChain = tc;
|
toolChain = tc;
|
||||||
|
@@ -49,8 +49,10 @@ NimToolChainFactory::NimToolChainFactory()
|
|||||||
setUserCreatable(true);
|
setUserCreatable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> NimToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> NimToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device);
|
||||||
QList<ToolChain *> result;
|
QList<ToolChain *> result;
|
||||||
|
|
||||||
Environment systemEnvironment = Environment::systemEnvironment();
|
Environment systemEnvironment = Environment::systemEnvironment();
|
||||||
|
@@ -39,7 +39,8 @@ class NimToolChainFactory : public ProjectExplorer::ToolChainFactory
|
|||||||
public:
|
public:
|
||||||
NimToolChainFactory();
|
NimToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;
|
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) final;
|
||||||
QList<ProjectExplorer::ToolChain *> detectForImport(const ProjectExplorer::ToolChainDescription &tcd) final;
|
QList<ProjectExplorer::ToolChain *> detectForImport(const ProjectExplorer::ToolChainDescription &tcd) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -998,7 +998,8 @@ GccToolChainFactory::GccToolChainFactory()
|
|||||||
setUserCreatable(true);
|
setUserCreatable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
// GCC is almost never what you want on macOS, but it is by default found in /usr/bin
|
// GCC is almost never what you want on macOS, but it is by default found in /usr/bin
|
||||||
if (HostOsInfo::isMacHost())
|
if (HostOsInfo::isMacHost())
|
||||||
@@ -1010,9 +1011,11 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
|||||||
&& tc->compilerCommand().fileName() != "c99-gcc";
|
&& tc->compilerCommand().fileName() != "c99-gcc";
|
||||||
};
|
};
|
||||||
tcs.append(autoDetectToolchains("g++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
tcs.append(autoDetectToolchains("g++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown, tcChecker));
|
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown,
|
||||||
|
device, tcChecker));
|
||||||
tcs.append(autoDetectToolchains("gcc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
tcs.append(autoDetectToolchains("gcc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown, tcChecker));
|
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown,
|
||||||
|
device, tcChecker));
|
||||||
return tcs;
|
return tcs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1032,10 +1035,16 @@ QList<ToolChain *> GccToolChainFactory::detectForImport(const ToolChainDescripti
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(
|
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(
|
||||||
const QString &compilerName, DetectVariants detectVariants, Utils::Id language,
|
const QString &compilerName,
|
||||||
const Utils::Id requiredTypeId, const QList<ToolChain *> &alreadyKnown,
|
DetectVariants detectVariants,
|
||||||
|
const Id language,
|
||||||
|
const Id requiredTypeId,
|
||||||
|
const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device,
|
||||||
const ToolchainChecker &checker)
|
const ToolchainChecker &checker)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device)
|
||||||
|
|
||||||
FilePaths compilerPaths;
|
FilePaths compilerPaths;
|
||||||
QFileInfo fi(compilerName);
|
QFileInfo fi(compilerName);
|
||||||
if (fi.isAbsolute()) {
|
if (fi.isAbsolute()) {
|
||||||
@@ -1123,8 +1132,8 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!alreadyExists) {
|
if (!alreadyExists) {
|
||||||
const QList<ToolChain *> newToolchains = autoDetectToolChain({compilerPath, language},
|
const QList<ToolChain *> newToolchains
|
||||||
checker);
|
= autoDetectToolChain({compilerPath, language}, checker);
|
||||||
result << newToolchains;
|
result << newToolchains;
|
||||||
existingCandidates << newToolchains;
|
existingCandidates << newToolchains;
|
||||||
}
|
}
|
||||||
@@ -1591,15 +1600,16 @@ ClangToolChainFactory::ClangToolChainFactory()
|
|||||||
setToolchainConstructor([] { return new ClangToolChain; });
|
setToolchainConstructor([] { return new ClangToolChain; });
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
QList<ToolChain *> tcs;
|
QList<ToolChain *> tcs;
|
||||||
QList<ToolChain *> known = alreadyKnown;
|
QList<ToolChain *> known = alreadyKnown;
|
||||||
|
|
||||||
tcs.append(autoDetectToolchains("clang++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
tcs.append(autoDetectToolchains("clang++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
|
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown, device));
|
||||||
tcs.append(autoDetectToolchains("clang", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
tcs.append(autoDetectToolchains("clang", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
|
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown, device));
|
||||||
known.append(tcs);
|
known.append(tcs);
|
||||||
|
|
||||||
const FilePath compilerPath = FilePath::fromString(Core::ICore::clangExecutable(CLANG_BINDIR));
|
const FilePath compilerPath = FilePath::fromString(Core::ICore::clangExecutable(CLANG_BINDIR));
|
||||||
@@ -1608,7 +1618,7 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
HostOsInfo::withExecutableSuffix("clang"));
|
HostOsInfo::withExecutableSuffix("clang"));
|
||||||
tcs.append(autoDetectToolchains(clang.toString(), DetectVariants::No,
|
tcs.append(autoDetectToolchains(clang.toString(), DetectVariants::No,
|
||||||
Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
|
Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
tcs));
|
tcs, device));
|
||||||
}
|
}
|
||||||
|
|
||||||
return tcs;
|
return tcs;
|
||||||
@@ -1779,16 +1789,17 @@ MingwToolChainFactory::MingwToolChainFactory()
|
|||||||
setToolchainConstructor([] { return new MingwToolChain; });
|
setToolchainConstructor([] { return new MingwToolChain; });
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
static const auto tcChecker = [](const ToolChain *tc) {
|
static const auto tcChecker = [](const ToolChain *tc) {
|
||||||
return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor;
|
return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor;
|
||||||
};
|
};
|
||||||
QList<ToolChain *> result = autoDetectToolchains(
|
QList<ToolChain *> result = autoDetectToolchains(
|
||||||
"g++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
"g++", DetectVariants::Yes, Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown, tcChecker);
|
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown, device, tcChecker);
|
||||||
result += autoDetectToolchains("gcc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
result += autoDetectToolchains("gcc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown, tcChecker);
|
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown, device, tcChecker);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1860,13 +1871,14 @@ LinuxIccToolChainFactory::LinuxIccToolChainFactory()
|
|||||||
setToolchainConstructor([] { return new LinuxIccToolChain; });
|
setToolchainConstructor([] { return new LinuxIccToolChain; });
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
QList<ToolChain *> result
|
QList<ToolChain *> result
|
||||||
= autoDetectToolchains("icpc", DetectVariants::No, Constants::CXX_LANGUAGE_ID,
|
= autoDetectToolchains("icpc", DetectVariants::No, Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown, device);
|
||||||
result += autoDetectToolchains("icc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
result += autoDetectToolchains("icc", DetectVariants::Yes, Constants::C_LANGUAGE_ID,
|
||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown, device);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -52,15 +52,17 @@ class GccToolChainFactory : public ToolChainFactory
|
|||||||
public:
|
public:
|
||||||
GccToolChainFactory();
|
GccToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
QList<ToolChain *> detectForImport(const ProjectExplorer::ToolChainDescription &tcd) override;
|
const IDevice::Ptr &device) override;
|
||||||
|
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum class DetectVariants { Yes, No };
|
enum class DetectVariants { Yes, No };
|
||||||
using ToolchainChecker = std::function<bool(const ToolChain *)>;
|
using ToolchainChecker = std::function<bool(const ToolChain *)>;
|
||||||
QList<ToolChain *> autoDetectToolchains(
|
QList<ToolChain *> autoDetectToolchains(
|
||||||
const QString &compilerName, DetectVariants detectVariants, Utils::Id language,
|
const QString &compilerName, DetectVariants detectVariants, const Utils::Id language,
|
||||||
const Utils::Id requiredTypeId, const QList<ToolChain *> &alreadyKnown,
|
const Utils::Id requiredTypeId, const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device,
|
||||||
const ToolchainChecker &checker = {});
|
const ToolchainChecker &checker = {});
|
||||||
QList<ToolChain *> autoDetectToolChain(
|
QList<ToolChain *> autoDetectToolChain(
|
||||||
const ToolChainDescription &tcd,
|
const ToolChainDescription &tcd,
|
||||||
@@ -132,7 +134,8 @@ class ClangToolChainFactory : public GccToolChainFactory
|
|||||||
public:
|
public:
|
||||||
ClangToolChainFactory();
|
ClangToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device) override;
|
||||||
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -145,7 +148,8 @@ class MingwToolChainFactory : public GccToolChainFactory
|
|||||||
public:
|
public:
|
||||||
MingwToolChainFactory();
|
MingwToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device) override;
|
||||||
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -158,7 +162,7 @@ class LinuxIccToolChainFactory : public GccToolChainFactory
|
|||||||
public:
|
public:
|
||||||
LinuxIccToolChainFactory();
|
LinuxIccToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown, const IDevice::Ptr &) override;
|
||||||
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
QList<ToolChain *> detectForImport(const ToolChainDescription &tcd) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1811,8 +1811,11 @@ static void detectCppBuildTools2015(QList<ToolChain *> *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device)
|
||||||
|
|
||||||
QList<ToolChain *> results;
|
QList<ToolChain *> results;
|
||||||
|
|
||||||
// 1) Installed SDKs preferred over standalone Visual studio
|
// 1) Installed SDKs preferred over standalone Visual studio
|
||||||
@@ -1913,9 +1916,11 @@ bool ClangClToolChainFactory::canCreate() const
|
|||||||
return !g_availableMsvcToolchains.isEmpty();
|
return !g_availableMsvcToolchains.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> ClangClToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> ClangClToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
Q_UNUSED(alreadyKnown)
|
Q_UNUSED(alreadyKnown)
|
||||||
|
Q_UNUSED(device) // FIXME: Use it.
|
||||||
|
|
||||||
#ifdef Q_OS_WIN64
|
#ifdef Q_OS_WIN64
|
||||||
const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM";
|
const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM";
|
||||||
|
@@ -187,7 +187,8 @@ class MsvcToolChainFactory : public ToolChainFactory
|
|||||||
public:
|
public:
|
||||||
MsvcToolChainFactory();
|
MsvcToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device) override;
|
||||||
|
|
||||||
bool canCreate() const override;
|
bool canCreate() const override;
|
||||||
|
|
||||||
@@ -201,7 +202,8 @@ class ClangClToolChainFactory : public ToolChainFactory
|
|||||||
public:
|
public:
|
||||||
ClangClToolChainFactory();
|
ClangClToolChainFactory();
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device) override;
|
||||||
|
|
||||||
bool canCreate() const override;
|
bool canCreate() const override;
|
||||||
};
|
};
|
||||||
|
@@ -488,9 +488,11 @@ const QList<ToolChainFactory *> ToolChainFactory::allToolChainFactories()
|
|||||||
return Internal::g_toolChainFactories;
|
return Internal::g_toolChainFactories;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> ToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> ToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
Q_UNUSED(alreadyKnown)
|
Q_UNUSED(alreadyKnown)
|
||||||
|
Q_UNUSED(device)
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "projectexplorer_export.h"
|
#include "projectexplorer_export.h"
|
||||||
|
|
||||||
#include "abi.h"
|
#include "abi.h"
|
||||||
|
#include "devicesupport/idevice.h"
|
||||||
#include "headerpath.h"
|
#include "headerpath.h"
|
||||||
#include "projectmacro.h"
|
#include "projectmacro.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
@@ -202,7 +203,8 @@ public:
|
|||||||
QString displayName() const { return m_displayName; }
|
QString displayName() const { return m_displayName; }
|
||||||
Utils::Id supportedToolChainType() const;
|
Utils::Id supportedToolChainType() const;
|
||||||
|
|
||||||
virtual QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
|
virtual QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device);
|
||||||
virtual QList<ToolChain *> detectForImport(const ToolChainDescription &tcd);
|
virtual QList<ToolChain *> detectForImport(const ToolChainDescription &tcd);
|
||||||
|
|
||||||
virtual bool canCreate() const;
|
virtual bool canCreate() const;
|
||||||
|
@@ -413,7 +413,7 @@ void ToolChainOptionsWidget::redetectToolchains()
|
|||||||
QList<ToolChain *> toAdd;
|
QList<ToolChain *> toAdd;
|
||||||
QSet<ToolChain *> toDelete;
|
QSet<ToolChain *> toDelete;
|
||||||
for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories()) {
|
for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories()) {
|
||||||
for (ToolChain * const tc : f->autoDetect(knownTcs)) {
|
for (ToolChain * const tc : f->autoDetect(knownTcs, {})) { // FIXME: Pass device.
|
||||||
if (knownTcs.contains(tc) || toDelete.contains(tc))
|
if (knownTcs.contains(tc) || toDelete.contains(tc))
|
||||||
continue;
|
continue;
|
||||||
const auto matchItem = [tc](const ToolChainTreeItem *item) {
|
const auto matchItem = [tc](const ToolChainTreeItem *item) {
|
||||||
|
@@ -67,11 +67,12 @@ struct ToolChainOperations
|
|||||||
QList<ToolChain *> toDelete;
|
QList<ToolChain *> toDelete;
|
||||||
};
|
};
|
||||||
|
|
||||||
static QList<ToolChain *> autoDetectToolChains(const QList<ToolChain *> alreadyKnownTcs)
|
static QList<ToolChain *> autoDetectToolChains(const QList<ToolChain *> alreadyKnownTcs,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
QList<ToolChain *> result;
|
QList<ToolChain *> result;
|
||||||
for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories())
|
for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories())
|
||||||
result.append(f->autoDetect(alreadyKnownTcs));
|
result.append(f->autoDetect(alreadyKnownTcs, device));
|
||||||
|
|
||||||
// Remove invalid toolchains that might have sneaked in.
|
// Remove invalid toolchains that might have sneaked in.
|
||||||
return Utils::filtered(result, [](const ToolChain *tc) { return tc->isValid(); });
|
return Utils::filtered(result, [](const ToolChain *tc) { return tc->isValid(); });
|
||||||
@@ -203,7 +204,8 @@ QList<ToolChain *> ToolChainSettingsAccessor::restoreToolChains(QWidget *parent)
|
|||||||
// Autodetect: Pass autodetected toolchains from user file so the information can be reused:
|
// Autodetect: Pass autodetected toolchains from user file so the information can be reused:
|
||||||
const QList<ToolChain *> autodetectedUserFileTcs
|
const QList<ToolChain *> autodetectedUserFileTcs
|
||||||
= Utils::filtered(userFileTcs, &ToolChain::isAutoDetected);
|
= Utils::filtered(userFileTcs, &ToolChain::isAutoDetected);
|
||||||
const QList<ToolChain *> autodetectedTcs = autoDetectToolChains(autodetectedUserFileTcs);
|
// FIXME: Use real device?
|
||||||
|
const QList<ToolChain *> autodetectedTcs = autoDetectToolChains(autodetectedUserFileTcs, {});
|
||||||
|
|
||||||
// merge tool chains and register those that we need to keep:
|
// merge tool chains and register those that we need to keep:
|
||||||
const ToolChainOperations ops = mergeToolChainLists(systemFileTcs, userFileTcs, autodetectedTcs);
|
const ToolChainOperations ops = mergeToolChainLists(systemFileTcs, userFileTcs, autodetectedTcs);
|
||||||
|
@@ -213,8 +213,11 @@ QnxToolChainFactory::QnxToolChainFactory()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> QnxToolChainFactory::autoDetect(
|
QList<ProjectExplorer::ToolChain *> QnxToolChainFactory::autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown)
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(device);
|
||||||
|
|
||||||
QList<ToolChain *> tcs;
|
QList<ToolChain *> tcs;
|
||||||
QList<QnxConfiguration *> configurations =
|
QList<QnxConfiguration *> configurations =
|
||||||
QnxConfigurationManager::instance()->configurations();
|
QnxConfigurationManager::instance()->configurations();
|
||||||
|
@@ -71,7 +71,8 @@ public:
|
|||||||
QnxToolChainFactory();
|
QnxToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) override;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@@ -128,7 +128,7 @@ void WebAssemblyToolChain::registerToolChains()
|
|||||||
return f->supportedToolChainType() == Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID;
|
return f->supportedToolChainType() == Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID;
|
||||||
});
|
});
|
||||||
QTC_ASSERT(factory, return);
|
QTC_ASSERT(factory, return);
|
||||||
for (auto toolChain : factory->autoDetect({}))
|
for (auto toolChain : factory->autoDetect({}, {}))
|
||||||
ToolChainManager::registerToolChain(toolChain);
|
ToolChainManager::registerToolChain(toolChain);
|
||||||
|
|
||||||
// Let kits pick up the new toolchains
|
// Let kits pick up the new toolchains
|
||||||
@@ -158,9 +158,11 @@ WebAssemblyToolChainFactory::WebAssemblyToolChainFactory()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> WebAssemblyToolChainFactory::autoDetect(
|
QList<ToolChain *> WebAssemblyToolChainFactory::autoDetect(
|
||||||
const QList<ToolChain *> &alreadyKnown)
|
const QList<ToolChain *> &alreadyKnown,
|
||||||
|
const IDevice::Ptr &device)
|
||||||
{
|
{
|
||||||
Q_UNUSED(alreadyKnown)
|
Q_UNUSED(alreadyKnown)
|
||||||
|
Q_UNUSED(device)
|
||||||
|
|
||||||
const FilePath sdk = WebAssemblyEmSdk::registeredEmSdk();
|
const FilePath sdk = WebAssemblyEmSdk::registeredEmSdk();
|
||||||
if (!WebAssemblyEmSdk::isValid(sdk))
|
if (!WebAssemblyEmSdk::isValid(sdk))
|
||||||
|
@@ -58,7 +58,8 @@ public:
|
|||||||
WebAssemblyToolChainFactory();
|
WebAssemblyToolChainFactory();
|
||||||
|
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(
|
QList<ProjectExplorer::ToolChain *> autoDetect(
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) override;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown,
|
||||||
|
const ProjectExplorer::IDevice::Ptr &device) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
Reference in New Issue
Block a user