From e8b02713b1041f127ed8a884697bd577baa0056c Mon Sep 17 00:00:00 2001 From: James McDonnell Date: Wed, 29 Mar 2017 17:32:11 -0400 Subject: [PATCH] Propagate cpuDir into QnxToolChain Add sdpPath and cpuDir comparison to QNX tool chain comparison. Ensures that QnxConfiguration created tool chains don't get removed just because they have the same ABI as another QNX configuration created tool chain. This should really be visible in the interface but that can be done later since this isn't something that can currently happen with official 6.6.0/7.0.0 SDPs. Change-Id: Ibbb6a8aa645721028d1512460e51e59633b3cedc Reviewed-by: Rafael Roquetto Reviewed-by: hjk --- src/plugins/qnx/qnxconfiguration.cpp | 1 + src/plugins/qnx/qnxtoolchain.cpp | 26 ++++++++++++++++++++++++++ src/plugins/qnx/qnxtoolchain.h | 5 +++++ 3 files changed, 32 insertions(+) diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp index 295b942c4f5..22718c63851 100644 --- a/src/plugins/qnx/qnxconfiguration.cpp +++ b/src/plugins/qnx/qnxconfiguration.cpp @@ -276,6 +276,7 @@ QnxToolChain *QnxConfiguration::createToolChain(const Target &target) .arg(displayName()) .arg(target.shortDescription())); toolChain->setSdpPath(sdpPath().toString()); + toolChain->setCpuDir(target.cpuDir()); toolChain->resetToolChain(qccCompilerPath()); ToolChainManager::registerToolChain(toolChain); return toolChain; diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 1ae34f2a7a0..99a90c89a95 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -42,6 +42,7 @@ namespace Qnx { namespace Internal { static const char CompilerSdpPath[] = "Qnx.QnxToolChain.NDKPath"; +static const char CpuDirKey[] = "Qnx.QnxToolChain.CpuDir"; static QList detectTargetAbis(const FileName &sdpPath) { @@ -146,6 +147,7 @@ QVariantMap QnxToolChain::toMap() const { QVariantMap data = GccToolChain::toMap(); data.insert(QLatin1String(CompilerSdpPath), m_sdpPath); + data.insert(QLatin1String(CpuDirKey), m_cpuDir); return data; } @@ -155,6 +157,7 @@ bool QnxToolChain::fromMap(const QVariantMap &data) return false; m_sdpPath = data.value(QLatin1String(CompilerSdpPath)).toString(); + m_cpuDir = data.value(QLatin1String(CpuDirKey)).toString(); // Make the ABIs QNX specific (if they aren't already). setSupportedAbis(QnxUtils::convertAbis(supportedAbis())); @@ -176,11 +179,34 @@ void QnxToolChain::setSdpPath(const QString &sdpPath) toolChainUpdated(); } +QString QnxToolChain::cpuDir() const +{ + return m_cpuDir; +} + +void QnxToolChain::setCpuDir(const QString &cpuDir) +{ + if (m_cpuDir == cpuDir) + return; + m_cpuDir = cpuDir; + toolChainUpdated(); +} + GccToolChain::DetectedAbisResult QnxToolChain::detectSupportedAbis() const { return detectTargetAbis(FileName::fromString(m_sdpPath)); } +bool QnxToolChain::operator ==(const ToolChain &other) const +{ + if (!GccToolChain::operator ==(other)) + return false; + + auto qnxTc = static_cast(&other); + + return m_sdpPath == qnxTc->m_sdpPath && m_cpuDir == qnxTc->m_cpuDir; +} + // -------------------------------------------------------------------------- // QnxToolChainFactory // -------------------------------------------------------------------------- diff --git a/src/plugins/qnx/qnxtoolchain.h b/src/plugins/qnx/qnxtoolchain.h index 93f2c15bc60..1d930a80d3d 100644 --- a/src/plugins/qnx/qnxtoolchain.h +++ b/src/plugins/qnx/qnxtoolchain.h @@ -49,12 +49,17 @@ public: QString sdpPath() const; void setSdpPath(const QString &sdpPath); + QString cpuDir() const; + void setCpuDir(const QString &cpuDir); + + bool operator ==(const ToolChain &) const override; protected: virtual DetectedAbisResult detectSupportedAbis() const override; private: QString m_sdpPath; + QString m_cpuDir; }; // --------------------------------------------------------------------------