diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2020-06-29 23:21:22 +0200 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2020-06-30 12:05:56 +0000 |
commit | c43ef81d4f59c07b580a8c95335ed9cc6fa7955d (patch) | |
tree | 2dbcd8996224eef1511a7a0b2c7c98d36a42742c | |
parent | b684d4c827f3f2904200ea0e8e6a64c47d574983 (diff) | |
download | qt-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.cpp | 28 |
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 }; } |