forked from qt-creator/qt-creator
McuSupport: Make hardcoded target list "semi data-driven"
This change pushes the hard-coded list a bit towards a "data-driven" approach. That way, the planned switch to the .json files based apporach (see UL-2012) becomes less of a change. Some target entries are added to match the current target list in Qt for MCUs packages. If we don't manage to get the .json-based target listing in place, this could even serve as fall-back. Task-number: UL-2012 Change-Id: If39e5d581ac19468b6f52ed221ec2d39bfab9f80 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -334,16 +334,22 @@ McuSupportOptions::McuSupportOptions(QObject *parent)
|
|||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, qtForMCUsSdkPackage(Sdk::createQtForMCUsPackage())
|
, qtForMCUsSdkPackage(Sdk::createQtForMCUsPackage())
|
||||||
{
|
{
|
||||||
Sdk::hardcodedTargetsAndPackages(qtForMCUsSdkPackage, &packages, &mcuTargets);
|
connect(qtForMCUsSdkPackage, &McuPackage::changed,
|
||||||
|
this, &McuSupportOptions::populatePackagesAndTargets);
|
||||||
packages.append(qtForMCUsSdkPackage);
|
|
||||||
for (auto package : packages)
|
|
||||||
connect(package, &McuPackage::changed, [this](){
|
|
||||||
emit changed();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
McuSupportOptions::~McuSupportOptions()
|
McuSupportOptions::~McuSupportOptions()
|
||||||
|
{
|
||||||
|
deletePackagesAndTargets();
|
||||||
|
delete qtForMCUsSdkPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void McuSupportOptions::populatePackagesAndTargets()
|
||||||
|
{
|
||||||
|
setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void McuSupportOptions::deletePackagesAndTargets()
|
||||||
{
|
{
|
||||||
qDeleteAll(packages);
|
qDeleteAll(packages);
|
||||||
packages.clear();
|
packages.clear();
|
||||||
@@ -351,6 +357,19 @@ McuSupportOptions::~McuSupportOptions()
|
|||||||
mcuTargets.clear();
|
mcuTargets.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void McuSupportOptions::setQulDir(const Utils::FilePath &dir)
|
||||||
|
{
|
||||||
|
deletePackagesAndTargets();
|
||||||
|
Sdk::hardcodedTargetsAndPackages(dir, &packages, &mcuTargets);
|
||||||
|
//packages.append(qtForMCUsSdkPackage);
|
||||||
|
for (auto package : packages) {
|
||||||
|
connect(package, &McuPackage::changed, [this](){
|
||||||
|
emit changed();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
|
||||||
static bool mcuTargetIsDesktop(const McuTarget* mcuTarget)
|
static bool mcuTargetIsDesktop(const McuTarget* mcuTarget)
|
||||||
{
|
{
|
||||||
return mcuTarget->qulPlatform() == "Qt";
|
return mcuTarget->qulPlatform() == "Qt";
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class Id;
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
class FilePath;
|
||||||
class PathChooser;
|
class PathChooser;
|
||||||
class InfoLabel;
|
class InfoLabel;
|
||||||
}
|
}
|
||||||
@@ -158,10 +159,16 @@ public:
|
|||||||
QVector<McuTarget*> mcuTargets;
|
QVector<McuTarget*> mcuTargets;
|
||||||
McuPackage *qtForMCUsSdkPackage = nullptr;
|
McuPackage *qtForMCUsSdkPackage = nullptr;
|
||||||
|
|
||||||
|
void setQulDir(const Utils::FilePath &dir);
|
||||||
|
|
||||||
QString kitName(const McuTarget* mcuTarget) const;
|
QString kitName(const McuTarget* mcuTarget) const;
|
||||||
|
|
||||||
QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTargt);
|
QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTargt);
|
||||||
ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget);
|
ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget);
|
||||||
|
void populatePackagesAndTargets();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void deletePackagesAndTargets();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void changed();
|
void changed();
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void apply() final;
|
void apply() final;
|
||||||
|
|
||||||
|
void populateMcuTargetsComboBox();
|
||||||
void showEvent(QShowEvent *event) final;
|
void showEvent(QShowEvent *event) final;
|
||||||
|
|
||||||
QString m_armGccPath;
|
QString m_armGccPath;
|
||||||
@@ -108,14 +109,12 @@ McuSupportOptionsWidget::McuSupportOptionsWidget()
|
|||||||
m_mcuTargetsGroupBox->setFlat(true);
|
m_mcuTargetsGroupBox->setFlat(true);
|
||||||
mainLayout->addWidget(m_mcuTargetsGroupBox);
|
mainLayout->addWidget(m_mcuTargetsGroupBox);
|
||||||
m_mcuTargetsComboBox = new QComboBox;
|
m_mcuTargetsComboBox = new QComboBox;
|
||||||
m_mcuTargetsComboBox->addItems(
|
|
||||||
Utils::transform<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
|
|
||||||
return m_options.kitName(t);
|
|
||||||
}));
|
|
||||||
auto layout = new QVBoxLayout(m_mcuTargetsGroupBox);
|
auto layout = new QVBoxLayout(m_mcuTargetsGroupBox);
|
||||||
layout->addWidget(m_mcuTargetsComboBox);
|
layout->addWidget(m_mcuTargetsComboBox);
|
||||||
connect(m_mcuTargetsComboBox, &QComboBox::currentTextChanged,
|
connect(m_mcuTargetsComboBox, &QComboBox::currentTextChanged,
|
||||||
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
||||||
|
connect(m_options.qtForMCUsSdkPackage, &McuPackage::changed,
|
||||||
|
this, &McuSupportOptionsWidget::populateMcuTargetsComboBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -147,15 +146,13 @@ McuSupportOptionsWidget::McuSupportOptionsWidget()
|
|||||||
void McuSupportOptionsWidget::updateStatus()
|
void McuSupportOptionsWidget::updateStatus()
|
||||||
{
|
{
|
||||||
const McuTarget *mcuTarget = currentMcuTarget();
|
const McuTarget *mcuTarget = currentMcuTarget();
|
||||||
if (!mcuTarget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
const bool cMakeAvailable = !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
|
const bool cMakeAvailable = !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
|
||||||
|
|
||||||
// Page elements
|
// Page elements
|
||||||
{
|
{
|
||||||
m_qtForMCUsSdkGroupBox->setVisible(cMakeAvailable);
|
m_qtForMCUsSdkGroupBox->setVisible(cMakeAvailable);
|
||||||
const bool ready = cMakeAvailable &&
|
const bool ready = cMakeAvailable && mcuTarget &&
|
||||||
m_options.qtForMCUsSdkPackage->status() == McuPackage::ValidPackage;
|
m_options.qtForMCUsSdkPackage->status() == McuPackage::ValidPackage;
|
||||||
m_mcuTargetsGroupBox->setVisible(ready);
|
m_mcuTargetsGroupBox->setVisible(ready);
|
||||||
m_packagesGroupBox->setVisible(ready && !mcuTarget->packages().isEmpty());
|
m_packagesGroupBox->setVisible(ready && !mcuTarget->packages().isEmpty());
|
||||||
@@ -163,7 +160,7 @@ void McuSupportOptionsWidget::updateStatus()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Kit creation status
|
// Kit creation status
|
||||||
{
|
if (mcuTarget) {
|
||||||
const bool mcuTargetValid = mcuTarget->isValid();
|
const bool mcuTargetValid = mcuTarget->isValid();
|
||||||
m_kitCreationInfoLabel->setType(mcuTargetValid ? Utils::InfoLabel::Ok
|
m_kitCreationInfoLabel->setType(mcuTargetValid ? Utils::InfoLabel::Ok
|
||||||
: Utils::InfoLabel::NotOk);
|
: Utils::InfoLabel::NotOk);
|
||||||
@@ -213,13 +210,15 @@ void McuSupportOptionsWidget::showMcuTargetPackages()
|
|||||||
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
||||||
{
|
{
|
||||||
const int mcuTargetIndex = m_mcuTargetsComboBox->currentIndex();
|
const int mcuTargetIndex = m_mcuTargetsComboBox->currentIndex();
|
||||||
return m_options.mcuTargets.isEmpty() ? nullptr : m_options.mcuTargets.at(mcuTargetIndex);
|
return (mcuTargetIndex == -1 || m_options.mcuTargets.isEmpty())
|
||||||
|
? nullptr
|
||||||
|
: m_options.mcuTargets.at(mcuTargetIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuSupportOptionsWidget::showEvent(QShowEvent *event)
|
void McuSupportOptionsWidget::showEvent(QShowEvent *event)
|
||||||
{
|
{
|
||||||
Q_UNUSED(event)
|
Q_UNUSED(event)
|
||||||
updateStatus();
|
populateMcuTargetsComboBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuSupportOptionsWidget::apply()
|
void McuSupportOptionsWidget::apply()
|
||||||
@@ -241,6 +240,17 @@ void McuSupportOptionsWidget::apply()
|
|||||||
m_options.newKit(mcuTarget);
|
m_options.newKit(mcuTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void McuSupportOptionsWidget::populateMcuTargetsComboBox()
|
||||||
|
{
|
||||||
|
m_options.populatePackagesAndTargets();
|
||||||
|
m_mcuTargetsComboBox->clear();
|
||||||
|
m_mcuTargetsComboBox->addItems(
|
||||||
|
Utils::transform<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
|
||||||
|
return m_options.kitName(t);
|
||||||
|
}));
|
||||||
|
updateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
McuSupportOptionsPage::McuSupportOptionsPage()
|
McuSupportOptionsPage::McuSupportOptionsPage()
|
||||||
{
|
{
|
||||||
setId(Core::Id(Constants::SETTINGS_ID));
|
setId(Core::Id(Constants::SETTINGS_ID));
|
||||||
|
|||||||
@@ -158,8 +158,8 @@ static McuPackage *createSeggerJLinkPackage()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage *> *packages,
|
||||||
QVector<McuPackage *> *packages, QVector<McuTarget *> *mcuTargets)
|
QVector<McuTarget *> *mcuTargets)
|
||||||
{
|
{
|
||||||
McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage();
|
McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage();
|
||||||
McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage();
|
McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage();
|
||||||
@@ -171,6 +171,8 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
|||||||
armGccPackage, stm32CubeProgrammerPackage};
|
armGccPackage, stm32CubeProgrammerPackage};
|
||||||
QVector<McuPackage*> nxpEvalPackages = {
|
QVector<McuPackage*> nxpEvalPackages = {
|
||||||
armGccPackage, seggerJLinkPackage};
|
armGccPackage, seggerJLinkPackage};
|
||||||
|
QVector<McuPackage*> renesasEvalPackages = {
|
||||||
|
armGccPackage, seggerJLinkPackage};
|
||||||
QVector<McuPackage*> desktopPackages = {};
|
QVector<McuPackage*> desktopPackages = {};
|
||||||
*packages = {
|
*packages = {
|
||||||
armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
|
armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
|
||||||
@@ -179,28 +181,42 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
|||||||
const QString vendorStm = "STM";
|
const QString vendorStm = "STM";
|
||||||
const QString vendorNxp = "NXP";
|
const QString vendorNxp = "NXP";
|
||||||
const QString vendorQt = "Qt";
|
const QString vendorQt = "Qt";
|
||||||
|
const QString vendorRenesas = "Renesas";
|
||||||
|
|
||||||
// STM
|
const struct {
|
||||||
auto mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages,
|
const QString &vendor;
|
||||||
armGccPackage);
|
const QString qulPlatform;
|
||||||
mcuTarget->setColorDepth(32);
|
const QVector<McuPackage*> &packages;
|
||||||
mcuTargets->append(mcuTarget);
|
McuToolChainPackage *toolchainPackage;
|
||||||
|
const QVector<int> colorDepths;
|
||||||
|
} targets[] = {
|
||||||
|
{vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage, {16}},
|
||||||
|
{vendorNxp, "MIMXRT1064-EVK", nxpEvalPackages, armGccPackage, {16}},
|
||||||
|
{vendorQt, "Qt", desktopPackages, nullptr, {32}},
|
||||||
|
{vendorRenesas, "RH850-D1M1A", renesasEvalPackages, armGccPackage, {32}},
|
||||||
|
{vendorStm, "STM32F469I-DISCOVERY", stmEvalPackages, armGccPackage, {24}},
|
||||||
|
{vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, armGccPackage, {32, 16}},
|
||||||
|
{vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage, {32}},
|
||||||
|
{vendorStm, "STM32H750B-DISCOVERY", stmEvalPackages, armGccPackage, {32}},
|
||||||
|
{vendorStm, "STM32L4R9I-DISCOVERY", stmEvalPackages, armGccPackage, {24}},
|
||||||
|
{vendorStm, "STM32L4R9I-EVAL", stmEvalPackages, armGccPackage, {24}}
|
||||||
|
};
|
||||||
|
|
||||||
mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, armGccPackage);
|
const QString QulTargetTemplate =
|
||||||
mcuTarget->setColorDepth(16);
|
dir.toString() + "/lib/cmake/Qul/QulTargets/QulTargets_%1_%2.cmake";
|
||||||
mcuTargets->append(mcuTarget);
|
for (auto target : targets) {
|
||||||
|
for (int colorDepth : target.colorDepths) {
|
||||||
mcuTarget = new McuTarget(vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage);
|
const QString QulTarget =
|
||||||
mcuTargets->append(mcuTarget);
|
QulTargetTemplate.arg(target.qulPlatform, QString::number(colorDepth));
|
||||||
|
if (!Utils::FilePath::fromUserInput(QulTarget).exists())
|
||||||
// NXP
|
continue;
|
||||||
mcuTarget = new McuTarget(vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage);
|
auto mcuTarget = new McuTarget(target.vendor, target.qulPlatform, target.packages,
|
||||||
mcuTargets->append(mcuTarget);
|
target.toolchainPackage);
|
||||||
|
if (target.colorDepths.count() > 1)
|
||||||
// Desktop (Qt)
|
mcuTarget->setColorDepth(colorDepth);
|
||||||
mcuTarget = new McuTarget(vendorQt, "Qt", desktopPackages, nullptr);
|
mcuTargets->append(mcuTarget);
|
||||||
mcuTarget->setColorDepth(32);
|
}
|
||||||
mcuTargets->append(mcuTarget);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Sdk
|
} // namespace Sdk
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace Sdk {
|
|||||||
McuPackage *createQtForMCUsPackage();
|
McuPackage *createQtForMCUsPackage();
|
||||||
|
|
||||||
// Legacy: List of targets supported by Qt for MCUs 1.0
|
// Legacy: List of targets supported by Qt for MCUs 1.0
|
||||||
void hardcodedTargetsAndPackages(const McuPackage* const qtForMCUsSdkPackage,
|
void hardcodedTargetsAndPackages(const Utils::FilePath &qulDir,
|
||||||
QVector<McuPackage*> *packages, QVector<McuTarget*> *mcuTargets);
|
QVector<McuPackage*> *packages, QVector<McuTarget*> *mcuTargets);
|
||||||
|
|
||||||
} // namespace Sdk
|
} // namespace Sdk
|
||||||
|
|||||||
Reference in New Issue
Block a user