From 73a0929bbab18ed724f1e348511ace27811a098f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Mu=C4=87ko?= Date: Fri, 17 Jun 2022 13:12:29 +0200 Subject: [PATCH] McuSupport: Create board sdk packages Adapt legacy implementation and pass appropriate data to new implementation in McuTargetFactory::createPackage. Change-Id: I13e0896e219cea2629e15de2a6885df457249790 Reviewed-by: Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mculegacyconstants.h | 1 + src/plugins/mcusupport/mcusupportsdk.cpp | 22 +++---- src/plugins/mcusupport/mcutargetdescription.h | 9 +-- src/plugins/mcusupport/mcutargetfactory.cpp | 2 +- .../mcusupport/test/armgcc_nxp_1050_json.h | 25 +++----- .../test/armgcc_stm32f769i_freertos_json.h | 15 ++--- .../test/armgcc_stm32h750b_metal_json.h | 15 ++--- .../test/ghs_rh850_d1m1a_baremetal_json.h | 21 +++---- .../mcusupport/test/iar_nxp_1064_json.h | 18 +++--- .../test/iar_stm32f469i_metal_json.h | 19 +++--- src/plugins/mcusupport/test/unittest.cpp | 63 ++++++++++++++++++- src/plugins/mcusupport/test/unittest.h | 5 ++ 12 files changed, 119 insertions(+), 96 deletions(-) diff --git a/src/plugins/mcusupport/mculegacyconstants.h b/src/plugins/mcusupport/mculegacyconstants.h index 945996acc23..503f30ee75d 100644 --- a/src/plugins/mcusupport/mculegacyconstants.h +++ b/src/plugins/mcusupport/mculegacyconstants.h @@ -29,5 +29,6 @@ namespace McuSupport::Constants { const char QUL_TOOLCHAIN_CMAKE_DIR[] = "lib/cmake/Qul/toolchain/"; const char QUL_ENV_VAR[] = "Qul_ROOT"; +const char BOARD_SDK_CMAKE_VAR[] = "QUL_BOARD_SDK_DIR"; } // namespace McuSupport::Constants diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index ab9d1655e98..b81289b1033 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -120,8 +120,7 @@ McuPackagePtr createBoardSdkPackage(const SettingsHandler::Ptr &settingsHandler, const QString sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar; return QString{"MCU SDK (%1)"}.arg(sdkName); }; - const QString sdkName = desc.boardSdk.name.isEmpty() ? generateSdkName(desc.boardSdk.envVar) - : desc.boardSdk.name; + const QString sdkName = generateSdkName(desc.boardSdk.envVar); const FilePath defaultPath = [&] { const auto envVar = desc.boardSdk.envVar.toLatin1(); @@ -141,10 +140,10 @@ McuPackagePtr createBoardSdkPackage(const SettingsHandler::Ptr &settingsHandler, return McuPackagePtr{new McuPackage(settingsHandler, sdkName, defaultPath, - {}, // detection path - desc.boardSdk.envVar, // settings key - "QUL_BOARD_SDK_DIR", // cmake var - desc.boardSdk.envVar, // env var + {}, // detection path + desc.boardSdk.envVar, // settings key + Constants::BOARD_SDK_CMAKE_VAR, // cmake var + desc.boardSdk.envVar, // env var desc.boardSdk.versions, {}, // download URL versionDetector)}; @@ -625,8 +624,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data) const PackageDescription toolchainPackage = parsePackage(compiler); const PackageDescription toolchainFilePackage = parsePackage(toolchainFile); - const QList boardSDKEntries = parsePackages( - boardSdk.value(CMAKE_ENTRIES).toArray()); + const PackageDescription boardSdkPackage{parsePackage(boardSdk)}; const QList freeRtosEntries = parsePackages( freeRTOS.value(CMAKE_ENTRIES).toArray()); @@ -662,13 +660,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data) toolchainVersionsList, toolchainPackage, toolchainFilePackage}, - { - boardSdk.value("name").toString(), - FilePath::fromString(boardSdk.value("defaultPath").toString()), - boardSdk.value("envVar").toString(), - boardSdkVersionsList, - boardSDKEntries, - }, + boardSdkPackage, { freeRTOS.value("envVar").toString(), FilePath::fromString(freeRTOS.value("boardSdkSubDir").toString()), diff --git a/src/plugins/mcusupport/mcutargetdescription.h b/src/plugins/mcusupport/mcutargetdescription.h index 2a7c3fbd006..f169c5366cc 100644 --- a/src/plugins/mcusupport/mcutargetdescription.h +++ b/src/plugins/mcusupport/mcutargetdescription.h @@ -67,14 +67,7 @@ struct McuTargetDescription PackageDescription compiler; PackageDescription file; } toolchain; - struct BoardSdk - { - QString name; - Utils::FilePath defaultPath; - QString envVar; - QStringList versions; - QList packages; - } boardSdk; + PackageDescription boardSdk; struct FreeRTOS { QString envVar; diff --git a/src/plugins/mcusupport/mcutargetfactory.cpp b/src/plugins/mcusupport/mcutargetfactory.cpp index 143b4785ac2..1f6868274d0 100644 --- a/src/plugins/mcusupport/mcutargetfactory.cpp +++ b/src/plugins/mcusupport/mcutargetfactory.cpp @@ -97,7 +97,7 @@ QPair McuTargetFactory::createTargets(const McuTargetDescript QList aggregatePackageEntries(const McuTargetDescription &desc) { QList result; - result.append(desc.boardSdk.packages); + result.append(desc.boardSdk); result.append(desc.freeRTOS.packages); return result; } diff --git a/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h b/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h index a557e664512..8f2de3c6a7b 100644 --- a/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h +++ b/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h @@ -85,23 +85,14 @@ constexpr auto armgcc_nxp_1050_json = R"({ }, "boardSdk": { "envVar": "EVKB_IMXRT1050_SDK_PATH", - "versions": [ - "2.11.0" - ], - "cmakeEntries": [ - { - "id": "NXP_SDK_DIR", - "label": "Board SDK for MIMXRT1050-EVK", - "cmakeVar": "QUL_BOARD_SDK_DIR", - "envVar": "EVKB_IMXRT1050_SDK_PATH", - "setting": "EVKB_IMXRT1050_SDK_PATH", - "versions": [ - "2.11.0" - ], - "type": "path", - "optional": false - } - ] + "versions": [ "2.11.0" ], + "id": "NXP_SDK_DIR", + "label": "Board SDK for MIMXRT1050-EVK", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "envVar": "EVKB_IMXRT1050_SDK_PATH", + "setting": "EVKB_IMXRT1050_SDK_PATH", + "type": "path", + "optional": false }, "freeRTOS": { "envVar": "IMXRT1050_FREERTOS_DIR", diff --git a/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h b/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h index 276398aa5d9..b5a58c53be3 100644 --- a/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h +++ b/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h @@ -85,18 +85,15 @@ constexpr auto armgcc_stm32f769i_freertos_json = R"({ }, "boardSdk": { "envVar": "STM32Cube_FW_F7_SDK_PATH", + "setting": "STM32Cube_FW_F7_SDK_PATH", "versions": [ "1.16.0" ], - "cmakeEntries": [ - { - "id": "ST_SDK_DIR", - "label": "Board SDK for STM32F769I-Discovery", - "cmakeVar": "QUL_BOARD_SDK_DIR", - "type": "path", - "optional": false - } - ] + "id": "ST_SDK_DIR", + "label": "Board SDK for STM32F769I-Discovery", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "type": "path", + "optional": false }, "freeRTOS": { "envVar": "STM32F7_FREERTOS_DIR", diff --git a/src/plugins/mcusupport/test/armgcc_stm32h750b_metal_json.h b/src/plugins/mcusupport/test/armgcc_stm32h750b_metal_json.h index 03545fb83c9..b54ce148ea6 100644 --- a/src/plugins/mcusupport/test/armgcc_stm32h750b_metal_json.h +++ b/src/plugins/mcusupport/test/armgcc_stm32h750b_metal_json.h @@ -83,17 +83,14 @@ constexpr auto armgcc_stm32h750b_metal_json = R"({ }, "boardSdk": { "envVar": "STM32Cube_FW_H7_SDK_PATH", + "setting": "STM32Cube_FW_H7_SDK_PATH", "versions": [ "1.5.0" ], - "cmakeEntries": [ - { - "id": "ST_SDK_DIR", - "label": "Board SDK for STM32H750B-Discovery", - "cmakeVar": "QUL_BOARD_SDK_DIR", - "type": "path", - "optional": false - } - ] + "id": "ST_SDK_DIR", + "label": "Board SDK for STM32H750B-Discovery", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "type": "path", + "optional": false } })"; diff --git a/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h b/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h index 3a46fe8e17a..5dc2f0ce255 100644 --- a/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h +++ b/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h @@ -70,18 +70,13 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"({ }, "boardSdk": { "envVar": "RGL_DIR", - "versions": [ - "2.0.0a" - ], - "cmakeEntries": [ - { - "id": "RGL_DIR", - "description": "Renesas Graphics Library", - "cmakeVar": "QUL_BOARD_SDK_DIR", - "type": "path", - "defaultValue": "/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a", - "optional": false - } - ] + "setting": "RGL_DIR", + "versions": [ "2.0.0a" ], + "id": "RGL_DIR", + "description": "Renesas Graphics Library", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "type": "path", + "defaultValue": "/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a", + "optional": false } })"; diff --git a/src/plugins/mcusupport/test/iar_nxp_1064_json.h b/src/plugins/mcusupport/test/iar_nxp_1064_json.h index 35eb13517f3..3a7f9240408 100644 --- a/src/plugins/mcusupport/test/iar_nxp_1064_json.h +++ b/src/plugins/mcusupport/test/iar_nxp_1064_json.h @@ -29,18 +29,14 @@ constexpr auto iar_nxp_1064_json = R"({ "compatVersion": "1", "qulVersion": "2.0.0", "boardSdk": { - "cmakeEntries": [ - { - "cmakeVar": "QUL_BOARD_SDK_DIR", - "label": "Board SDK for MIMXRT1064-EVK", - "id": "NXP_SDK_DIR", - "optional": false, - "type": "path", - "versions": ["2.10.0"] - } - ], + "cmakeVar": "QUL_BOARD_SDK_DIR", + "label": "Board SDK for MIMXRT1064-EVK", + "id": "NXP_SDK_DIR", + "optional": false, + "type": "path", + "versions": ["2.11.0"], "envVar": "EVK_MIMXRT1064_SDK_PATH", - "versions": ["2.10.0"] + "setting": "EVK_MIMXRT1064_SDK_PATH" }, "freeRTOS": { "cmakeEntries": [ diff --git a/src/plugins/mcusupport/test/iar_stm32f469i_metal_json.h b/src/plugins/mcusupport/test/iar_stm32f469i_metal_json.h index 639ece61af2..8b462ef04b7 100644 --- a/src/plugins/mcusupport/test/iar_stm32f469i_metal_json.h +++ b/src/plugins/mcusupport/test/iar_stm32f469i_metal_json.h @@ -83,17 +83,12 @@ constexpr auto iar_stm32f469i_metal_json = R"({ }, "boardSdk": { "envVar": "STM32Cube_FW_F4_SDK_PATH", - "versions": [ - "1.25.0" - ], - "cmakeEntries": [ - { - "id": "ST_SDK_DIR", - "label": "Board SDK for STM32F469I-Discovery", - "cmakeVar": "QUL_BOARD_SDK_DIR", - "type": "path", - "optional": false - } - ] + "setting": "STM32Cube_FW_F4_SDK_PATH", + "versions": [ "1.25.0" ], + "id": "ST_SDK_DIR", + "label": "Board SDK for STM32F469I-Discovery", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "type": "path", + "optional": false } })"; diff --git a/src/plugins/mcusupport/test/unittest.cpp b/src/plugins/mcusupport/test/unittest.cpp index 7b49f5d1f8f..d21aeabb366 100644 --- a/src/plugins/mcusupport/test/unittest.cpp +++ b/src/plugins/mcusupport/test/unittest.cpp @@ -219,6 +219,18 @@ void verifyTargetToolchains(const Targets &targets, QCOMPARE(toolchainCompiler->versions(), versions); } +void verifyBoardSdk(const McuPackagePtr &boardSdk, + const QString &environmentVariable, + const QStringList &versions) +{ + QVERIFY(boardSdk); + QCOMPARE(boardSdk->cmakeVariableName(), Constants::BOARD_SDK_CMAKE_VAR); + QCOMPARE(boardSdk->environmentVariableName(), environmentVariable); + QCOMPARE(boardSdk->settingsKey(), environmentVariable); + QCOMPARE(boardSdk->detectionPath().toString(), empty); + QCOMPARE(boardSdk->versions(), versions); +} + McuSupportTest::McuSupportTest() : targetFactory{settingsMockPtr} , toolchainPackagePtr{new McuToolChainPackage{ @@ -267,7 +279,7 @@ void McuSupportTest::initTestCase() "2", platformDescription, Sdk::McuTargetDescription::Toolchain{}, - Sdk::McuTargetDescription::BoardSdk{}, + Sdk::PackageDescription{}, Sdk::McuTargetDescription::FreeRTOS{}, }; @@ -813,4 +825,53 @@ void McuSupportTest::test_addToolchainFileInfoToKit() QCOMPARE(cmakeConfig.valueOf(Constants::TOOLCHAIN_FILE_CMAKE_VARIABLE), armGccToolchainFilePath); } +void McuSupportTest::test_legacy_createBoardSdk_data() +{ + QTest::addColumn("json"); + QTest::addColumn("environmentVariable"); + QTest::addColumn("versions"); + + QTest::newRow("armgcc_nxp_1050_json") + << armgcc_nxp_1050_json << "EVKB_IMXRT1050_SDK_PATH" << boardSdkVersions; + QTest::newRow("stm32h750b") << armgcc_stm32h750b_metal_json << "STM32Cube_FW_H7_SDK_PATH" + << QStringList{"1.5.0"}; + QTest::newRow("stm32f769i") << armgcc_stm32f769i_freertos_json << "STM32Cube_FW_F7_SDK_PATH" + << QStringList{"1.16.0"}; + QTest::newRow("stm32f469i") << iar_stm32f469i_metal_json << "STM32Cube_FW_F4_SDK_PATH" + << QStringList{"1.25.0"}; + QTest::newRow("nxp1064") << iar_nxp_1064_json << "EVK_MIMXRT1064_SDK_PATH" << boardSdkVersions; + QTest::newRow("ghs_rh850_d1m1a_baremetal_json") + << ghs_rh850_d1m1a_baremetal_json << "RGL_DIR" << QStringList{"2.0.0a"}; +} + +void McuSupportTest::test_legacy_createBoardSdk() +{ + QFETCH(QString, json); + QFETCH(QString, environmentVariable); + QFETCH(QStringList, versions); + + Sdk::McuTargetDescription target{Sdk::parseDescriptionJson(json.toLocal8Bit())}; + McuPackagePtr boardSdk{Sdk::createBoardSdkPackage(settingsMockPtr, target)}; + + verifyBoardSdk(boardSdk, environmentVariable, versions); +} + +void McuSupportTest::test_createBoardSdk_data() +{ + test_legacy_createBoardSdk_data(); +} + +void McuSupportTest::test_createBoardSdk() +{ + QFETCH(QString, json); + QFETCH(QString, environmentVariable); + QFETCH(QStringList, versions); + + Sdk::McuTargetDescription target{Sdk::parseDescriptionJson(json.toLocal8Bit())}; + + McuPackagePtr boardSdk{targetFactory.createPackage(target.boardSdk)}; + + verifyBoardSdk(boardSdk, environmentVariable, versions); +} + } // namespace McuSupport::Internal::Test diff --git a/src/plugins/mcusupport/test/unittest.h b/src/plugins/mcusupport/test/unittest.h index a9310f87107..89ad83a51b3 100644 --- a/src/plugins/mcusupport/test/unittest.h +++ b/src/plugins/mcusupport/test/unittest.h @@ -87,6 +87,11 @@ private slots: void test_legacy_getPredefinedToolchainFilePackage(); void test_legacy_createUnsupportedToolchainFilePackage(); + void test_legacy_createBoardSdk_data(); + void test_legacy_createBoardSdk(); + void test_createBoardSdk_data(); + void test_createBoardSdk(); + private: QVersionNumber currentQulVersion{2, 0}; PackageMock *freeRtosPackage{new PackageMock};