summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2020-06-29 23:21:22 +0200
committerAlessandro Portale <alessandro.portale@qt.io>2020-06-30 12:05:56 +0000
commitc43ef81d4f59c07b580a8c95335ed9cc6fa7955d (patch)
tree2dbcd8996224eef1511a7a0b2c7c98d36a42742c
parentb684d4c827f3f2904200ea0e8e6a64c47d574983 (diff)
downloadqt-creator-c43ef81d4f59c07b580a8c95335ed9cc6fa7955d.tar.gz
McuSupport: Add MCU/Board SDK package to kits
In order to access target specific APIs/services, one needs a vendor specific SDK. In Qt for MCUs, these SDKs get integrated to the build system by a couple of environment variables. Some examples: EVKB_IMXRT1050_SDK_PATH, STM32Cube_FW_H7_SDK_PATH, STM32_CUBE_L4_INSTALL_PATH, etc. This patch adds a path chooser for MCU/Board Sdk installations to the McuSupport Kit creation settings page. The selected path is set as environoment variable in the Kits settings. A fix in parseDescriptionJson was needed to read the boardSdk/envVar. Task-number: QTCREATORBUG-24201 Change-Id: I4ceb9ce0f54e321646bbdeb256703011583feefb Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp
index a00d542027..7509fefba3 100644
--- a/src/plugins/mcusupport/mcusupportsdk.cpp
+++ b/src/plugins/mcusupport/mcusupportsdk.cpp
@@ -202,6 +202,23 @@ static McuPackage *createMcuXpressoIdePackage()
return result;
}
+static McuPackage *createBoardSdkPackage(const QString &envVar)
+{
+ const QString envVarPrefix = envVar.chopped(strlen("_SDK_PATH"));
+
+ const QString defaultPath =
+ qEnvironmentVariableIsSet(envVar.toLatin1()) ?
+ qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath();
+
+ auto result = new McuPackage(
+ QString::fromLatin1("MCU SDK (%1)").arg(envVarPrefix),
+ defaultPath,
+ {},
+ envVar);
+ result->setEnvironmentVariableName(envVar);
+ return result;
+}
+
static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar)
{
const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR"));
@@ -246,6 +263,7 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
{{"Renesas"}, createRGLPackage()}
};
+ QHash<QString, McuPackage *> boardSdkPkgs;
QHash<QString, McuPackage *> freeRTOSPkgs;
QVector<McuTarget *> mcuTargets;
@@ -262,6 +280,13 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
QVector<McuPackage*> required3rdPartyPkgs = {
vendorPkgs.value(desc.platformVendor), tcPkg
};
+ if (!desc.boardSdkEnvVar.isEmpty()) {
+ if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) {
+ auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar);
+ boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
+ }
+ required3rdPartyPkgs.append(boardSdkPkgs.value(desc.boardSdkEnvVar));
+ }
if (os == McuTarget::OS::FreeRTOS) {
if (desc.freeRTOSEnvVar.isEmpty()) {
continue;
@@ -286,6 +311,7 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
packages->append(Utils::transform<QVector<McuPackage *> >(
tcPkgs.values(), [&](McuToolChainPackage *tcPkg) { return tcPkg; }));
packages->append(vendorPkgs.values().toVector());
+ packages->append(boardSdkPkgs.values().toVector());
packages->append(freeRTOSPkgs.values().toVector());
return mcuTargets;
@@ -328,7 +354,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data)
target.value("platformVendor").toString(),
colorDepthsVector,
toolchain.value("id").toString(),
- boardSdk.value("boardSdkEnvVar").toString(),
+ boardSdk.value("envVar").toString(),
freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information
};
}