From 3158c125c1cc83798b4d71f64322f2aa7dc3658d Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Wed, 24 May 2017 14:14:39 -0700 Subject: [PATCH] Recognize mips64 toolchains from the Android NDK Adapt a couple mips64-related tests at the same time. Change-Id: I9313419cfe561c7e949f343d2008f7b370ad2b39 Reviewed-by: Tobias Hunger --- src/plugins/android/androidconfigurations.cpp | 12 ++++++++++++ src/plugins/android/androidtoolchain.cpp | 6 +++--- src/plugins/projectexplorer/abi.cpp | 8 ++++++++ src/plugins/projectexplorer/gcctoolchain.cpp | 4 ++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 0aa9b46740b..be5f6df9619 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -100,18 +100,21 @@ namespace { const QLatin1String ArmToolchainPrefix("arm-linux-androideabi"); const QLatin1String X86ToolchainPrefix("x86"); const QLatin1String MipsToolchainPrefix("mipsel-linux-android"); + const QLatin1String Mips64ToolchainPrefix("mips64el-linux-android"); const QLatin1String AArch64ToolchainPrefix("aarch64-linux-android"); const QLatin1String X86_64ToolchainPrefix("x86_64"); const QLatin1String ArmToolsPrefix("arm-linux-androideabi"); const QLatin1String X86ToolsPrefix("i686-linux-android"); const QLatin1String MipsToolsPrefix("mipsel-linux-android"); + const QLatin1String Mips64ToolsPrefix("mips64el-linux-android"); const QLatin1String AArch64ToolsPrefix("aarch64-linux-android"); const QLatin1String X86_64ToolsPrefix("x86_64-linux-android"); const QLatin1String ArmToolsDisplayName("arm"); const QLatin1String X86ToolsDisplayName("i686"); const QLatin1String MipsToolsDisplayName("mipsel"); + const QLatin1String Mips64ToolsDisplayName("mips64el"); const QLatin1String AArch64ToolsDisplayName("aarch64"); const QLatin1String X86_64ToolsDisplayName("x86_64"); @@ -172,6 +175,9 @@ Abi AndroidConfig::abiForToolChainPrefix(const QString &toolchainPrefix) } else if (toolchainPrefix == X86_64ToolchainPrefix) { arch = Abi::X86Architecture; wordWidth = 64; + } else if (toolchainPrefix == Mips64ToolchainPrefix) { + arch = Abi::MipsArchitecture; + wordWidth = 64; } return Abi(arch, Abi::LinuxOS, Abi::AndroidLinuxFlavor, Abi::ElfFormat, wordWidth); @@ -189,6 +195,8 @@ QLatin1String AndroidConfig::toolchainPrefix(const Abi &abi) return X86_64ToolchainPrefix; return X86ToolchainPrefix; case Abi::MipsArchitecture: + if (abi.wordWidth() == 64) + return Mips64ToolchainPrefix; return MipsToolchainPrefix; default: return Unknown; @@ -207,6 +215,8 @@ QLatin1String AndroidConfig::toolsPrefix(const Abi &abi) return X86_64ToolsPrefix; return X86ToolsPrefix; case Abi::MipsArchitecture: + if (abi.wordWidth() == 64) + return Mips64ToolsPrefix; return MipsToolsPrefix; default: return Unknown; @@ -225,6 +235,8 @@ QLatin1String AndroidConfig::displayName(const Abi &abi) return X86_64ToolsDisplayName; return X86ToolsDisplayName; case Abi::MipsArchitecture: + if (abi.wordWidth() == 64) + return Mips64ToolsDisplayName; return MipsToolsDisplayName; default: return Unknown; diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 0f8defe6d1b..c8223dd81a9 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -311,7 +311,7 @@ QList AndroidToolChainFact ati.version = fileName.mid(idx + 1); QString platform = fileName.left(idx); 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; ati.compilerCommand = AndroidConfigurations::currentConfig().gccPath(ati.abi, lang, ati.version); result.append(ati); @@ -399,7 +399,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath, QString version = fileName.mid(idx + 1); QString platform = fileName.left(idx); Abi abi = AndroidConfig::abiForToolChainPrefix(platform); - if (abi.architecture() == Abi::UnknownArchitecture) // e.g. mipsel which is not yet supported + if (abi.architecture() == Abi::UnknownArchitecture) continue; QList toolChainBundle; for (Core::Id lang : {ProjectExplorer::Constants::CXX_LANGUAGE_ID, ProjectExplorer::Constants::C_LANGUAGE_ID}) { @@ -447,7 +447,7 @@ QList AndroidToolChainFactory::newestToolChainVersionForArch(const Abi &abi QList version = versionNumberFromString(fileName.mid(idx + 1)); QString platform = fileName.left(idx); Abi abi = AndroidConfig::abiForToolChainPrefix(platform); - if (abi.architecture() == Abi::UnknownArchitecture) // e.g. mipsel which is not yet supported + if (abi.architecture() == Abi::UnknownArchitecture) continue; QHash >::const_iterator it = m_newestVersionForAbi.constFind(abi); diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index 070bea6bf3b..4a99590d824 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -1187,6 +1187,14 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data() << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor) << 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) << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor) << int(Abi::ElfFormat) << 64; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 36cab0f8ee5..9240aa7563f 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1637,6 +1637,10 @@ void ProjectExplorerPlugin::testGccAbiGuessing_data() << QString::fromLatin1("powerpc64-suse-linux") << QByteArray("#define __SIZEOF_SIZE_T__ 8\n") << 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)") << QString::fromLatin1("i686-w64-mingw32")