Android: create a new toolchain when missing target triple

Though it should not happen that a toolchain is missing the triple
but in case the detection fails a new toolchain shall be created and
the misbehaving toolchain should be deleted

Task-number: QTCREATORBUG-20217
Change-Id: Iaa86331730f82b8e5abd37f1184a53d1e1312979
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Vikas Pachdha
2018-04-09 13:55:12 +02:00
parent bb027e10a8
commit 56b6972994

View File

@@ -150,7 +150,8 @@ QString AndroidToolChain::typeDisplayName() const
bool AndroidToolChain::isValid() const bool AndroidToolChain::isValid() const
{ {
return GccToolChain::isValid() && targetAbi().isValid() && !m_ndkToolChainVersion.isEmpty() return GccToolChain::isValid() && targetAbi().isValid() && !m_ndkToolChainVersion.isEmpty()
&& compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation()); && compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation())
&& !originalTargetTriple().isEmpty();
} }
void AndroidToolChain::addToEnvironment(Environment &env) const void AndroidToolChain::addToEnvironment(Environment &env) const
@@ -417,6 +418,9 @@ bool AndroidToolChainFactory::versionCompareLess(const QList<int> &a, const QLis
bool AndroidToolChainFactory::versionCompareLess(QList<AndroidToolChain *> atc, bool AndroidToolChainFactory::versionCompareLess(QList<AndroidToolChain *> atc,
QList<AndroidToolChain *> btc) QList<AndroidToolChain *> btc)
{ {
if (atc.isEmpty() || btc.isEmpty())
return false;
const QList<int> a = versionNumberFromString(atc.at(0)->ndkToolChainVersion()); const QList<int> a = versionNumberFromString(atc.at(0)->ndkToolChainVersion());
const QList<int> b = versionNumberFromString(btc.at(0)->ndkToolChainVersion()); const QList<int> b = versionNumberFromString(btc.at(0)->ndkToolChainVersion());
@@ -463,7 +467,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
FileName compilerPath = AndroidConfigurations::currentConfig().gccPath(abi, lang, version); FileName compilerPath = AndroidConfigurations::currentConfig().gccPath(abi, lang, version);
AndroidToolChain *tc = findToolChain(compilerPath, lang, alreadyKnown); AndroidToolChain *tc = findToolChain(compilerPath, lang, alreadyKnown);
if (!tc) { if (!tc || tc->originalTargetTriple().isEmpty()) {
tc = new AndroidToolChain(abi, version, lang, tc = new AndroidToolChain(abi, version, lang,
ToolChain::AutoDetection); ToolChain::AutoDetection);
tc->resetToolChain(compilerPath); tc->resetToolChain(compilerPath);
@@ -473,6 +477,8 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
toolChainBundle.append(tc); toolChainBundle.append(tc);
} }
QTC_ASSERT(!toolChainBundle.isEmpty(), continue);
auto it = newestToolChainForArch.constFind(abi); auto it = newestToolChainForArch.constFind(abi);
if (it == newestToolChainForArch.constEnd()) if (it == newestToolChainForArch.constEnd())
newestToolChainForArch.insert(abi, toolChainBundle); newestToolChainForArch.insert(abi, toolChainBundle);