forked from qt-creator/qt-creator
McuSupport: Check FreeRTOS path for required files
It is easy to pick the wrong directory for FreeRTOS sources when configuring an MCU device. This commit adds a check that the supplied path contains tasks.c, which probably means the given directory is correct. Task-number: QTCREATORBUG-27180 Change-Id: Iff1242e8970e59bf334d50829dd1d5bdd8164d47 Reviewed-by: Yasser Grimes <yasser.grimes@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Piotr Mućko <piotr.mucko@qt.io> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -144,7 +144,7 @@ McuPackagePtr createFreeRTOSSourcesPackage(const SettingsHandler::Ptr &settingsH
|
||||
new McuPackage(settingsHandler,
|
||||
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
|
||||
defaultPath,
|
||||
{}, // detection path
|
||||
"tasks.c", // detection path
|
||||
QString{Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(envVarPrefix),
|
||||
"FREERTOS_DIR", // cmake var
|
||||
envVar, // env var
|
||||
|
||||
@@ -80,6 +80,7 @@ constexpr auto armgcc_nxp_1050_json = R"({
|
||||
"freeRTOS": {
|
||||
"cmakeVar": "FREERTOS_DIR",
|
||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||
"validation": "tasks.c",
|
||||
"envVar": "IMXRT1050_FREERTOS_DIR",
|
||||
"label": "FreeRTOS SDK for MIMXRT1050-EVK",
|
||||
"optional": false,
|
||||
|
||||
@@ -18,6 +18,7 @@ constexpr auto armgcc_nxp_1064_json = R"(
|
||||
"freeRTOS": {
|
||||
"cmakeVar": "FREERTOS_DIR",
|
||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||
"validation": "tasks.c",
|
||||
"envVar": "IMXRT1064_FREERTOS_DIR",
|
||||
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
||||
"optional": false,
|
||||
|
||||
@@ -86,6 +86,7 @@ constexpr auto armgcc_stm32f769i_freertos_json = R"({
|
||||
"label": "FreeRTOS SDK for STM32F769I-Discovery",
|
||||
"cmakeVar": "FREERTOS_DIR",
|
||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/Middlewares/Third_Party/FreeRTOS/Source",
|
||||
"validation": "tasks.c",
|
||||
"type": "path",
|
||||
"setting": "FreeRTOSSourcePackage_STM32F7",
|
||||
"optional": false
|
||||
|
||||
@@ -25,6 +25,7 @@ constexpr auto iar_nxp_1064_json = R"({
|
||||
"freeRTOS": {
|
||||
"cmakeVar": "FREERTOS_DIR",
|
||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||
"validation": "tasks.c",
|
||||
"envVar": "IMXRT1064_FREERTOS_DIR",
|
||||
"id": "NXP_FREERTOS_DIR",
|
||||
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
||||
|
||||
@@ -97,6 +97,7 @@ const char freeRtosCMakeVar[]{"FREERTOS_DIR"};
|
||||
const char freeRtosEnvVar[]{"EVK_MIMXRT1170_FREERTOS_PATH"};
|
||||
const char freeRtosLabel[]{"FreeRTOS directory"};
|
||||
const char freeRtosPath[]{"/opt/freertos/default"};
|
||||
const char freeRtosDetectionPath[]{"tasks.c"};
|
||||
const char freeRtosNxpPathSuffix[]{"rtos/freertos/freertos_kernel"};
|
||||
const char freeRtosStmPathSuffix[]{"/Middlewares/Third_Party/FreeRTOS/Source"};
|
||||
const char freeRtosSetting[]{"Freertos"};
|
||||
@@ -273,6 +274,7 @@ void verifyFreeRtosPackage(const McuPackagePtr &freeRtos,
|
||||
const QString &envVar,
|
||||
const FilePath &boardSdkDir,
|
||||
const QString &freeRtosPath,
|
||||
const QString &freeRtosDetectionPath,
|
||||
const QString &expectedSettingsKey)
|
||||
{
|
||||
QVERIFY(freeRtos);
|
||||
@@ -280,6 +282,7 @@ void verifyFreeRtosPackage(const McuPackagePtr &freeRtos,
|
||||
QCOMPARE(freeRtos->cmakeVariableName(), freeRtosCMakeVar);
|
||||
QCOMPARE(freeRtos->settingsKey(), expectedSettingsKey);
|
||||
QCOMPARE(freeRtos->path().cleanPath().toString(), freeRtosPath);
|
||||
QCOMPARE(freeRtos->detectionPath().cleanPath().toString(), freeRtosDetectionPath);
|
||||
QVERIFY(freeRtos->path().toString().startsWith(boardSdkDir.cleanPath().toString()));
|
||||
}
|
||||
|
||||
@@ -613,7 +616,7 @@ void McuSupportTest::test_createTargets()
|
||||
freeRtosSetting,
|
||||
freeRtosLabel,
|
||||
freeRtosPath,
|
||||
"",
|
||||
freeRtosDetectionPath,
|
||||
{},
|
||||
VersionDetection{},
|
||||
true};
|
||||
@@ -665,7 +668,7 @@ void McuSupportTest::test_createPackages()
|
||||
freeRtosLabel,
|
||||
freeRtosSetting,
|
||||
freeRtosPath,
|
||||
"",
|
||||
freeRtosDetectionPath,
|
||||
{},
|
||||
VersionDetection{},
|
||||
true};
|
||||
@@ -962,23 +965,28 @@ void McuSupportTest::test_legacy_createFreeRtosPackage_data()
|
||||
QTest::addColumn<QStringList>("versions");
|
||||
QTest::addColumn<QString>("expectedSettingsKey");
|
||||
QTest::addColumn<FilePath>("expectedPath");
|
||||
QTest::addColumn<FilePath>("expectedDetectionPath");
|
||||
|
||||
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;
|
||||
<< FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix
|
||||
<< FilePath::fromUserInput(freeRtosDetectionPath);
|
||||
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;
|
||||
<< FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix
|
||||
<< FilePath::fromUserInput(freeRtosDetectionPath);
|
||||
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;
|
||||
<< FilePath::fromUserInput(boardSdkDir) / freeRtosNxpPathSuffix
|
||||
<< FilePath::fromUserInput(freeRtosDetectionPath);
|
||||
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;
|
||||
<< FilePath::fromUserInput(boardSdkDir) / freeRtosStmPathSuffix
|
||||
<< FilePath::fromUserInput(freeRtosDetectionPath);
|
||||
}
|
||||
|
||||
void McuSupportTest::test_legacy_createFreeRtosPackage()
|
||||
@@ -987,6 +995,7 @@ void McuSupportTest::test_legacy_createFreeRtosPackage()
|
||||
QFETCH(QStringList, versions);
|
||||
QFETCH(QString, expectedSettingsKey);
|
||||
QFETCH(FilePath, expectedPath);
|
||||
QFETCH(FilePath, expectedDetectionPath);
|
||||
|
||||
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
||||
|
||||
@@ -1000,6 +1009,7 @@ void McuSupportTest::test_legacy_createFreeRtosPackage()
|
||||
targetDescription.freeRTOS.envVar,
|
||||
boardSdkDir,
|
||||
expectedPath.toUserOutput(),
|
||||
expectedDetectionPath.toUserOutput(),
|
||||
expectedSettingsKey);
|
||||
}
|
||||
|
||||
@@ -1014,6 +1024,7 @@ void McuSupportTest::test_createFreeRtosPackage()
|
||||
QFETCH(QStringList, versions);
|
||||
QFETCH(QString, expectedSettingsKey);
|
||||
QFETCH(FilePath, expectedPath);
|
||||
QFETCH(FilePath, expectedDetectionPath);
|
||||
|
||||
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
||||
|
||||
@@ -1030,6 +1041,7 @@ void McuSupportTest::test_createFreeRtosPackage()
|
||||
targetDescription.freeRTOS.envVar,
|
||||
boardSdkDir,
|
||||
expectedPath.toUserOutput(),
|
||||
expectedDetectionPath.toUserOutput(),
|
||||
expectedSettingsKey);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user