From c43ef81d4f59c07b580a8c95335ed9cc6fa7955d Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 29 Jun 2020 23:21:22 +0200 Subject: 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 --- src/plugins/mcusupport/mcusupportsdk.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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 targetsFromDescriptions(const QList boardSdkPkgs; QHash freeRTOSPkgs; QVector mcuTargets; @@ -262,6 +280,13 @@ static QVector targetsFromDescriptions(const QList 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 targetsFromDescriptions(const QListappend(Utils::transform >( 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 }; } -- cgit v1.2.3