From 6a8a6d937c558066c3a1ea418d829816de88c830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Mu=C4=87ko?= Date: Fri, 12 Aug 2022 17:32:59 +0200 Subject: [PATCH] McuSupport: Create freeRTOS package from JSON MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust test JSONs. Write unit tests. Adjust existing package creation to support freeRTOS package. Example JSON: "freeRTOS": { "cmakeVar": "FREERTOS_DIR", "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", "envVar": "IMXRT1064_FREERTOS_DIR", "id": "NXP_FREERTOS_DIR", "label": "FreeRTOS SDK for MIMXRT1064-EVK", "optional": false, "setting": "FreeRTOSSourcePackage_IMXRT1064", "type": "path" } Change-Id: I25ca9f732cd3a54eebb23b73b7950e11976c0f68 Reviewed-by: Dawid Śliwa Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportsdk.cpp | 9 +- src/plugins/mcusupport/mcutargetdescription.h | 2 +- src/plugins/mcusupport/mcutargetfactory.cpp | 3 +- .../mcusupport/test/armgcc_nxp_1050_json.h | 53 +++-- .../mcusupport/test/armgcc_nxp_1064_json.h | 99 +++++++++ .../test/armgcc_stm32f769i_freertos_json.h | 20 +- .../mcusupport/test/iar_nxp_1064_json.h | 49 ++--- src/plugins/mcusupport/test/unittest.cpp | 199 +++++++++++++----- src/plugins/mcusupport/test/unittest.h | 9 +- 9 files changed, 312 insertions(+), 131 deletions(-) create mode 100644 src/plugins/mcusupport/test/armgcc_nxp_1064_json.h diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 33243d0dd47..ba0844c2415 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -692,8 +692,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data) const PackageDescription toolchainPackage = parsePackage(compiler); const PackageDescription toolchainFilePackage = parsePackage(toolchainFile); const PackageDescription boardSdkPackage{parsePackage(boardSdk)}; - const QList freeRtosEntries = parsePackages( - freeRTOS.value(CMAKE_ENTRIES).toArray()); + const PackageDescription freeRtosPackage{parsePackage(freeRTOS)}; const QVariantList toolchainVersions = toolchain.value("versions").toArray().toVariantList(); const auto toolchainVersionsList = Utils::transform(toolchainVersions, @@ -727,10 +726,8 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data) toolchainPackage, toolchainFilePackage}, boardSdkPackage, - { - freeRTOS.value("envVar").toString(), - freeRtosEntries, - }}; + {freeRTOS.value("envVar").toString(), + freeRtosPackage}}; } // https://doc.qt.io/qtcreator/creator-developing-mcu.html#supported-qt-for-mcus-sdks diff --git a/src/plugins/mcusupport/mcutargetdescription.h b/src/plugins/mcusupport/mcutargetdescription.h index 09c9d5c2cd7..07c099c7ae7 100644 --- a/src/plugins/mcusupport/mcutargetdescription.h +++ b/src/plugins/mcusupport/mcutargetdescription.h @@ -83,7 +83,7 @@ struct McuTargetDescription struct FreeRTOS { QString envVar; - QList packages; + PackageDescription package; } freeRTOS; }; diff --git a/src/plugins/mcusupport/mcutargetfactory.cpp b/src/plugins/mcusupport/mcutargetfactory.cpp index ddbc7f0c347..f96affbea05 100644 --- a/src/plugins/mcusupport/mcutargetfactory.cpp +++ b/src/plugins/mcusupport/mcutargetfactory.cpp @@ -49,7 +49,6 @@ bool isDesktopToolchain(McuToolChainPackage::ToolChainType type) || type == McuToolChainPackage::ToolChainType::GCC; } - McuPackageVersionDetector *createVersionDetection(const VersionDetection &versionDetection) { if (!versionDetection.xmlElement.isEmpty() && !versionDetection.xmlAttribute.isEmpty()) @@ -140,7 +139,7 @@ QList aggregatePackageEntries(const McuTargetDescription &de QList result; result.append(desc.platform.entries); result.append(desc.boardSdk); - result.append(desc.freeRTOS.packages); + result.append(desc.freeRTOS.package); 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 8ffa686378f..495c6f608b6 100644 --- a/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h +++ b/src/plugins/mcusupport/test/armgcc_nxp_1050_json.h @@ -86,34 +86,29 @@ constexpr auto armgcc_nxp_1050_json = R"({ "optional": false } }, - "boardSdk": { - "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", - "versionDetection" : { - "filePattern": "*_manifest_*.xml", - "xmlElement": "ksdk", - "xmlAttribute": "version", - "regex": ".*" - }, - "type": "path", - "optional": false - }, - "freeRTOS": { - "envVar": "IMXRT1050_FREERTOS_DIR", - "cmakeEntries": [ - { - "id": "NXP_FREERTOS_DIR", - "label": "FreeRTOS SDK for MIMXRT1050-EVK", - "cmakeVar": "FREERTOS_DIR", - "envVar": "IMXRT1050_FREERTOS_DIR", - "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", + "boardSdk": { + "cmakeVar": "QUL_BOARD_SDK_DIR", + "envVar": "EVKB_IMXRT1050_SDK_PATH", + "id": "NXP_SDK_DIR", + "label": "Board SDK for MIMXRT1050-EVK", + "optional": false, + "setting": "EVKB_IMXRT1050_SDK_PATH", "type": "path", - "optional": false - } - ] - } + "versionDetection": { + "filePattern": "*_manifest_*.xml", + "regex": ".*", + "xmlAttribute": "version", + "xmlElement": "ksdk" + }, + "versions": ["2.11.0"] + }, + "freeRTOS": { + "cmakeVar": "FREERTOS_DIR", + "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", + "envVar": "IMXRT1050_FREERTOS_DIR", + "label": "FreeRTOS SDK for MIMXRT1050-EVK", + "optional": false, + "setting": "FreeRTOSSourcePackage_IMXRT1050", + "type": "path" + } })"; diff --git a/src/plugins/mcusupport/test/armgcc_nxp_1064_json.h b/src/plugins/mcusupport/test/armgcc_nxp_1064_json.h new file mode 100644 index 00000000000..ffc080e9a57 --- /dev/null +++ b/src/plugins/mcusupport/test/armgcc_nxp_1064_json.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +constexpr auto armgcc_nxp_1064_json = R"( +{ + "boardSdk": { + "cmakeVar": "QUL_BOARD_SDK_DIR", + "envVar": "EVK_MIMXRT1064_SDK_PATH", + "id": "NXP_SDK_DIR", + "label": "Board SDK for MIMXRT1064-EVK", + "optional": false, + "setting": "EVK_MIMXRT1064_SDK_PATH", + "type": "path", + "versions": ["2.11.1"] + }, + "compatVersion": "1", + "freeRTOS": { + "cmakeVar": "FREERTOS_DIR", + "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", + "envVar": "IMXRT1064_FREERTOS_DIR", + "id": "NXP_FREERTOS_DIR", + "label": "FreeRTOS SDK for MIMXRT1064-EVK", + "optional": false, + "setting": "FreeRTOSSourcePackage_IMXRT1064", + "type": "path" + }, + "platform": { + "cmakeCacheEntries": [ + { + "camekVar": "Qul_ROOT", + "id": "Qul_DIR", + "label": "Qt for MCUs SDK", + "optional": false, + "type": "path" + }, + { + "camekVar": "MCUXPRESSO_IDE_PATH", + "defaultValue": { + "unix": "/usr/local/mcuxpressoide/", + "windows": "$ROOT/nxp/MCUXpressoIDE*" + }, + "id": "MCU_XPRESSO_PATH", + "label": "MCUXpresso IDE", + "optional": false, + "type": "path" + } + ], + "colorDepths": [16], + "environmentEntries": [], + "id": "MIMXRT1064-EVK-FREERTOS", + "pathEntries": [], + "vendor": "NXP" + }, + "qulVersion": "2.3.0", + "toolchain": { + "compiler": { + "camekVar": "QUL_TARGET_TOOLCHAIN_DIR", + "id": "ARMGCC_DIR", + "label": "GNU Arm Embedded Toolchain", + "optional": false, + "type": "path" + }, + "file": { + "camekVar": "CMAKE_TOOLCHAIN_FILE", + "defaultValue": "$Qul_ROOT/lib/cmake/Qul/toolchain/armgcc.cmake", + "id": "ARMGCC_CMAKE_TOOLCHAIN_FILE", + "label": "CMake Toolchain File", + "optional": false, + "type": "file", + "visible": false + }, + "id": "armgcc", + "versions": ["9.3.1"] + } +})"; diff --git a/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h b/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h index e67d40f00e7..8d53a43bf9d 100644 --- a/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h +++ b/src/plugins/mcusupport/test/armgcc_stm32f769i_freertos_json.h @@ -26,8 +26,8 @@ #pragma once constexpr auto armgcc_stm32f769i_freertos_json = R"({ - "qulVersion": "@CMAKE_PROJECT_VERSION@", - "compatVersion": "@COMPATIBILITY_VERSION@", + "qulVersion": "2.3.0", + "compatVersion": "1", "platform": { "id": "STM32F769I-DISCOVERY-FREERTOS", "vendor": "ST", @@ -106,15 +106,11 @@ constexpr auto armgcc_stm32f769i_freertos_json = R"({ }, "freeRTOS": { "envVar": "STM32F7_FREERTOS_DIR", - "cmakeEntries": [ - { - "id": "ST_FREERTOS_DIR", - "label": "FreeRTOS SDK for STM32F769I-Discovery", - "cmakeVar": "FREERTOS_DIR", - "defaultValue": "$QUL_BOARD_SDK_DIR/Middlewares/Third_Party/FreeRTOS/Source", - "type": "path", - "optional": false - } - ] + "label": "FreeRTOS SDK for STM32F769I-Discovery", + "cmakeVar": "FREERTOS_DIR", + "defaultValue": "$QUL_BOARD_SDK_DIR/Middlewares/Third_Party/FreeRTOS/Source", + "type": "path", + "setting": "FreeRTOSSourcePackage_STM32F7", + "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 be904baf203..c27bf65e028 100644 --- a/src/plugins/mcusupport/test/iar_nxp_1064_json.h +++ b/src/plugins/mcusupport/test/iar_nxp_1064_json.h @@ -29,35 +29,30 @@ constexpr auto iar_nxp_1064_json = R"({ "compatVersion": "1", "qulVersion": "2.0.0", "boardSdk": { - "cmakeVar": "QUL_BOARD_SDK_DIR", - "label": "Board SDK for MIMXRT1064-EVK", - "id": "NXP_SDK_DIR", - "optional": false, - "type": "path", - "versions": ["2.11.0"], - "versionDetection" : { - "filePattern": "*_manifest_*.xml", - "xmlElement": "ksdk", - "xmlAttribute": "version", - "regex": ".*" - }, - "envVar": "EVK_MIMXRT1064_SDK_PATH", - "setting": "EVK_MIMXRT1064_SDK_PATH" + "cmakeVar": "QUL_BOARD_SDK_DIR", + "envVar": "EVK_MIMXRT1064_SDK_PATH", + "id": "NXP_SDK_DIR", + "label": "Board SDK for MIMXRT1064-EVK", + "optional": false, + "setting": "EVK_MIMXRT1064_SDK_PATH", + "type": "path", + "versionDetection": { + "filePattern": "*_manifest_*.xml", + "regex": ".*", + "xmlAttribute": "version", + "xmlElement": "ksdk" + }, + "versions": ["2.11.0"] }, "freeRTOS": { - "cmakeEntries": [ - { - "envVar": "IMXRT1064_FREERTOS_DIR", - "cmakeVar": "FREERTOS_DIR", - "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", - "label": "FreeRTOS Sources (IMXRT1064) ", - "label": "FreeRTOS SDK for MIMXRT1064-EVK", - "id": "NXP_FREERTOS_DIR", - "optional": false, - "type": "path" - } - ], - "envVar": "IMXRT1064_FREERTOS_DIR" + "cmakeVar": "FREERTOS_DIR", + "defaultValue": "$QUL_BOARD_SDK_DIR/rtos/freertos/freertos_kernel", + "envVar": "IMXRT1064_FREERTOS_DIR", + "id": "NXP_FREERTOS_DIR", + "label": "FreeRTOS SDK for MIMXRT1064-EVK", + "optional": false, + "setting": "FreeRTOSSourcePackage_IMXRT1064", + "type": "path" }, "platform": { "cmakeEntries": [ diff --git a/src/plugins/mcusupport/test/unittest.cpp b/src/plugins/mcusupport/test/unittest.cpp index bbd90b02da2..39af2ceda7e 100644 --- a/src/plugins/mcusupport/test/unittest.cpp +++ b/src/plugins/mcusupport/test/unittest.cpp @@ -26,6 +26,7 @@ #include "unittest.h" #include "armgcc_nxp_1050_json.h" +#include "armgcc_nxp_1064_json.h" #include "armgcc_nxp_mimxrt1170_evk_freertos_json.h" #include "armgcc_stm32f769i_freertos_json.h" #include "armgcc_stm32h750b_metal_json.h" @@ -107,14 +108,17 @@ const char armGccToolchainFilePathWithVariable[]{"$Qul_ROOT/lib/cmake/Qul/toolch const char armGccVersion[]{"9.3.1"}; const char armGccNewVersion[]{"10.3.1"}; const char msvcVersion[]{"14.29"}; -const QStringList boardSdkVersions{{"2.11.0"}}; +const char boardSdkVersion[]{"2.11.0"}; +const QString boardSdkCmakeVar{Legacy::Constants::BOARD_SDK_CMAKE_VAR}; +const char boardSdkDir[]{"/opt/Qul/2.3.0/boardDir/"}; const char cmakeToolchainLabel[]{"CMake Toolchain File"}; const char fallbackDir[]{"/abc/def/fallback"}; const char freeRtosCMakeVar[]{"FREERTOS_DIR"}; -const char freeRtosDescription[]{"Freertos directory"}; const char freeRtosEnvVar[]{"EVK_MIMXRT1170_FREERTOS_PATH"}; const char freeRtosLabel[]{"FreeRTOS directory"}; const char freeRtosPath[]{"/opt/freertos/default"}; +const char freeRtosNxpPathSuffix[]{"rtos/freertos/freertos_kernel"}; +const char freeRtosStmPathSuffix[]{"/Middlewares/Third_Party/FreeRTOS/Source"}; const char freeRtosSetting[]{"Freertos"}; const char greenhillToolchainFilePath[]{"/opt/toolchain/ghs.cmake"}; const char greenhillToolchainFileDefaultPath[]{ @@ -273,17 +277,32 @@ void verifyTargetToolchains(const Targets &targets, } void verifyBoardSdk(const McuPackagePtr &boardSdk, + const QString &cmakeVariable, const QString &environmentVariable, const QStringList &versions) { QVERIFY(boardSdk); - QCOMPARE(boardSdk->cmakeVariableName(), Legacy::Constants::BOARD_SDK_CMAKE_VAR); + QCOMPARE(boardSdk->cmakeVariableName(), cmakeVariable); QCOMPARE(boardSdk->environmentVariableName(), environmentVariable); QCOMPARE(boardSdk->settingsKey(), environmentVariable); QCOMPARE(boardSdk->detectionPath().toString(), empty); QCOMPARE(boardSdk->versions(), versions); } +void verifyFreeRtosPackage(const McuPackagePtr &freeRtos, + const QString &envVar, + const FilePath &boardSdkDir, + const QString &freeRtosPath, + const QString &expectedSettingsKey) +{ + QVERIFY(freeRtos); + QCOMPARE(freeRtos->environmentVariableName(), envVar); + QCOMPARE(freeRtos->cmakeVariableName(), freeRtosCMakeVar); + QCOMPARE(freeRtos->settingsKey(), expectedSettingsKey); + QCOMPARE(freeRtos->path().cleanPath().toString(), freeRtosPath); + QVERIFY(freeRtos->path().toString().startsWith(boardSdkDir.cleanPath().toString())); +} + McuSupportTest::McuSupportTest() : targetFactory{settingsMockPtr} , compilerDescription{armGccLabel, armGccEnvVar, Legacy::Constants::TOOLCHAIN_DIR_CMAKE_VARIABLE, armGccLabel, armGccDirectorySetting, {}, {}, {}, {}, false} @@ -398,8 +417,7 @@ void McuSupportTest::test_parseCmakeEntries() { const auto description{parseDescriptionJson(iar_nxp_1064_json)}; - QVERIFY(!description.freeRTOS.packages.isEmpty()); - auto &freeRtos = description.freeRTOS.packages[0]; + auto &freeRtos = description.freeRTOS.package; QCOMPARE(freeRtos.envVar, nxp1064FreeRtosEnvVar); } @@ -607,50 +625,18 @@ void McuSupportTest::test_legacy_createPackagesWithCorrespondingSettings() QVERIFY(settings.contains(expectedSettings)); } -void McuSupportTest::test_createFreeRtosPackageWithCorrectSetting_data() -{ - QTest::addColumn("freeRtosEnvVar"); - QTest::addColumn("expectedSettingsKey"); - - QTest::newRow("nxp1050") << nxp1050FreeRtosEnvVar - << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append( - nxp1050); - QTest::newRow("nxp1064") << nxp1064FreeRtosEnvVar - << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append( - nxp1064); - QTest::newRow("nxp1170") << nxp1170FreeRtosEnvVar - << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append( - nxp1170); - QTest::newRow("stm32f7") << stm32f7FreeRtosEnvVar - << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append( - stm32f7); -} - -void McuSupportTest::test_createFreeRtosPackageWithCorrectSetting() -{ - QFETCH(QString, freeRtosEnvVar); - QFETCH(QString, expectedSettingsKey); - - McuPackagePtr package{ - Legacy::createFreeRTOSSourcesPackage(settingsMockPtr, freeRtosEnvVar, FilePath{})}; - QVERIFY(package != nullptr); - - QCOMPARE(package->settingsKey(), expectedSettingsKey); -} - void McuSupportTest::test_createTargets() { - PackageDescription packageDescription{id, + targetDescription.freeRTOS.package = {id, nxp1064FreeRtosEnvVar, freeRtosCMakeVar, freeRtosSetting, - freeRtosDescription, + freeRtosLabel, freeRtosPath, "", {}, VersionDetection{}, true}; - targetDescription.freeRTOS.packages.append(packageDescription); targetDescription.toolchain.id = armGcc; const auto [targets, packages]{targetFactory.createTargets(targetDescription, qtForMcuSdkPath)}; @@ -693,7 +679,7 @@ void McuSupportTest::test_createTargets() void McuSupportTest::test_createPackages() { - PackageDescription packageDescription{id, + targetDescription.freeRTOS.package = {id, nxp1064FreeRtosEnvVar, freeRtosCMakeVar, freeRtosLabel, @@ -703,7 +689,6 @@ void McuSupportTest::test_createPackages() {}, VersionDetection{}, true}; - targetDescription.freeRTOS.packages.append(packageDescription); const auto packages{targetFactory.createPackages(targetDescription)}; QVERIFY(!packages.empty()); @@ -937,32 +922,39 @@ void McuSupportTest::test_addToolchainFileInfoToKit() void McuSupportTest::test_legacy_createBoardSdk_data() { QTest::addColumn("json"); + QTest::addColumn("cmakeVariable"); 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; + << armgcc_nxp_1050_json << boardSdkCmakeVar << "EVKB_IMXRT1050_SDK_PATH" + << QStringList{boardSdkVersion}; + + QTest::newRow("armgcc_nxp_1064_json") << armgcc_nxp_1064_json << boardSdkCmakeVar + << "EVK_MIMXRT1064_SDK_PATH" << QStringList{"2.11.1"}; + QTest::newRow("stm32h750b") << armgcc_stm32h750b_metal_json << boardSdkCmakeVar + << "STM32Cube_FW_H7_SDK_PATH" << QStringList{"1.5.0"}; + QTest::newRow("stm32f769i") << armgcc_stm32f769i_freertos_json << boardSdkCmakeVar + << "STM32Cube_FW_F7_SDK_PATH" << QStringList{"1.16.0"}; + QTest::newRow("stm32f469i") << iar_stm32f469i_metal_json << boardSdkCmakeVar + << "STM32Cube_FW_F4_SDK_PATH" << QStringList{"1.25.0"}; + QTest::newRow("nxp1064") << iar_nxp_1064_json << boardSdkCmakeVar << "EVK_MIMXRT1064_SDK_PATH" + << QStringList{boardSdkVersion}; QTest::newRow("ghs_rh850_d1m1a_baremetal_json") - << ghs_rh850_d1m1a_baremetal_json << "RGL_DIR" << QStringList{"2.0.0a"}; + << ghs_rh850_d1m1a_baremetal_json << boardSdkCmakeVar << "RGL_DIR" << QStringList{"2.0.0a"}; } void McuSupportTest::test_legacy_createBoardSdk() { QFETCH(QString, json); + QFETCH(QString, cmakeVariable); QFETCH(QString, environmentVariable); QFETCH(QStringList, versions); McuTargetDescription target{parseDescriptionJson(json.toLocal8Bit())}; McuPackagePtr boardSdk{Legacy::createBoardSdkPackage(settingsMockPtr, target)}; - verifyBoardSdk(boardSdk, environmentVariable, versions); + verifyBoardSdk(boardSdk, cmakeVariable, environmentVariable, versions); } void McuSupportTest::test_createBoardSdk_data() @@ -973,6 +965,7 @@ void McuSupportTest::test_createBoardSdk_data() void McuSupportTest::test_createBoardSdk() { QFETCH(QString, json); + QFETCH(QString, cmakeVariable); QFETCH(QString, environmentVariable); QFETCH(QStringList, versions); @@ -980,7 +973,109 @@ void McuSupportTest::test_createBoardSdk() McuPackagePtr boardSdk{targetFactory.createPackage(target.boardSdk)}; - verifyBoardSdk(boardSdk, environmentVariable, versions); + verifyBoardSdk(boardSdk, cmakeVariable, environmentVariable, versions); +} + +void McuSupportTest::test_legacy_createFreeRtosPackage_data() +{ + QTest::addColumn("json"); + QTest::addColumn("versions"); + QTest::addColumn("expectedSettingsKey"); + QTest::addColumn("expectedPath"); + + QTest::newRow("armgcc_nxp_1050_json") + << armgcc_nxp_1050_json << QStringList{boardSdkVersion} + << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1050) + << FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix; + QTest::newRow("armgcc_nxp_1064_json") + << armgcc_nxp_1064_json << QStringList{boardSdkVersion} + << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1064) + << FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix; + QTest::newRow("iar_nxp_1064_json") + << iar_nxp_1064_json << QStringList{boardSdkVersion} + << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1064) + << FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix; + QTest::newRow("armgcc_stm32f769i_freertos_json") + << armgcc_stm32f769i_freertos_json << QStringList{"1.16.0"} + << QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(stm32f7) + << FilePath::fromUserInput(boardSdkDir) / freeRtosStmPathSuffix; +} + +void McuSupportTest::test_legacy_createFreeRtosPackage() +{ + QFETCH(QString, json); + QFETCH(QStringList, versions); + QFETCH(QString, expectedSettingsKey); + QFETCH(FilePath, expectedPath); + + McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())}; + + EXPECT_CALL(*settingsMockPtr, getPath(expectedSettingsKey, _, _)) + .WillRepeatedly(Return(FilePath::fromString(expectedPath.toUserOutput()))); + McuPackagePtr freeRtos{Legacy::createFreeRTOSSourcesPackage(settingsMockPtr, + targetDescription.freeRTOS.envVar, + FilePath{})}; + + verifyFreeRtosPackage(freeRtos, + targetDescription.freeRTOS.envVar, + boardSdkDir, + expectedPath.toUserOutput(), + expectedSettingsKey); +} + +void McuSupportTest::test_createFreeRtosPackage_data() +{ + test_legacy_createFreeRtosPackage_data(); +} + +void McuSupportTest::test_createFreeRtosPackage() +{ + QFETCH(QString, json); + QFETCH(QStringList, versions); + QFETCH(QString, expectedSettingsKey); + QFETCH(FilePath, expectedPath); + + McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())}; + + EXPECT_CALL(*settingsMockPtr, getPath(targetDescription.boardSdk.envVar, _, _)) + .WillRepeatedly(Return(FilePath::fromString(boardSdkDir))); + + auto [targets, packages] = targetFactory.createTargets(targetDescription, qtForMcuSdkPath); + + auto freeRtos = findOrDefault(packages, [](const McuPackagePtr &pkg) { + return (pkg->cmakeVariableName() == freeRtosCMakeVar); + }); + + verifyFreeRtosPackage(freeRtos, + targetDescription.freeRTOS.envVar, + boardSdkDir, + expectedPath.toUserOutput(), + expectedSettingsKey); +} + +void McuSupportTest::test_legacy_doNOTcreateFreeRtosPackageForMetalVariants_data() + +{ + QTest::addColumn("json"); + QTest::newRow("iar_stm32f469i_metal_json") << iar_stm32f469i_metal_json; + QTest::newRow("armgcc_stm32h750b_metal_json") << armgcc_stm32h750b_metal_json; + QTest::newRow("ghs_rh850_d1m1a_baremetal_json") << ghs_rh850_d1m1a_baremetal_json; + QTest::newRow("gcc_desktop_json") << gcc_desktop_json; +} + +void McuSupportTest::test_legacy_doNOTcreateFreeRtosPackageForMetalVariants() +{ + QFETCH(QString, json); + + McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())}; + QCOMPARE(targetDescription.freeRTOS.package.cmakeVar, ""); + + auto [targets, packages] = targetFactory.createTargets(targetDescription, qtForMcuSdkPath); + + auto freeRtos = findOrDefault(packages, [](const McuPackagePtr &pkg) { + return (pkg->cmakeVariableName() == freeRtosCMakeVar); + }); + QCOMPARE(freeRtos, nullptr); } void McuSupportTest::test_legacy_createQtMCUsPackage() diff --git a/src/plugins/mcusupport/test/unittest.h b/src/plugins/mcusupport/test/unittest.h index 9e2374b6949..b0f5c09f89e 100644 --- a/src/plugins/mcusupport/test/unittest.h +++ b/src/plugins/mcusupport/test/unittest.h @@ -65,8 +65,6 @@ private slots: void test_createTargetWithToolchainPackages(); void test_legacy_createQtMCUsPackage(); - void test_createFreeRtosPackageWithCorrectSetting_data(); - void test_createFreeRtosPackageWithCorrectSetting(); void test_createTargets(); void test_createPackages(); void test_legacy_createIarToolchain(); @@ -106,6 +104,13 @@ private slots: void test_createBoardSdk_data(); void test_createBoardSdk(); + void test_legacy_doNOTcreateFreeRtosPackageForMetalVariants_data(); + void test_legacy_doNOTcreateFreeRtosPackageForMetalVariants(); + void test_legacy_createFreeRtosPackage_data(); + void test_legacy_createFreeRtosPackage(); + void test_createFreeRtosPackage_data(); + void test_createFreeRtosPackage(); + void test_resolveEnvironmentVariablesInDefaultPath(); void test_resolveCmakeVariablesInDefaultPath();