McuSupport: Create board sdk packages

Adapt legacy implementation and pass appropriate data
to new implementation in McuTargetFactory::createPackage.

Change-Id: I13e0896e219cea2629e15de2a6885df457249790
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Piotr Mućko
2022-06-17 13:12:29 +02:00
parent dacb4ec82d
commit 73a0929bba
12 changed files with 119 additions and 96 deletions

View File

@@ -29,5 +29,6 @@ namespace McuSupport::Constants {
const char QUL_TOOLCHAIN_CMAKE_DIR[] = "lib/cmake/Qul/toolchain/"; const char QUL_TOOLCHAIN_CMAKE_DIR[] = "lib/cmake/Qul/toolchain/";
const char QUL_ENV_VAR[] = "Qul_ROOT"; const char QUL_ENV_VAR[] = "Qul_ROOT";
const char BOARD_SDK_CMAKE_VAR[] = "QUL_BOARD_SDK_DIR";
} // namespace McuSupport::Constants } // namespace McuSupport::Constants

View File

@@ -120,8 +120,7 @@ McuPackagePtr createBoardSdkPackage(const SettingsHandler::Ptr &settingsHandler,
const QString sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar; const QString sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar;
return QString{"MCU SDK (%1)"}.arg(sdkName); return QString{"MCU SDK (%1)"}.arg(sdkName);
}; };
const QString sdkName = desc.boardSdk.name.isEmpty() ? generateSdkName(desc.boardSdk.envVar) const QString sdkName = generateSdkName(desc.boardSdk.envVar);
: desc.boardSdk.name;
const FilePath defaultPath = [&] { const FilePath defaultPath = [&] {
const auto envVar = desc.boardSdk.envVar.toLatin1(); const auto envVar = desc.boardSdk.envVar.toLatin1();
@@ -141,10 +140,10 @@ McuPackagePtr createBoardSdkPackage(const SettingsHandler::Ptr &settingsHandler,
return McuPackagePtr{new McuPackage(settingsHandler, return McuPackagePtr{new McuPackage(settingsHandler,
sdkName, sdkName,
defaultPath, defaultPath,
{}, // detection path {}, // detection path
desc.boardSdk.envVar, // settings key desc.boardSdk.envVar, // settings key
"QUL_BOARD_SDK_DIR", // cmake var Constants::BOARD_SDK_CMAKE_VAR, // cmake var
desc.boardSdk.envVar, // env var desc.boardSdk.envVar, // env var
desc.boardSdk.versions, desc.boardSdk.versions,
{}, // download URL {}, // download URL
versionDetector)}; versionDetector)};
@@ -625,8 +624,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data)
const PackageDescription toolchainPackage = parsePackage(compiler); const PackageDescription toolchainPackage = parsePackage(compiler);
const PackageDescription toolchainFilePackage = parsePackage(toolchainFile); const PackageDescription toolchainFilePackage = parsePackage(toolchainFile);
const QList<PackageDescription> boardSDKEntries = parsePackages( const PackageDescription boardSdkPackage{parsePackage(boardSdk)};
boardSdk.value(CMAKE_ENTRIES).toArray());
const QList<PackageDescription> freeRtosEntries = parsePackages( const QList<PackageDescription> freeRtosEntries = parsePackages(
freeRTOS.value(CMAKE_ENTRIES).toArray()); freeRTOS.value(CMAKE_ENTRIES).toArray());
@@ -662,13 +660,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data)
toolchainVersionsList, toolchainVersionsList,
toolchainPackage, toolchainPackage,
toolchainFilePackage}, toolchainFilePackage},
{ boardSdkPackage,
boardSdk.value("name").toString(),
FilePath::fromString(boardSdk.value("defaultPath").toString()),
boardSdk.value("envVar").toString(),
boardSdkVersionsList,
boardSDKEntries,
},
{ {
freeRTOS.value("envVar").toString(), freeRTOS.value("envVar").toString(),
FilePath::fromString(freeRTOS.value("boardSdkSubDir").toString()), FilePath::fromString(freeRTOS.value("boardSdkSubDir").toString()),

View File

@@ -67,14 +67,7 @@ struct McuTargetDescription
PackageDescription compiler; PackageDescription compiler;
PackageDescription file; PackageDescription file;
} toolchain; } toolchain;
struct BoardSdk PackageDescription boardSdk;
{
QString name;
Utils::FilePath defaultPath;
QString envVar;
QStringList versions;
QList<PackageDescription> packages;
} boardSdk;
struct FreeRTOS struct FreeRTOS
{ {
QString envVar; QString envVar;

View File

@@ -97,7 +97,7 @@ QPair<Targets, Packages> McuTargetFactory::createTargets(const McuTargetDescript
QList<PackageDescription> aggregatePackageEntries(const McuTargetDescription &desc) QList<PackageDescription> aggregatePackageEntries(const McuTargetDescription &desc)
{ {
QList<PackageDescription> result; QList<PackageDescription> result;
result.append(desc.boardSdk.packages); result.append(desc.boardSdk);
result.append(desc.freeRTOS.packages); result.append(desc.freeRTOS.packages);
return result; return result;
} }

View File

@@ -85,23 +85,14 @@ constexpr auto armgcc_nxp_1050_json = R"({
}, },
"boardSdk": { "boardSdk": {
"envVar": "EVKB_IMXRT1050_SDK_PATH", "envVar": "EVKB_IMXRT1050_SDK_PATH",
"versions": [ "versions": [ "2.11.0" ],
"2.11.0" "id": "NXP_SDK_DIR",
], "label": "Board SDK for MIMXRT1050-EVK",
"cmakeEntries": [ "cmakeVar": "QUL_BOARD_SDK_DIR",
{ "envVar": "EVKB_IMXRT1050_SDK_PATH",
"id": "NXP_SDK_DIR", "setting": "EVKB_IMXRT1050_SDK_PATH",
"label": "Board SDK for MIMXRT1050-EVK", "type": "path",
"cmakeVar": "QUL_BOARD_SDK_DIR", "optional": false
"envVar": "EVKB_IMXRT1050_SDK_PATH",
"setting": "EVKB_IMXRT1050_SDK_PATH",
"versions": [
"2.11.0"
],
"type": "path",
"optional": false
}
]
}, },
"freeRTOS": { "freeRTOS": {
"envVar": "IMXRT1050_FREERTOS_DIR", "envVar": "IMXRT1050_FREERTOS_DIR",

View File

@@ -85,18 +85,15 @@ constexpr auto armgcc_stm32f769i_freertos_json = R"({
}, },
"boardSdk": { "boardSdk": {
"envVar": "STM32Cube_FW_F7_SDK_PATH", "envVar": "STM32Cube_FW_F7_SDK_PATH",
"setting": "STM32Cube_FW_F7_SDK_PATH",
"versions": [ "versions": [
"1.16.0" "1.16.0"
], ],
"cmakeEntries": [ "id": "ST_SDK_DIR",
{ "label": "Board SDK for STM32F769I-Discovery",
"id": "ST_SDK_DIR", "cmakeVar": "QUL_BOARD_SDK_DIR",
"label": "Board SDK for STM32F769I-Discovery", "type": "path",
"cmakeVar": "QUL_BOARD_SDK_DIR", "optional": false
"type": "path",
"optional": false
}
]
}, },
"freeRTOS": { "freeRTOS": {
"envVar": "STM32F7_FREERTOS_DIR", "envVar": "STM32F7_FREERTOS_DIR",

View File

@@ -83,17 +83,14 @@ constexpr auto armgcc_stm32h750b_metal_json = R"({
}, },
"boardSdk": { "boardSdk": {
"envVar": "STM32Cube_FW_H7_SDK_PATH", "envVar": "STM32Cube_FW_H7_SDK_PATH",
"setting": "STM32Cube_FW_H7_SDK_PATH",
"versions": [ "versions": [
"1.5.0" "1.5.0"
], ],
"cmakeEntries": [ "id": "ST_SDK_DIR",
{ "label": "Board SDK for STM32H750B-Discovery",
"id": "ST_SDK_DIR", "cmakeVar": "QUL_BOARD_SDK_DIR",
"label": "Board SDK for STM32H750B-Discovery", "type": "path",
"cmakeVar": "QUL_BOARD_SDK_DIR", "optional": false
"type": "path",
"optional": false
}
]
} }
})"; })";

View File

@@ -70,18 +70,13 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"({
}, },
"boardSdk": { "boardSdk": {
"envVar": "RGL_DIR", "envVar": "RGL_DIR",
"versions": [ "setting": "RGL_DIR",
"2.0.0a" "versions": [ "2.0.0a" ],
], "id": "RGL_DIR",
"cmakeEntries": [ "description": "Renesas Graphics Library",
{ "cmakeVar": "QUL_BOARD_SDK_DIR",
"id": "RGL_DIR", "type": "path",
"description": "Renesas Graphics Library", "defaultValue": "/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a",
"cmakeVar": "QUL_BOARD_SDK_DIR", "optional": false
"type": "path",
"defaultValue": "/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a",
"optional": false
}
]
} }
})"; })";

View File

@@ -29,18 +29,14 @@ constexpr auto iar_nxp_1064_json = R"({
"compatVersion": "1", "compatVersion": "1",
"qulVersion": "2.0.0", "qulVersion": "2.0.0",
"boardSdk": { "boardSdk": {
"cmakeEntries": [ "cmakeVar": "QUL_BOARD_SDK_DIR",
{ "label": "Board SDK for MIMXRT1064-EVK",
"cmakeVar": "QUL_BOARD_SDK_DIR", "id": "NXP_SDK_DIR",
"label": "Board SDK for MIMXRT1064-EVK", "optional": false,
"id": "NXP_SDK_DIR", "type": "path",
"optional": false, "versions": ["2.11.0"],
"type": "path",
"versions": ["2.10.0"]
}
],
"envVar": "EVK_MIMXRT1064_SDK_PATH", "envVar": "EVK_MIMXRT1064_SDK_PATH",
"versions": ["2.10.0"] "setting": "EVK_MIMXRT1064_SDK_PATH"
}, },
"freeRTOS": { "freeRTOS": {
"cmakeEntries": [ "cmakeEntries": [

View File

@@ -83,17 +83,12 @@ constexpr auto iar_stm32f469i_metal_json = R"({
}, },
"boardSdk": { "boardSdk": {
"envVar": "STM32Cube_FW_F4_SDK_PATH", "envVar": "STM32Cube_FW_F4_SDK_PATH",
"versions": [ "setting": "STM32Cube_FW_F4_SDK_PATH",
"1.25.0" "versions": [ "1.25.0" ],
], "id": "ST_SDK_DIR",
"cmakeEntries": [ "label": "Board SDK for STM32F469I-Discovery",
{ "cmakeVar": "QUL_BOARD_SDK_DIR",
"id": "ST_SDK_DIR", "type": "path",
"label": "Board SDK for STM32F469I-Discovery", "optional": false
"cmakeVar": "QUL_BOARD_SDK_DIR",
"type": "path",
"optional": false
}
]
} }
})"; })";

View File

@@ -219,6 +219,18 @@ void verifyTargetToolchains(const Targets &targets,
QCOMPARE(toolchainCompiler->versions(), versions); 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() McuSupportTest::McuSupportTest()
: targetFactory{settingsMockPtr} : targetFactory{settingsMockPtr}
, toolchainPackagePtr{new McuToolChainPackage{ , toolchainPackagePtr{new McuToolChainPackage{
@@ -267,7 +279,7 @@ void McuSupportTest::initTestCase()
"2", "2",
platformDescription, platformDescription,
Sdk::McuTargetDescription::Toolchain{}, Sdk::McuTargetDescription::Toolchain{},
Sdk::McuTargetDescription::BoardSdk{}, Sdk::PackageDescription{},
Sdk::McuTargetDescription::FreeRTOS{}, Sdk::McuTargetDescription::FreeRTOS{},
}; };
@@ -813,4 +825,53 @@ void McuSupportTest::test_addToolchainFileInfoToKit()
QCOMPARE(cmakeConfig.valueOf(Constants::TOOLCHAIN_FILE_CMAKE_VARIABLE), armGccToolchainFilePath); QCOMPARE(cmakeConfig.valueOf(Constants::TOOLCHAIN_FILE_CMAKE_VARIABLE), armGccToolchainFilePath);
} }
void McuSupportTest::test_legacy_createBoardSdk_data()
{
QTest::addColumn<QString>("json");
QTest::addColumn<QString>("environmentVariable");
QTest::addColumn<QStringList>("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 } // namespace McuSupport::Internal::Test

View File

@@ -87,6 +87,11 @@ private slots:
void test_legacy_getPredefinedToolchainFilePackage(); void test_legacy_getPredefinedToolchainFilePackage();
void test_legacy_createUnsupportedToolchainFilePackage(); void test_legacy_createUnsupportedToolchainFilePackage();
void test_legacy_createBoardSdk_data();
void test_legacy_createBoardSdk();
void test_createBoardSdk_data();
void test_createBoardSdk();
private: private:
QVersionNumber currentQulVersion{2, 0}; QVersionNumber currentQulVersion{2, 0};
PackageMock *freeRtosPackage{new PackageMock}; PackageMock *freeRtosPackage{new PackageMock};