Recognize mips64 toolchains from the Android NDK

Adapt a couple mips64-related tests at the same time.

Change-Id: I9313419cfe561c7e949f343d2008f7b370ad2b39
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Jake Petroules
2017-05-24 14:14:39 -07:00
parent 152c6d6c70
commit 3158c125c1
4 changed files with 27 additions and 3 deletions

View File

@@ -100,18 +100,21 @@ namespace {
const QLatin1String ArmToolchainPrefix("arm-linux-androideabi"); const QLatin1String ArmToolchainPrefix("arm-linux-androideabi");
const QLatin1String X86ToolchainPrefix("x86"); const QLatin1String X86ToolchainPrefix("x86");
const QLatin1String MipsToolchainPrefix("mipsel-linux-android"); const QLatin1String MipsToolchainPrefix("mipsel-linux-android");
const QLatin1String Mips64ToolchainPrefix("mips64el-linux-android");
const QLatin1String AArch64ToolchainPrefix("aarch64-linux-android"); const QLatin1String AArch64ToolchainPrefix("aarch64-linux-android");
const QLatin1String X86_64ToolchainPrefix("x86_64"); const QLatin1String X86_64ToolchainPrefix("x86_64");
const QLatin1String ArmToolsPrefix("arm-linux-androideabi"); const QLatin1String ArmToolsPrefix("arm-linux-androideabi");
const QLatin1String X86ToolsPrefix("i686-linux-android"); const QLatin1String X86ToolsPrefix("i686-linux-android");
const QLatin1String MipsToolsPrefix("mipsel-linux-android"); const QLatin1String MipsToolsPrefix("mipsel-linux-android");
const QLatin1String Mips64ToolsPrefix("mips64el-linux-android");
const QLatin1String AArch64ToolsPrefix("aarch64-linux-android"); const QLatin1String AArch64ToolsPrefix("aarch64-linux-android");
const QLatin1String X86_64ToolsPrefix("x86_64-linux-android"); const QLatin1String X86_64ToolsPrefix("x86_64-linux-android");
const QLatin1String ArmToolsDisplayName("arm"); const QLatin1String ArmToolsDisplayName("arm");
const QLatin1String X86ToolsDisplayName("i686"); const QLatin1String X86ToolsDisplayName("i686");
const QLatin1String MipsToolsDisplayName("mipsel"); const QLatin1String MipsToolsDisplayName("mipsel");
const QLatin1String Mips64ToolsDisplayName("mips64el");
const QLatin1String AArch64ToolsDisplayName("aarch64"); const QLatin1String AArch64ToolsDisplayName("aarch64");
const QLatin1String X86_64ToolsDisplayName("x86_64"); const QLatin1String X86_64ToolsDisplayName("x86_64");
@@ -172,6 +175,9 @@ Abi AndroidConfig::abiForToolChainPrefix(const QString &toolchainPrefix)
} else if (toolchainPrefix == X86_64ToolchainPrefix) { } else if (toolchainPrefix == X86_64ToolchainPrefix) {
arch = Abi::X86Architecture; arch = Abi::X86Architecture;
wordWidth = 64; wordWidth = 64;
} else if (toolchainPrefix == Mips64ToolchainPrefix) {
arch = Abi::MipsArchitecture;
wordWidth = 64;
} }
return Abi(arch, Abi::LinuxOS, Abi::AndroidLinuxFlavor, Abi::ElfFormat, wordWidth); return Abi(arch, Abi::LinuxOS, Abi::AndroidLinuxFlavor, Abi::ElfFormat, wordWidth);
@@ -189,6 +195,8 @@ QLatin1String AndroidConfig::toolchainPrefix(const Abi &abi)
return X86_64ToolchainPrefix; return X86_64ToolchainPrefix;
return X86ToolchainPrefix; return X86ToolchainPrefix;
case Abi::MipsArchitecture: case Abi::MipsArchitecture:
if (abi.wordWidth() == 64)
return Mips64ToolchainPrefix;
return MipsToolchainPrefix; return MipsToolchainPrefix;
default: default:
return Unknown; return Unknown;
@@ -207,6 +215,8 @@ QLatin1String AndroidConfig::toolsPrefix(const Abi &abi)
return X86_64ToolsPrefix; return X86_64ToolsPrefix;
return X86ToolsPrefix; return X86ToolsPrefix;
case Abi::MipsArchitecture: case Abi::MipsArchitecture:
if (abi.wordWidth() == 64)
return Mips64ToolsPrefix;
return MipsToolsPrefix; return MipsToolsPrefix;
default: default:
return Unknown; return Unknown;
@@ -225,6 +235,8 @@ QLatin1String AndroidConfig::displayName(const Abi &abi)
return X86_64ToolsDisplayName; return X86_64ToolsDisplayName;
return X86ToolsDisplayName; return X86ToolsDisplayName;
case Abi::MipsArchitecture: case Abi::MipsArchitecture:
if (abi.wordWidth() == 64)
return Mips64ToolsDisplayName;
return MipsToolsDisplayName; return MipsToolsDisplayName;
default: default:
return Unknown; return Unknown;

View File

@@ -311,7 +311,7 @@ QList<AndroidToolChainFactory::AndroidToolChainInformation> AndroidToolChainFact
ati.version = fileName.mid(idx + 1); ati.version = fileName.mid(idx + 1);
QString platform = fileName.left(idx); QString platform = fileName.left(idx);
ati.abi = AndroidConfig::abiForToolChainPrefix(platform); ati.abi = AndroidConfig::abiForToolChainPrefix(platform);
if (ati.abi.architecture() == Abi::UnknownArchitecture) // e.g. mipsel which is not yet supported if (ati.abi.architecture() == Abi::UnknownArchitecture)
continue; continue;
ati.compilerCommand = AndroidConfigurations::currentConfig().gccPath(ati.abi, lang, ati.version); ati.compilerCommand = AndroidConfigurations::currentConfig().gccPath(ati.abi, lang, ati.version);
result.append(ati); result.append(ati);
@@ -399,7 +399,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
QString version = fileName.mid(idx + 1); QString version = fileName.mid(idx + 1);
QString platform = fileName.left(idx); QString platform = fileName.left(idx);
Abi abi = AndroidConfig::abiForToolChainPrefix(platform); Abi abi = AndroidConfig::abiForToolChainPrefix(platform);
if (abi.architecture() == Abi::UnknownArchitecture) // e.g. mipsel which is not yet supported if (abi.architecture() == Abi::UnknownArchitecture)
continue; continue;
QList<AndroidToolChain *> toolChainBundle; QList<AndroidToolChain *> toolChainBundle;
for (Core::Id lang : {ProjectExplorer::Constants::CXX_LANGUAGE_ID, ProjectExplorer::Constants::C_LANGUAGE_ID}) { for (Core::Id lang : {ProjectExplorer::Constants::CXX_LANGUAGE_ID, ProjectExplorer::Constants::C_LANGUAGE_ID}) {
@@ -447,7 +447,7 @@ QList<int> AndroidToolChainFactory::newestToolChainVersionForArch(const Abi &abi
QList<int> version = versionNumberFromString(fileName.mid(idx + 1)); QList<int> version = versionNumberFromString(fileName.mid(idx + 1));
QString platform = fileName.left(idx); QString platform = fileName.left(idx);
Abi abi = AndroidConfig::abiForToolChainPrefix(platform); Abi abi = AndroidConfig::abiForToolChainPrefix(platform);
if (abi.architecture() == Abi::UnknownArchitecture) // e.g. mipsel which is not yet supported if (abi.architecture() == Abi::UnknownArchitecture)
continue; continue;
QHash<Abi, QList<int> >::const_iterator it QHash<Abi, QList<int> >::const_iterator it
= m_newestVersionForAbi.constFind(abi); = m_newestVersionForAbi.constFind(abi);

View File

@@ -1187,6 +1187,14 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor) << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
<< int(Abi::ElfFormat) << 32; << int(Abi::ElfFormat) << 32;
QTest::newRow("mips64el-linux-android") << int(Abi::MipsArchitecture)
<< int(Abi::LinuxOS) << int(Abi::AndroidLinuxFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("mips64el-unknown-linux-android") << int(Abi::MipsArchitecture)
<< int(Abi::LinuxOS) << int(Abi::AndroidLinuxFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("mips64-linux-octeon-gnu") << int(Abi::MipsArchitecture) QTest::newRow("mips64-linux-octeon-gnu") << int(Abi::MipsArchitecture)
<< int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor) << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
<< int(Abi::ElfFormat) << 64; << int(Abi::ElfFormat) << 64;

View File

@@ -1637,6 +1637,10 @@ void ProjectExplorerPlugin::testGccAbiGuessing_data()
<< QString::fromLatin1("powerpc64-suse-linux") << QString::fromLatin1("powerpc64-suse-linux")
<< QByteArray("#define __SIZEOF_SIZE_T__ 8\n") << QByteArray("#define __SIZEOF_SIZE_T__ 8\n")
<< QStringList({"ppc-linux-generic-elf-64bit"}); << QStringList({"ppc-linux-generic-elf-64bit"});
QTest::newRow("Linux 11 (64bit mips)")
<< QString::fromLatin1("mips64el-linux-uclibc")
<< QByteArray("#define __SIZEOF_SIZE_T__ 8")
<< QStringList({"mips-linux-generic-elf-64bit"});
QTest::newRow("Mingw 1 (32bit)") QTest::newRow("Mingw 1 (32bit)")
<< QString::fromLatin1("i686-w64-mingw32") << QString::fromLatin1("i686-w64-mingw32")