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)
|
||||
, qtForMCUsSdkPackage(Sdk::createQtForMCUsPackage())
|
||||
{
|
||||
Sdk::hardcodedTargetsAndPackages(qtForMCUsSdkPackage, &packages, &mcuTargets);
|
||||
|
||||
packages.append(qtForMCUsSdkPackage);
|
||||
for (auto package : packages)
|
||||
connect(package, &McuPackage::changed, [this](){
|
||||
emit changed();
|
||||
});
|
||||
connect(qtForMCUsSdkPackage, &McuPackage::changed,
|
||||
this, &McuSupportOptions::populatePackagesAndTargets);
|
||||
}
|
||||
|
||||
McuSupportOptions::~McuSupportOptions()
|
||||
{
|
||||
deletePackagesAndTargets();
|
||||
delete qtForMCUsSdkPackage;
|
||||
}
|
||||
|
||||
void McuSupportOptions::populatePackagesAndTargets()
|
||||
{
|
||||
setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path()));
|
||||
}
|
||||
|
||||
void McuSupportOptions::deletePackagesAndTargets()
|
||||
{
|
||||
qDeleteAll(packages);
|
||||
packages.clear();
|
||||
@@ -351,6 +357,19 @@ McuSupportOptions::~McuSupportOptions()
|
||||
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)
|
||||
{
|
||||
return mcuTarget->qulPlatform() == "Qt";
|
||||
|
||||
@@ -35,6 +35,7 @@ class Id;
|
||||
}
|
||||
|
||||
namespace Utils {
|
||||
class FilePath;
|
||||
class PathChooser;
|
||||
class InfoLabel;
|
||||
}
|
||||
@@ -158,10 +159,16 @@ public:
|
||||
QVector<McuTarget*> mcuTargets;
|
||||
McuPackage *qtForMCUsSdkPackage = nullptr;
|
||||
|
||||
void setQulDir(const Utils::FilePath &dir);
|
||||
|
||||
QString kitName(const McuTarget* mcuTarget) const;
|
||||
|
||||
QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTargt);
|
||||
ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget);
|
||||
void populatePackagesAndTargets();
|
||||
|
||||
private:
|
||||
void deletePackagesAndTargets();
|
||||
|
||||
signals:
|
||||
void changed();
|
||||
|
||||
@@ -62,6 +62,7 @@ public:
|
||||
private:
|
||||
void apply() final;
|
||||
|
||||
void populateMcuTargetsComboBox();
|
||||
void showEvent(QShowEvent *event) final;
|
||||
|
||||
QString m_armGccPath;
|
||||
@@ -108,14 +109,12 @@ McuSupportOptionsWidget::McuSupportOptionsWidget()
|
||||
m_mcuTargetsGroupBox->setFlat(true);
|
||||
mainLayout->addWidget(m_mcuTargetsGroupBox);
|
||||
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);
|
||||
layout->addWidget(m_mcuTargetsComboBox);
|
||||
connect(m_mcuTargetsComboBox, &QComboBox::currentTextChanged,
|
||||
this, &McuSupportOptionsWidget::showMcuTargetPackages);
|
||||
connect(m_options.qtForMCUsSdkPackage, &McuPackage::changed,
|
||||
this, &McuSupportOptionsWidget::populateMcuTargetsComboBox);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -147,15 +146,13 @@ McuSupportOptionsWidget::McuSupportOptionsWidget()
|
||||
void McuSupportOptionsWidget::updateStatus()
|
||||
{
|
||||
const McuTarget *mcuTarget = currentMcuTarget();
|
||||
if (!mcuTarget)
|
||||
return;
|
||||
|
||||
const bool cMakeAvailable = !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty();
|
||||
|
||||
// Page elements
|
||||
{
|
||||
m_qtForMCUsSdkGroupBox->setVisible(cMakeAvailable);
|
||||
const bool ready = cMakeAvailable &&
|
||||
const bool ready = cMakeAvailable && mcuTarget &&
|
||||
m_options.qtForMCUsSdkPackage->status() == McuPackage::ValidPackage;
|
||||
m_mcuTargetsGroupBox->setVisible(ready);
|
||||
m_packagesGroupBox->setVisible(ready && !mcuTarget->packages().isEmpty());
|
||||
@@ -163,7 +160,7 @@ void McuSupportOptionsWidget::updateStatus()
|
||||
}
|
||||
|
||||
// Kit creation status
|
||||
{
|
||||
if (mcuTarget) {
|
||||
const bool mcuTargetValid = mcuTarget->isValid();
|
||||
m_kitCreationInfoLabel->setType(mcuTargetValid ? Utils::InfoLabel::Ok
|
||||
: Utils::InfoLabel::NotOk);
|
||||
@@ -213,13 +210,15 @@ void McuSupportOptionsWidget::showMcuTargetPackages()
|
||||
McuTarget *McuSupportOptionsWidget::currentMcuTarget() const
|
||||
{
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
updateStatus();
|
||||
populateMcuTargetsComboBox();
|
||||
}
|
||||
|
||||
void McuSupportOptionsWidget::apply()
|
||||
@@ -241,6 +240,17 @@ void McuSupportOptionsWidget::apply()
|
||||
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()
|
||||
{
|
||||
setId(Core::Id(Constants::SETTINGS_ID));
|
||||
|
||||
@@ -158,8 +158,8 @@ static McuPackage *createSeggerJLinkPackage()
|
||||
return result;
|
||||
}
|
||||
|
||||
void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
||||
QVector<McuPackage *> *packages, QVector<McuTarget *> *mcuTargets)
|
||||
void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage *> *packages,
|
||||
QVector<McuTarget *> *mcuTargets)
|
||||
{
|
||||
McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage();
|
||||
McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage();
|
||||
@@ -171,6 +171,8 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
||||
armGccPackage, stm32CubeProgrammerPackage};
|
||||
QVector<McuPackage*> nxpEvalPackages = {
|
||||
armGccPackage, seggerJLinkPackage};
|
||||
QVector<McuPackage*> renesasEvalPackages = {
|
||||
armGccPackage, seggerJLinkPackage};
|
||||
QVector<McuPackage*> desktopPackages = {};
|
||||
*packages = {
|
||||
armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage,
|
||||
@@ -179,29 +181,43 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
|
||||
const QString vendorStm = "STM";
|
||||
const QString vendorNxp = "NXP";
|
||||
const QString vendorQt = "Qt";
|
||||
const QString vendorRenesas = "Renesas";
|
||||
|
||||
// STM
|
||||
auto mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages,
|
||||
armGccPackage);
|
||||
mcuTarget->setColorDepth(32);
|
||||
mcuTargets->append(mcuTarget);
|
||||
const struct {
|
||||
const QString &vendor;
|
||||
const QString qulPlatform;
|
||||
const QVector<McuPackage*> &packages;
|
||||
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);
|
||||
mcuTarget->setColorDepth(16);
|
||||
mcuTargets->append(mcuTarget);
|
||||
|
||||
mcuTarget = new McuTarget(vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage);
|
||||
mcuTargets->append(mcuTarget);
|
||||
|
||||
// NXP
|
||||
mcuTarget = new McuTarget(vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage);
|
||||
mcuTargets->append(mcuTarget);
|
||||
|
||||
// Desktop (Qt)
|
||||
mcuTarget = new McuTarget(vendorQt, "Qt", desktopPackages, nullptr);
|
||||
mcuTarget->setColorDepth(32);
|
||||
const QString QulTargetTemplate =
|
||||
dir.toString() + "/lib/cmake/Qul/QulTargets/QulTargets_%1_%2.cmake";
|
||||
for (auto target : targets) {
|
||||
for (int colorDepth : target.colorDepths) {
|
||||
const QString QulTarget =
|
||||
QulTargetTemplate.arg(target.qulPlatform, QString::number(colorDepth));
|
||||
if (!Utils::FilePath::fromUserInput(QulTarget).exists())
|
||||
continue;
|
||||
auto mcuTarget = new McuTarget(target.vendor, target.qulPlatform, target.packages,
|
||||
target.toolchainPackage);
|
||||
if (target.colorDepths.count() > 1)
|
||||
mcuTarget->setColorDepth(colorDepth);
|
||||
mcuTargets->append(mcuTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Sdk
|
||||
} // namespace Internal
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace Sdk {
|
||||
McuPackage *createQtForMCUsPackage();
|
||||
|
||||
// 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);
|
||||
|
||||
} // namespace Sdk
|
||||
|
||||
Reference in New Issue
Block a user