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();
|
||||
}
|
||||
|
||||
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;
|
||||
for (const Id lang : {C_LANGUAGE_ID, CXX_LANGUAGE_ID}) {
|
||||
const Toolchain * const tc = ToolchainKitAspect::toolchain(&kit, lang);
|
||||
if (!tc || tc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID
|
||||
|| tc->targetAbi() != bundle.targetAbi()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
if (!atc || !btc)
|
||||
return false;
|
||||
|
||||
if (atc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID || btc->typeId() != Constants::ANDROID_TOOLCHAIN_TYPEID)
|
||||
return false;
|
||||
|
||||
return atc->targetAbi() == btc->targetAbi();
|
||||
}
|
||||
|
||||
void AndroidConfigurations::registerNewToolchains()
|
||||
@@ -1409,48 +1408,37 @@ void AndroidConfigurations::updateAutomaticKitList()
|
||||
}
|
||||
|
||||
// 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())) {
|
||||
FilePath tcNdk = static_cast<const AndroidToolchain *>(tc)->ndkLocation();
|
||||
const QList<ToolchainBundle> bundles = Utils::filtered(
|
||||
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))
|
||||
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) {
|
||||
if (qt != QtKitAspect::qtVersion(b))
|
||||
return false;
|
||||
return matchToolchain(toolchainForLanguage[ProjectExplorer::Constants::CXX_LANGUAGE_ID],
|
||||
ToolchainKitAspect::cxxToolchain(b))
|
||||
&& matchToolchain(toolchainForLanguage[ProjectExplorer::Constants::C_LANGUAGE_ID],
|
||||
ToolchainKitAspect::cToolchain(b));
|
||||
return matchKit(bundle, *b);
|
||||
});
|
||||
|
||||
const auto initializeKit = [allLanguages, tc, qt](Kit *k) {
|
||||
const auto initializeKit = [&bundle, qt](Kit *k) {
|
||||
k->setAutoDetected(true);
|
||||
k->setAutoDetectionSource("AndroidConfiguration");
|
||||
DeviceTypeKitAspect::setDeviceTypeId(k, Constants::ANDROID_DEVICE_TYPE);
|
||||
for (Toolchain *tc : allLanguages)
|
||||
ToolchainKitAspect::setToolchain(k, tc);
|
||||
ToolchainKitAspect::setBundle(k, bundle);
|
||||
QtKitAspect::setQtVersion(k, qt);
|
||||
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());
|
||||
k->setSticky(QtKitAspect::id(), true);
|
||||
|
Reference in New Issue
Block a user