forked from qt-creator/qt-creator
Android: Use toolchain bundles for setting up the kits
Change-Id: I46f436cc9ccdb84543abf7bf78a93ed6fe27561c Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -1190,18 +1190,17 @@ void AndroidConfigurations::applyConfig()
|
|||||||
emit m_instance->updated();
|
emit m_instance->updated();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool matchToolchain(const Toolchain *atc, const Toolchain *btc)
|
static bool matchKit(const ToolchainBundle &bundle, const Kit &kit)
|
||||||
{
|
{
|
||||||
if (atc == btc)
|
using namespace ProjectExplorer::Constants;
|
||||||
return true;
|
for (const Id lang : {C_LANGUAGE_ID, CXX_LANGUAGE_ID}) {
|
||||||
|
const Toolchain * const tc = ToolchainKitAspect::toolchain(&kit, lang);
|
||||||
if (!atc || !btc)
|
if (!tc || tc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID
|
||||||
return false;
|
|| tc->targetAbi() != bundle.targetAbi()) {
|
||||||
|
return false;
|
||||||
if (atc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID || btc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID)
|
}
|
||||||
return false;
|
}
|
||||||
|
return true;
|
||||||
return atc->targetAbi() == btc->targetAbi();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidConfigurations::registerNewToolchains()
|
void AndroidConfigurations::registerNewToolchains()
|
||||||
@@ -1409,48 +1408,37 @@ void AndroidConfigurations::updateAutomaticKitList()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// register new kits
|
// register new kits
|
||||||
const Toolchains toolchains = ToolchainManager::toolchains([](const Toolchain *tc) {
|
|
||||||
return tc->isAutoDetected() && tc->typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID
|
|
||||||
&& tc->isValid();
|
|
||||||
});
|
|
||||||
QList<Kit *> unhandledKits = existingKits;
|
|
||||||
for (Toolchain *tc : toolchains) {
|
|
||||||
if (tc->language() != ProjectExplorer::Constants::CXX_LANGUAGE_ID)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (const QtVersion *qt : qtVersionsForArch.value(tc->targetAbi())) {
|
const QList<ToolchainBundle> bundles = Utils::filtered(
|
||||||
FilePath tcNdk = static_cast<const AndroidToolchain *>(tc)->ndkLocation();
|
ToolchainBundle::collectBundles(
|
||||||
|
ToolchainManager::toolchains([](const Toolchain *tc) {
|
||||||
|
return tc->isAutoDetected() && tc->typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID;
|
||||||
|
}),
|
||||||
|
ToolchainBundle::AutoRegister::On),
|
||||||
|
[](const ToolchainBundle &b) { return b.isCompletelyValid(); });
|
||||||
|
|
||||||
|
QList<Kit *> unhandledKits = existingKits;
|
||||||
|
for (const ToolchainBundle &bundle : bundles) {
|
||||||
|
for (const QtVersion *qt : qtVersionsForArch.value(bundle.targetAbi())) {
|
||||||
|
const FilePath tcNdk = bundle.get(&AndroidToolchain::ndkLocation);
|
||||||
if (tcNdk != AndroidConfig::ndkLocation(qt))
|
if (tcNdk != AndroidConfig::ndkLocation(qt))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const Toolchains allLanguages
|
|
||||||
= Utils::filtered(toolchains, [tc, tcNdk](Toolchain *otherTc) {
|
|
||||||
FilePath otherNdk = static_cast<const AndroidToolchain *>(otherTc)->ndkLocation();
|
|
||||||
return tc->targetAbi() == otherTc->targetAbi() && tcNdk == otherNdk;
|
|
||||||
});
|
|
||||||
|
|
||||||
QHash<Id, Toolchain *> toolchainForLanguage;
|
|
||||||
for (Toolchain *tc : allLanguages)
|
|
||||||
toolchainForLanguage[tc->language()] = tc;
|
|
||||||
|
|
||||||
Kit *existingKit = Utils::findOrDefault(existingKits, [&](const Kit *b) {
|
Kit *existingKit = Utils::findOrDefault(existingKits, [&](const Kit *b) {
|
||||||
if (qt != QtKitAspect::qtVersion(b))
|
if (qt != QtKitAspect::qtVersion(b))
|
||||||
return false;
|
return false;
|
||||||
return matchToolchain(toolchainForLanguage[ProjectExplorer::Constants::CXX_LANGUAGE_ID],
|
return matchKit(bundle, *b);
|
||||||
ToolchainKitAspect::cxxToolchain(b))
|
|
||||||
&& matchToolchain(toolchainForLanguage[ProjectExplorer::Constants::C_LANGUAGE_ID],
|
|
||||||
ToolchainKitAspect::cToolchain(b));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto initializeKit = [allLanguages, tc, qt](Kit *k) {
|
const auto initializeKit = [&bundle, qt](Kit *k) {
|
||||||
k->setAutoDetected(true);
|
k->setAutoDetected(true);
|
||||||
k->setAutoDetectionSource("AndroidConfiguration");
|
k->setAutoDetectionSource("AndroidConfiguration");
|
||||||
DeviceTypeKitAspect::setDeviceTypeId(k, Constants::ANDROID_DEVICE_TYPE);
|
DeviceTypeKitAspect::setDeviceTypeId(k, Constants::ANDROID_DEVICE_TYPE);
|
||||||
for (Toolchain *tc : allLanguages)
|
ToolchainKitAspect::setBundle(k, bundle);
|
||||||
ToolchainKitAspect::setToolchain(k, tc);
|
|
||||||
QtKitAspect::setQtVersion(k, qt);
|
QtKitAspect::setQtVersion(k, qt);
|
||||||
QStringList abis = static_cast<const AndroidQtVersion *>(qt)->androidAbis();
|
QStringList abis = static_cast<const AndroidQtVersion *>(qt)->androidAbis();
|
||||||
Debugger::DebuggerKitAspect::setDebugger(k, findOrRegisterDebugger(tc, abis));
|
Debugger::DebuggerKitAspect::setDebugger(
|
||||||
|
k, findOrRegisterDebugger(bundle.toolchains().first(), abis));
|
||||||
|
|
||||||
BuildDeviceKitAspect::setDeviceId(k, DeviceManager::defaultDesktopDevice()->id());
|
BuildDeviceKitAspect::setDeviceId(k, DeviceManager::defaultDesktopDevice()->id());
|
||||||
k->setSticky(QtKitAspect::id(), true);
|
k->setSticky(QtKitAspect::id(), true);
|
||||||
|
Reference in New Issue
Block a user