diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp
index 295b942c4f5376c7009fd3486a9107ad2c6c97ff..22718c63851edddd4d5b6aa84b33238c6b014abc 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 1ae34f2a7a00f1a6f6807c3a663133323ca2faa0..99a90c89a95afd466d67b0c1b7929bd3464d66af 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<Abi> 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<const QnxToolChain *>(&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 93f2c15bc60e4de1c51543058f10bc2fe2150e0b..1d930a80d3d1ad4ea81626535fd1e1fc104f6eb3 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;
 };
 
 // --------------------------------------------------------------------------