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,
|
new McuPackage(settingsHandler,
|
||||||
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
|
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
|
||||||
defaultPath,
|
defaultPath,
|
||||||
{}, // detection path
|
"tasks.c", // detection path
|
||||||
QString{Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(envVarPrefix),
|
QString{Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(envVarPrefix),
|
||||||
"FREERTOS_DIR", // cmake var
|
"FREERTOS_DIR", // cmake var
|
||||||
envVar, // env var
|
envVar, // env var
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ constexpr auto armgcc_nxp_1050_json = R"({
|
|||||||
"freeRTOS": {
|
"freeRTOS": {
|
||||||
"cmakeVar": "FREERTOS_DIR",
|
"cmakeVar": "FREERTOS_DIR",
|
||||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||||
|
"validation": "tasks.c",
|
||||||
"envVar": "IMXRT1050_FREERTOS_DIR",
|
"envVar": "IMXRT1050_FREERTOS_DIR",
|
||||||
"label": "FreeRTOS SDK for MIMXRT1050-EVK",
|
"label": "FreeRTOS SDK for MIMXRT1050-EVK",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ constexpr auto armgcc_nxp_1064_json = R"(
|
|||||||
"freeRTOS": {
|
"freeRTOS": {
|
||||||
"cmakeVar": "FREERTOS_DIR",
|
"cmakeVar": "FREERTOS_DIR",
|
||||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||||
|
"validation": "tasks.c",
|
||||||
"envVar": "IMXRT1064_FREERTOS_DIR",
|
"envVar": "IMXRT1064_FREERTOS_DIR",
|
||||||
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ constexpr auto armgcc_stm32f769i_freertos_json = R"({
|
|||||||
"label": "FreeRTOS SDK for STM32F769I-Discovery",
|
"label": "FreeRTOS SDK for STM32F769I-Discovery",
|
||||||
"cmakeVar": "FREERTOS_DIR",
|
"cmakeVar": "FREERTOS_DIR",
|
||||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/Middlewares/Third_Party/FreeRTOS/Source",
|
"defaultValue": "%{QUL_BOARD_SDK_DIR}/Middlewares/Third_Party/FreeRTOS/Source",
|
||||||
|
"validation": "tasks.c",
|
||||||
"type": "path",
|
"type": "path",
|
||||||
"setting": "FreeRTOSSourcePackage_STM32F7",
|
"setting": "FreeRTOSSourcePackage_STM32F7",
|
||||||
"optional": false
|
"optional": false
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ constexpr auto iar_nxp_1064_json = R"({
|
|||||||
"freeRTOS": {
|
"freeRTOS": {
|
||||||
"cmakeVar": "FREERTOS_DIR",
|
"cmakeVar": "FREERTOS_DIR",
|
||||||
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
"defaultValue": "%{QUL_BOARD_SDK_DIR}/rtos/freertos/freertos_kernel",
|
||||||
|
"validation": "tasks.c",
|
||||||
"envVar": "IMXRT1064_FREERTOS_DIR",
|
"envVar": "IMXRT1064_FREERTOS_DIR",
|
||||||
"id": "NXP_FREERTOS_DIR",
|
"id": "NXP_FREERTOS_DIR",
|
||||||
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
"label": "FreeRTOS SDK for MIMXRT1064-EVK",
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ const char freeRtosCMakeVar[]{"FREERTOS_DIR"};
|
|||||||
const char freeRtosEnvVar[]{"EVK_MIMXRT1170_FREERTOS_PATH"};
|
const char freeRtosEnvVar[]{"EVK_MIMXRT1170_FREERTOS_PATH"};
|
||||||
const char freeRtosLabel[]{"FreeRTOS directory"};
|
const char freeRtosLabel[]{"FreeRTOS directory"};
|
||||||
const char freeRtosPath[]{"/opt/freertos/default"};
|
const char freeRtosPath[]{"/opt/freertos/default"};
|
||||||
|
const char freeRtosDetectionPath[]{"tasks.c"};
|
||||||
const char freeRtosNxpPathSuffix[]{"rtos/freertos/freertos_kernel"};
|
const char freeRtosNxpPathSuffix[]{"rtos/freertos/freertos_kernel"};
|
||||||
const char freeRtosStmPathSuffix[]{"/Middlewares/Third_Party/FreeRTOS/Source"};
|
const char freeRtosStmPathSuffix[]{"/Middlewares/Third_Party/FreeRTOS/Source"};
|
||||||
const char freeRtosSetting[]{"Freertos"};
|
const char freeRtosSetting[]{"Freertos"};
|
||||||
@@ -273,6 +274,7 @@ void verifyFreeRtosPackage(const McuPackagePtr &freeRtos,
|
|||||||
const QString &envVar,
|
const QString &envVar,
|
||||||
const FilePath &boardSdkDir,
|
const FilePath &boardSdkDir,
|
||||||
const QString &freeRtosPath,
|
const QString &freeRtosPath,
|
||||||
|
const QString &freeRtosDetectionPath,
|
||||||
const QString &expectedSettingsKey)
|
const QString &expectedSettingsKey)
|
||||||
{
|
{
|
||||||
QVERIFY(freeRtos);
|
QVERIFY(freeRtos);
|
||||||
@@ -280,6 +282,7 @@ void verifyFreeRtosPackage(const McuPackagePtr &freeRtos,
|
|||||||
QCOMPARE(freeRtos->cmakeVariableName(), freeRtosCMakeVar);
|
QCOMPARE(freeRtos->cmakeVariableName(), freeRtosCMakeVar);
|
||||||
QCOMPARE(freeRtos->settingsKey(), expectedSettingsKey);
|
QCOMPARE(freeRtos->settingsKey(), expectedSettingsKey);
|
||||||
QCOMPARE(freeRtos->path().cleanPath().toString(), freeRtosPath);
|
QCOMPARE(freeRtos->path().cleanPath().toString(), freeRtosPath);
|
||||||
|
QCOMPARE(freeRtos->detectionPath().cleanPath().toString(), freeRtosDetectionPath);
|
||||||
QVERIFY(freeRtos->path().toString().startsWith(boardSdkDir.cleanPath().toString()));
|
QVERIFY(freeRtos->path().toString().startsWith(boardSdkDir.cleanPath().toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,7 +616,7 @@ void McuSupportTest::test_createTargets()
|
|||||||
freeRtosSetting,
|
freeRtosSetting,
|
||||||
freeRtosLabel,
|
freeRtosLabel,
|
||||||
freeRtosPath,
|
freeRtosPath,
|
||||||
"",
|
freeRtosDetectionPath,
|
||||||
{},
|
{},
|
||||||
VersionDetection{},
|
VersionDetection{},
|
||||||
true};
|
true};
|
||||||
@@ -665,7 +668,7 @@ void McuSupportTest::test_createPackages()
|
|||||||
freeRtosLabel,
|
freeRtosLabel,
|
||||||
freeRtosSetting,
|
freeRtosSetting,
|
||||||
freeRtosPath,
|
freeRtosPath,
|
||||||
"",
|
freeRtosDetectionPath,
|
||||||
{},
|
{},
|
||||||
VersionDetection{},
|
VersionDetection{},
|
||||||
true};
|
true};
|
||||||
@@ -962,23 +965,28 @@ void McuSupportTest::test_legacy_createFreeRtosPackage_data()
|
|||||||
QTest::addColumn<QStringList>("versions");
|
QTest::addColumn<QStringList>("versions");
|
||||||
QTest::addColumn<QString>("expectedSettingsKey");
|
QTest::addColumn<QString>("expectedSettingsKey");
|
||||||
QTest::addColumn<FilePath>("expectedPath");
|
QTest::addColumn<FilePath>("expectedPath");
|
||||||
|
QTest::addColumn<FilePath>("expectedDetectionPath");
|
||||||
|
|
||||||
QTest::newRow("armgcc_nxp_1050_json")
|
QTest::newRow("armgcc_nxp_1050_json")
|
||||||
<< armgcc_nxp_1050_json << QStringList{boardSdkVersion}
|
<< armgcc_nxp_1050_json << QStringList{boardSdkVersion}
|
||||||
<< QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1050)
|
<< 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")
|
QTest::newRow("armgcc_nxp_1064_json")
|
||||||
<< armgcc_nxp_1064_json << QStringList{boardSdkVersion}
|
<< armgcc_nxp_1064_json << QStringList{boardSdkVersion}
|
||||||
<< QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1064)
|
<< 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")
|
QTest::newRow("iar_nxp_1064_json")
|
||||||
<< iar_nxp_1064_json << QStringList{boardSdkVersion}
|
<< iar_nxp_1064_json << QStringList{boardSdkVersion}
|
||||||
<< QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(nxp1064)
|
<< 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")
|
QTest::newRow("armgcc_stm32f769i_freertos_json")
|
||||||
<< armgcc_stm32f769i_freertos_json << QStringList{"1.16.0"}
|
<< armgcc_stm32f769i_freertos_json << QStringList{"1.16.0"}
|
||||||
<< QString{Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX}.append(stm32f7)
|
<< 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()
|
void McuSupportTest::test_legacy_createFreeRtosPackage()
|
||||||
@@ -987,6 +995,7 @@ void McuSupportTest::test_legacy_createFreeRtosPackage()
|
|||||||
QFETCH(QStringList, versions);
|
QFETCH(QStringList, versions);
|
||||||
QFETCH(QString, expectedSettingsKey);
|
QFETCH(QString, expectedSettingsKey);
|
||||||
QFETCH(FilePath, expectedPath);
|
QFETCH(FilePath, expectedPath);
|
||||||
|
QFETCH(FilePath, expectedDetectionPath);
|
||||||
|
|
||||||
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
||||||
|
|
||||||
@@ -1000,6 +1009,7 @@ void McuSupportTest::test_legacy_createFreeRtosPackage()
|
|||||||
targetDescription.freeRTOS.envVar,
|
targetDescription.freeRTOS.envVar,
|
||||||
boardSdkDir,
|
boardSdkDir,
|
||||||
expectedPath.toUserOutput(),
|
expectedPath.toUserOutput(),
|
||||||
|
expectedDetectionPath.toUserOutput(),
|
||||||
expectedSettingsKey);
|
expectedSettingsKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1014,6 +1024,7 @@ void McuSupportTest::test_createFreeRtosPackage()
|
|||||||
QFETCH(QStringList, versions);
|
QFETCH(QStringList, versions);
|
||||||
QFETCH(QString, expectedSettingsKey);
|
QFETCH(QString, expectedSettingsKey);
|
||||||
QFETCH(FilePath, expectedPath);
|
QFETCH(FilePath, expectedPath);
|
||||||
|
QFETCH(FilePath, expectedDetectionPath);
|
||||||
|
|
||||||
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
McuTargetDescription targetDescription{parseDescriptionJson(json.toLocal8Bit())};
|
||||||
|
|
||||||
@@ -1030,6 +1041,7 @@ void McuSupportTest::test_createFreeRtosPackage()
|
|||||||
targetDescription.freeRTOS.envVar,
|
targetDescription.freeRTOS.envVar,
|
||||||
boardSdkDir,
|
boardSdkDir,
|
||||||
expectedPath.toUserOutput(),
|
expectedPath.toUserOutput(),
|
||||||
|
expectedDetectionPath.toUserOutput(),
|
||||||
expectedSettingsKey);
|
expectedSettingsKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user