From eccf1269ac1a9ad78c4ce1eae9bb8c2931c26375 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 27 Apr 2020 20:51:08 +0200 Subject: McuSupport: Add support for creating FreeRTOS kits Besides Baremetal, Qt for MCUs also supports FreeRTOS for a few targets. This change: - shows the FreeRTOS source path chooser - set the FreeRTOS source path as kit environment variable - sets OS=FreeRTOS in the kit CMake configuration and kit meta data Task-number: QTCREATORBUG-23938 Change-Id: I69cbd4f9b6b4a842788a8dad57905ef517b8b1d5 Reviewed-by: Rainer Keller Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportconstants.h | 1 + src/plugins/mcusupport/mcusupportoptions.cpp | 22 +++++++++++++++++----- src/plugins/mcusupport/mcusupportoptions.h | 12 ++++++++++-- src/plugins/mcusupport/mcusupportsdk.cpp | 23 ++++++++++++++++++++++- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 30d28f44df4..3d223f48094 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -38,6 +38,7 @@ const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char KIT_MCUTARGET_SDKVERSION_KEY[] = "McuSupport.McuTargetSdkVersion"; const char KIT_MCUTARGET_KITVERSION_KEY[] = "McuSupport.McuTargetKitVersion"; const char KIT_MCUTARGET_COLORDEPTH_KEY[] = "McuSupport.McuTargetColorDepth"; +const char KIT_MCUTARGET_OS_KEY[] = "McuSupport.McuTargetOs"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index d9aac20374a..2ce44293b72 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,7 +61,7 @@ namespace McuSupport { namespace Internal { -static const int KIT_VERSION = 2; // Bumps up whenever details in Kit creation change +static const int KIT_VERSION = 3; // Bumps up whenever details in Kit creation change static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) { @@ -320,11 +320,12 @@ QVariant McuToolChainPackage::debuggerId() const return debuggerId; } -McuTarget::McuTarget(const QString &vendor, const QString &platform, +McuTarget::McuTarget(const QString &vendor, const QString &platform, OS os, const QVector &packages, const McuToolChainPackage *toolChainPackage) : m_vendor(vendor) , m_qulPlatform(platform) + , m_os(os) , m_packages(packages) , m_toolChainPackage(toolChainPackage) { @@ -345,6 +346,11 @@ const McuToolChainPackage *McuTarget::toolChainPackage() const return m_toolChainPackage; } +McuTarget::OS McuTarget::os() const +{ + return m_os; +} + QString McuTarget::qulPlatform() const { return m_qulPlatform; @@ -477,6 +483,7 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, k->setValue(KIT_MCUTARGET_COLORDEPTH_KEY, mcuTarget->colorDepth()); k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); + k->setValue(KIT_MCUTARGET_OS_KEY, static_cast(mcuTarget->os())); k->setAutoDetected(true); k->makeSticky(); if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) @@ -576,6 +583,8 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg (qulDir + "/lib/cmake/Qul/QulGenerators.cmake").toUtf8())); config.append(CMakeConfigItem("QUL_PLATFORM", mcuTarget->qulPlatform().toUtf8())); + if (mcuTarget->os() == McuTarget::OS::FreeRTOS) + config.append(CMakeConfigItem("OS", "FreeRTOS")); if (mcuTarget->colorDepth() >= 0) config.append(CMakeConfigItem("QUL_COLOR_DEPTH", QString::number(mcuTarget->colorDepth()).toLatin1())); @@ -594,7 +603,8 @@ static void setKitQtVersionOptions(ProjectExplorer::Kit *k) QString McuSupportOptions::kitName(const McuTarget *mcuTarget) { - // TODO: get version from qulSdkPackage and insert into name + const QString os = QLatin1String(mcuTarget->os() + == McuTarget::OS::FreeRTOS ? " FreeRTOS" : ""); const QString colorDepth = mcuTarget->colorDepth() > 0 ? QString::fromLatin1(" %1bpp").arg(mcuTarget->colorDepth()) : ""; @@ -603,8 +613,8 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop ? "Desktop" : mcuTarget->qulPlatform(); - return QString::fromLatin1("Qt for MCUs %1 - %2%3") - .arg(supportedQulVersion().toString(), targetName, colorDepth); + return QString::fromLatin1("Qt for MCUs %1 - %2%3%4") + .arg(supportedQulVersion().toString(), targetName, os, colorDepth); } QList McuSupportOptions::existingKits(const McuTarget *mcuTarget) @@ -620,6 +630,8 @@ QList McuSupportOptions::existingKits(const McuTarget *m kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->vendor() && kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->qulPlatform() && kit->value(KIT_MCUTARGET_COLORDEPTH_KEY) == mcuTarget->colorDepth() + && kit->value(KIT_MCUTARGET_OS_KEY).toInt() + == static_cast(mcuTarget->os()) )); }); } diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 72d395090f6..cdc7d3a31a1 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -131,13 +131,20 @@ class McuTarget : public QObject Q_OBJECT public: - McuTarget(const QString &vendor, const QString &platform, const QVector &packages, - const McuToolChainPackage *toolChainPackage); + enum class OS { + Desktop, + BareMetal, + FreeRTOS + }; + + McuTarget(const QString &vendor, const QString &platform, OS os, + const QVector &packages, const McuToolChainPackage *toolChainPackage); QString vendor() const; QVector packages() const; const McuToolChainPackage *toolChainPackage() const; QString qulPlatform() const; + OS os() const; void setColorDepth(int colorDepth); int colorDepth() const; bool isValid() const; @@ -145,6 +152,7 @@ public: private: const QString m_vendor; const QString m_qulPlatform; + const OS m_os = OS::BareMetal; const QVector m_packages; const McuToolChainPackage *m_toolChainPackage; int m_colorDepth = -1; diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 73afb438f57..f318bae324f 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -220,6 +220,24 @@ static McuPackage *createMcuXpressoIdePackage() return result; } +static McuPackage *createFreeRTOSSourcesPackage(const QString &envVarPrefix) +{ + const QString envVar = envVarPrefix + "_FREERTOS_DIR"; + + const QString defaultPath = + qEnvironmentVariableIsSet(envVar.toLatin1()) ? + qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); + + auto result = new McuPackage( + QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), + defaultPath, + {}, + QString::fromLatin1("FreeRTOSSourcePackage_%1").arg(envVarPrefix)); + result->setDownloadUrl("https://freertos.org"); + result->setEnvironmentVariableName(envVar); + return result; +} + void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector *packages, QVector *mcuTargets) { @@ -271,12 +289,15 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVectortype() == McuToolChainPackage::TypeDesktop + ? McuTarget::OS::Desktop : McuTarget::OS::BareMetal; 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, + auto mcuTarget = new McuTarget(target.vendor, target.qulPlatform, os, target.packages, target.toolchainPackage); if (target.colorDepths.count() > 1) mcuTarget->setColorDepth(colorDepth); -- cgit v1.2.3