forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -202,6 +202,23 @@ static McuPackage *createMcuXpressoIdePackage()
|
|||||||
return result;
|
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)
|
static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar)
|
||||||
{
|
{
|
||||||
const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR"));
|
const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR"));
|
||||||
@@ -246,6 +263,7 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
|
|||||||
{{"Renesas"}, createRGLPackage()}
|
{{"Renesas"}, createRGLPackage()}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
QHash<QString, McuPackage *> boardSdkPkgs;
|
||||||
QHash<QString, McuPackage *> freeRTOSPkgs;
|
QHash<QString, McuPackage *> freeRTOSPkgs;
|
||||||
QVector<McuTarget *> mcuTargets;
|
QVector<McuTarget *> mcuTargets;
|
||||||
|
|
||||||
@@ -262,6 +280,13 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
|
|||||||
QVector<McuPackage*> required3rdPartyPkgs = {
|
QVector<McuPackage*> required3rdPartyPkgs = {
|
||||||
vendorPkgs.value(desc.platformVendor), tcPkg
|
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 (os == McuTarget::OS::FreeRTOS) {
|
||||||
if (desc.freeRTOSEnvVar.isEmpty()) {
|
if (desc.freeRTOSEnvVar.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
@@ -286,6 +311,7 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
|
|||||||
packages->append(Utils::transform<QVector<McuPackage *> >(
|
packages->append(Utils::transform<QVector<McuPackage *> >(
|
||||||
tcPkgs.values(), [&](McuToolChainPackage *tcPkg) { return tcPkg; }));
|
tcPkgs.values(), [&](McuToolChainPackage *tcPkg) { return tcPkg; }));
|
||||||
packages->append(vendorPkgs.values().toVector());
|
packages->append(vendorPkgs.values().toVector());
|
||||||
|
packages->append(boardSdkPkgs.values().toVector());
|
||||||
packages->append(freeRTOSPkgs.values().toVector());
|
packages->append(freeRTOSPkgs.values().toVector());
|
||||||
|
|
||||||
return mcuTargets;
|
return mcuTargets;
|
||||||
@@ -328,7 +354,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data)
|
|||||||
target.value("platformVendor").toString(),
|
target.value("platformVendor").toString(),
|
||||||
colorDepthsVector,
|
colorDepthsVector,
|
||||||
toolchain.value("id").toString(),
|
toolchain.value("id").toString(),
|
||||||
boardSdk.value("boardSdkEnvVar").toString(),
|
boardSdk.value("envVar").toString(),
|
||||||
freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information
|
freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user