Qnx: Use new AspectContainer base in QnxToolChain

Change-Id: I185c69c41e6350993f6e953200224e78575bdb93
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2023-07-20 18:22:29 +02:00
parent df0a3e2a85
commit 5a3dc42485
3 changed files with 24 additions and 75 deletions

View File

@@ -238,8 +238,8 @@ Toolchains QnxConfiguration::createToolChains(const QnxTarget &target)
toolChain->setDisplayName(Tr::tr("QCC for %1 (%2)")
.arg(m_configName)
.arg(target.shortDescription()));
toolChain->setSdpPath(m_envFile.parentDir());
toolChain->setCpuDir(target.cpuDir());
toolChain->sdpPath.setValue(m_envFile.parentDir());
toolChain->cpuDir.setValue(target.cpuDir());
toolChain->resetToolChain(m_qccCompiler);
ToolChainManager::registerToolChain(toolChain);

View File

@@ -10,6 +10,8 @@
#include <projectexplorer/abiwidget.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/toolchainconfigwidget.h>
#include <utils/algorithm.h>
#include <utils/pathchooser.h>
@@ -20,9 +22,6 @@ using namespace Utils;
namespace Qnx::Internal {
const char CompilerSdpPath[] = "Qnx.QnxToolChain.NDKPath";
const char CpuDirKey[] = "Qnx.QnxToolChain.CpuDir";
// QnxToolChainConfigWidget
class QnxToolChainConfigWidget : public ToolChainConfigWidget
@@ -38,10 +37,9 @@ private:
void handleSdpPathChange();
Utils::PathChooser *m_compilerCommand;
Utils::PathChooser *m_sdpPath;
PathChooser *m_compilerCommand;
PathChooser *m_sdpPath;
ProjectExplorer::AbiWidget *m_abiWidget;
};
static Abis detectTargetAbis(const FilePath &sdpPath)
@@ -104,6 +102,18 @@ QnxToolChain::QnxToolChain()
{
setOptionsReinterpreter(&reinterpretOptions);
setTypeDisplayName(Tr::tr("QCC"));
sdpPath.setSettingsKey("Qnx.QnxToolChain.NDKPath");
connect(&sdpPath, &BaseAspect::changed, this, &QnxToolChain::toolChainUpdated);
cpuDir.setSettingsKey("Qnx.QnxToolChain.CpuDir");
connect(&cpuDir, &BaseAspect::changed, this, &QnxToolChain::toolChainUpdated);
connect(this, &AspectContainer::fromMapFinished, this, [this] {
// Make the ABIs QNX specific (if they aren't already).
setSupportedAbis(QnxUtils::convertAbis(supportedAbis()));
setTargetAbi(QnxUtils::convertAbi(targetAbi()));
});
}
std::unique_ptr<ToolChainConfigWidget> QnxToolChain::createConfigurationWidget()
@@ -116,7 +126,7 @@ void QnxToolChain::addToEnvironment(Environment &env) const
if (env.expandedValueForKey("QNX_HOST").isEmpty() ||
env.expandedValueForKey("QNX_TARGET").isEmpty() ||
env.expandedValueForKey("QNX_CONFIGURATION_EXCLUSIVE").isEmpty())
setQnxEnvironment(env, QnxUtils::qnxEnvironment(m_sdpPath));
setQnxEnvironment(env, QnxUtils::qnxEnvironment(sdpPath()));
GccToolChain::addToEnvironment(env);
}
@@ -131,54 +141,6 @@ QStringList QnxToolChain::suggestedMkspecList() const
};
}
void QnxToolChain::toMap(QVariantMap &data) const
{
GccToolChain::toMap(data);
data.insert(QLatin1String(CompilerSdpPath), m_sdpPath.toSettings());
data.insert(QLatin1String(CpuDirKey), m_cpuDir);
}
bool QnxToolChain::fromMap(const QVariantMap &data)
{
if (!GccToolChain::fromMap(data))
return false;
m_sdpPath = FilePath::fromSettings(data.value(CompilerSdpPath));
m_cpuDir = data.value(QLatin1String(CpuDirKey)).toString();
// Make the ABIs QNX specific (if they aren't already).
setSupportedAbis(QnxUtils::convertAbis(supportedAbis()));
setTargetAbi(QnxUtils::convertAbi(targetAbi()));
return true;
}
FilePath QnxToolChain::sdpPath() const
{
return m_sdpPath;
}
void QnxToolChain::setSdpPath(const FilePath &sdpPath)
{
if (m_sdpPath == sdpPath)
return;
m_sdpPath = 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
{
// "unknown-qnx-gnu"is needed to get the "--target=xxx" parameter sent code model,
@@ -187,7 +149,7 @@ GccToolChain::DetectedAbisResult QnxToolChain::detectSupportedAbis() const
//
// Without it on Windows Clang defaults to a MSVC mode, which breaks with
// the QNX code, which is mostly GNU based.
return GccToolChain::DetectedAbisResult{detectTargetAbis(m_sdpPath), "unknown-qnx-gnu"};
return GccToolChain::DetectedAbisResult{detectTargetAbis(sdpPath()), "unknown-qnx-gnu"};
}
bool QnxToolChain::operator ==(const ToolChain &other) const
@@ -197,7 +159,7 @@ bool QnxToolChain::operator ==(const ToolChain &other) const
auto qnxTc = static_cast<const QnxToolChain *>(&other);
return m_sdpPath == qnxTc->m_sdpPath && m_cpuDir == qnxTc->m_cpuDir;
return sdpPath() == qnxTc->sdpPath() && cpuDir() == qnxTc->cpuDir();
}
// --------------------------------------------------------------------------
@@ -268,7 +230,7 @@ void QnxToolChainConfigWidget::applyImpl()
Q_ASSERT(tc);
QString displayName = tc->displayName();
tc->setDisplayName(displayName); // reset display name
tc->setSdpPath(m_sdpPath->filePath());
tc->sdpPath.setValue(m_sdpPath->filePath());
tc->setTargetAbi(m_abiWidget->currentAbi());
tc->resetToolChain(m_compilerCommand->filePath());
}

View File

@@ -4,10 +4,6 @@
#pragma once
#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/toolchainconfigwidget.h>
namespace ProjectExplorer { class AbiWidget; }
namespace Utils { class PathChooser; }
namespace Qnx::Internal {
@@ -21,22 +17,13 @@ public:
void addToEnvironment(Utils::Environment &env) const override;
QStringList suggestedMkspecList() const override;
void toMap(QVariantMap &data) const override;
bool fromMap(const QVariantMap &data) override;
Utils::FilePath sdpPath() const;
void setSdpPath(const Utils::FilePath &sdpPath);
QString cpuDir() const;
void setCpuDir(const QString &cpuDir);
Utils::FilePathAspect sdpPath{this};
Utils::StringAspect cpuDir{this};
bool operator ==(const ToolChain &) const override;
protected:
DetectedAbisResult detectSupportedAbis() const override;
private:
Utils::FilePath m_sdpPath;
QString m_cpuDir;
};
// --------------------------------------------------------------------------