Android multi arch support

[ChangeLog][Android] Android multi arch support for qmake

Change-Id: Ib8b1874604a3392130c96fbc00b26713b3d788ae
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
BogDan Vatra
2019-08-26 14:19:07 +03:00
committed by BogDan Vatra
parent 567a20843f
commit 6b31f9cf23
37 changed files with 431 additions and 464 deletions

View File

@@ -71,14 +71,42 @@ QString AndroidQtVersion::invalidReason() const
Abis AndroidQtVersion::detectQtAbis() const
{
Abis abis = BaseQtVersion::detectQtAbis();
for (int i = 0; i < abis.count(); ++i) {
abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(),
Abi::AndroidLinuxFlavor,
abis.at(i).binaryFormat(),
abis.at(i).wordWidth());
}
auto androidAbi2Abi = [](const QString &androidAbi) {
if (androidAbi == "arm64-v8a") {
return Abi{Abi::Architecture::ArmArchitecture,
Abi::OS::LinuxOS,
Abi::OSFlavor::AndroidLinuxFlavor,
Abi::BinaryFormat::ElfFormat,
64, androidAbi};
} else if (androidAbi == "armeabi-v7a") {
return Abi{Abi::Architecture::ArmArchitecture,
Abi::OS::LinuxOS,
Abi::OSFlavor::AndroidLinuxFlavor,
Abi::BinaryFormat::ElfFormat,
32, androidAbi};
} else if (androidAbi == "x86_64") {
return Abi{Abi::Architecture::X86Architecture,
Abi::OS::LinuxOS,
Abi::OSFlavor::AndroidLinuxFlavor,
Abi::BinaryFormat::ElfFormat,
64, androidAbi};
} else if (androidAbi == "x86") {
return Abi{Abi::Architecture::X86Architecture,
Abi::OS::LinuxOS,
Abi::OSFlavor::AndroidLinuxFlavor,
Abi::BinaryFormat::ElfFormat,
32, androidAbi};
} else {
return Abi{Abi::Architecture::UnknownArchitecture,
Abi::OS::LinuxOS,
Abi::OSFlavor::AndroidLinuxFlavor,
Abi::BinaryFormat::ElfFormat,
0, androidAbi};
}
};
Abis abis;
for (const auto &abi : androidAbis())
abis << androidAbi2Abi(abi);
return abis;
}
@@ -105,10 +133,10 @@ QString AndroidQtVersion::description() const
return tr("Android");
}
QString AndroidQtVersion::targetArch() const
const QStringList &AndroidQtVersion::androidAbis() const
{
ensureMkSpecParsed();
return m_targetArch;
return m_androidAbis;
}
int AndroidQtVersion::minimumNDK() const
@@ -119,8 +147,11 @@ int AndroidQtVersion::minimumNDK() const
void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
{
m_targetArch = evaluator->value(QLatin1String("ANDROID_TARGET_ARCH"));
const QString androidPlatform = evaluator->value(QLatin1String("ANDROID_PLATFORM"));
if (qtVersion() >= QtSupport::QtVersionNumber{5, 14})
m_androidAbis = evaluator->values("ALL_ANDROID_ABIS");
else
m_androidAbis = QStringList{evaluator->value("ANDROID_TARGET_ARCH")};
const QString androidPlatform = evaluator->value("ANDROID_PLATFORM");
if (!androidPlatform.isEmpty()) {
const QRegExp regex("android-(\\d+)");
if (regex.exactMatch(androidPlatform)) {