diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp index 2c932ad42c1..2276599faa9 100644 --- a/src/plugins/android/androidqtversion.cpp +++ b/src/plugins/android/androidqtversion.cpp @@ -82,8 +82,12 @@ bool AndroidQtVersion::supportsMultipleQtAbis() const Abis AndroidQtVersion::detectQtAbis() const { - const bool conf = AndroidConfig::sdkFullyConfigured(); - return conf ? Utils::transform(androidAbis(), &androidAbi2Abi) : Abis(); + Abis result = qtAbisFromJson(); + if (result.isEmpty() && AndroidConfig::sdkFullyConfigured()) { + ensureMkSpecParsed(); + result = Utils::transform(m_androidAbis, &androidAbi2Abi); + } + return result; } void AndroidQtVersion::addToBuildEnvironment(const Kit *k, Utils::Environment &env) const @@ -109,10 +113,9 @@ QString AndroidQtVersion::description() const return Tr::tr("Android"); } -const QStringList &AndroidQtVersion::androidAbis() const +const QStringList AndroidQtVersion::androidAbis() const { - ensureMkSpecParsed(); - return m_androidAbis; + return Utils::transform(detectQtAbis(), &Abi::toAndroidAbi); } int AndroidQtVersion::minimumNDK() const diff --git a/src/plugins/android/androidqtversion.h b/src/plugins/android/androidqtversion.h index ceddb76520f..d96276abb65 100644 --- a/src/plugins/android/androidqtversion.h +++ b/src/plugins/android/androidqtversion.h @@ -25,7 +25,7 @@ public: QSet targetDeviceTypes() const override; QString description() const override; - const QStringList &androidAbis() const; + const QStringList androidAbis() const; int minimumNDK() const; static QString androidDeploymentSettingsFileName(const ProjectExplorer::Target *target); diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index 1cde394ec8e..0fa590b7d9f 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -443,18 +443,6 @@ static Abis abiOf(const QByteArray &data) return result; } -static QString androidAbiFromAbi(const Abi &abi) -{ - QString androidAbi; - if (abi.architecture() == Abi::Architecture::ArmArchitecture) - androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_ARM64_V8A - : Constants::ANDROID_ABI_ARMEABI_V7A); - else - androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_X86_64 - : Constants::ANDROID_ABI_X86); - return androidAbi; -} - // -------------------------------------------------------------------------- // Abi // -------------------------------------------------------------------------- @@ -689,6 +677,22 @@ QString Abi::param() const return m_param; } +QString Abi::toAndroidAbi() const +{ + if (architecture() == Abi::Architecture::ArmArchitecture) { + if (wordWidth() == 32) + return Constants::ANDROID_ABI_ARMEABI_V7A; + if (wordWidth() == 64) + return Constants::ANDROID_ABI_ARM64_V8A; + } else if (architecture() == Abi::Architecture::X86Architecture) { + if (wordWidth() == 32) + return Constants::ANDROID_ABI_X86; + if (wordWidth() == 64) + return Constants::ANDROID_ABI_X86_64; + } + return {}; +} + bool Abi::operator != (const Abi &other) const { return !operator ==(other); @@ -936,7 +940,7 @@ Abi Abi::fromString(const QString &abiString) Abi abi(architecture, os, flavor, format, wordWidth); if (abi.os() == LinuxOS && abi.osFlavor() == AndroidLinuxFlavor) - abi.m_param = androidAbiFromAbi(abi); + abi.m_param = abi.toAndroidAbi(); return abi; } diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h index 71f62ad7338..ec06abe4538 100644 --- a/src/plugins/projectexplorer/abi.h +++ b/src/plugins/projectexplorer/abi.h @@ -144,6 +144,8 @@ public: QString toString() const; QString param() const; + QString toAndroidAbi() const; + static QString toString(const Architecture &a); static QString toString(const OS &o); static QString toString(const OSFlavor &of); diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index d6d94cac993..2e19566b983 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -751,14 +751,17 @@ void QtVersion::setQtAbis(const Abis &abis) Abis QtVersion::detectQtAbis() const { qCDebug(abiDetect) << "Detecting ABIs for" << qmakeFilePath(); - if (const Abis abis = qtAbisFromJson(*this, {d->data().archDataPath, d->data().dataPath}); - !abis.isEmpty()) { + if (const Abis abis = qtAbisFromJson(); !abis.isEmpty()) return abis; - } qCDebug(abiDetect) << "Got no ABI from JSON file, falling back to inspecting binaries"; return d->qtAbisFromLibrary(); } +Abis QtVersion::qtAbisFromJson() const +{ + return QtSupport::Internal::qtAbisFromJson(*this, {d->data().archDataPath, d->data().dataPath}); +} + bool QtVersion::hasAbi(ProjectExplorer::Abi::OS os, ProjectExplorer::Abi::OSFlavor flavor) const { const Abis abis = qtAbis(); diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index d2576b2843d..0fa8032a329 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -203,6 +203,7 @@ protected: const Utils::FilePath &buildDir) const; virtual ProjectExplorer::Abis detectQtAbis() const; + ProjectExplorer::Abis qtAbisFromJson() const; void resetCache() const;