aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2020-04-27 20:51:08 +0200
committerAlessandro Portale <alessandro.portale@qt.io>2020-05-06 16:36:24 +0000
commiteccf1269ac1a9ad78c4ce1eae9bb8c2931c26375 (patch)
tree3cfe4befd7afe81dd4f08842aa4b862befbc2176
parent917974346482614bf17ae80f4a66966c9b2a6700 (diff)
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 <Rainer.Keller@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--src/plugins/mcusupport/mcusupportconstants.h1
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp22
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.h12
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp23
4 files changed, 50 insertions, 8 deletions
diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h
index 30d28f44df..3d223f4809 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 d9aac20374..2ce44293b7 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<McuPackage *> &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<int>(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<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget)
@@ -620,6 +630,8 @@ QList<ProjectExplorer::Kit *> 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<int>(mcuTarget->os())
));
});
}
diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h
index 72d395090f..cdc7d3a31a 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<McuPackage *> &packages,
- const McuToolChainPackage *toolChainPackage);
+ enum class OS {
+ Desktop,
+ BareMetal,
+ FreeRTOS
+ };
+
+ McuTarget(const QString &vendor, const QString &platform, OS os,
+ const QVector<McuPackage *> &packages, const McuToolChainPackage *toolChainPackage);
QString vendor() const;
QVector<McuPackage *> 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<McuPackage*> 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 73afb438f5..f318bae324 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<McuPackage *> *packages,
QVector<McuTarget *> *mcuTargets)
{
@@ -271,12 +289,15 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage
const QString QulTargetTemplate =
dir.toString() + "/lib/cmake/Qul/QulTargets/QulTargets_%1_%2.cmake";
for (auto target : targets) {
+ const McuTarget::OS os =
+ target.toolchainPackage->type() == 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);