From fe9de4e20574578eeeaeb80acc47c47ba3e2c43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Mu=C4=87ko?= Date: Wed, 10 Aug 2022 15:50:57 +0200 Subject: [PATCH] McuSupport: Evaluate cmake variables in paths Change-Id: I04dd77bd5420e57903afe281e6e2601782795909 Reviewed-by: hjk Reviewed-by: --- src/plugins/mcusupport/mculegacyconstants.h | 3 +- src/plugins/mcusupport/mcutargetfactory.cpp | 4 +- src/plugins/mcusupport/test/unittest.cpp | 76 +++++++++++++++------ src/plugins/mcusupport/test/unittest.h | 3 +- 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/src/plugins/mcusupport/mculegacyconstants.h b/src/plugins/mcusupport/mculegacyconstants.h index 5b5c102c12e..1e8adbbc827 100644 --- a/src/plugins/mcusupport/mculegacyconstants.h +++ b/src/plugins/mcusupport/mculegacyconstants.h @@ -29,7 +29,8 @@ namespace McuSupport::Internal::Legacy::Constants { const char QT_FOR_MCUS_SDK_PACKAGE_VALIDATION_PATH[] = "bin/qmltocpp"; const char QUL_TOOLCHAIN_CMAKE_DIR[] = "lib/cmake/Qul/toolchain/"; -const char QUL_ENV_VAR[] = "Qul_ROOT"; +const char QUL_ENV_VAR[] = "Qul_DIR"; +const char QUL_CMAKE_VAR[] = "Qul_ROOT"; const char QUL_LABEL[] = "Qt for MCUs SDK"; const char BOARD_SDK_CMAKE_VAR[] = "QUL_BOARD_SDK_DIR"; const char SETTINGS_KEY_FREERTOS_PREFIX[]{"FreeRTOSSourcePackage_"}; diff --git a/src/plugins/mcusupport/mcutargetfactory.cpp b/src/plugins/mcusupport/mcutargetfactory.cpp index 883e0d6f06e..ddbc7f0c347 100644 --- a/src/plugins/mcusupport/mcutargetfactory.cpp +++ b/src/plugins/mcusupport/mcutargetfactory.cpp @@ -81,8 +81,8 @@ static void evaluateVariables(McuTarget &target) McuPackagePtr packageDefiningVariable{ Utils::findOrDefault(target.packages(), [variable](const McuPackagePtr &pkg) { - return pkg->cmakeVariableName() == variable; - // return pkg->cmakeVariableName() == variable || pkg->environmentVariableName() == variable; + return pkg->cmakeVariableName() == variable + || pkg->environmentVariableName() == variable; })}; if (packageDefiningVariable == nullptr) // nothing provides the variable diff --git a/src/plugins/mcusupport/test/unittest.cpp b/src/plugins/mcusupport/test/unittest.cpp index 3c7be253a5b..bbd90b02da2 100644 --- a/src/plugins/mcusupport/test/unittest.cpp +++ b/src/plugins/mcusupport/test/unittest.cpp @@ -70,6 +70,27 @@ namespace McuSupport::Internal::Test { +using namespace Utils; +using Legacy::Constants::BOARD_SDK_CMAKE_VAR; +using Legacy::Constants::QT_FOR_MCUS_SDK_PACKAGE_VALIDATION_PATH; +using Legacy::Constants::QUL_CMAKE_VAR; +using Legacy::Constants::QUL_ENV_VAR; +using Legacy::Constants::QUL_LABEL; +using Legacy::Constants::SETTINGS_KEY_FREERTOS_PREFIX; +using Legacy::Constants::TOOLCHAIN_DIR_CMAKE_VARIABLE; +using Legacy::Constants::TOOLCHAIN_FILE_CMAKE_VARIABLE; + +using CMakeProjectManager::CMakeConfigItem; +using CMakeProjectManager::CMakeConfigurationKitAspect; +using ProjectExplorer::EnvironmentKitAspect; +using ProjectExplorer::Kit; +using ProjectExplorer::KitManager; +using ProjectExplorer::ToolChain; +using ProjectExplorer::ToolChainManager; + +using testing::_; +using testing::Return; + namespace { const char empty[]{""}; const char armGcc[]{"armgcc"}; @@ -157,19 +178,6 @@ const McuTargetDescription::Platform platformDescription{id, const Utils::Id cxxLanguageId{ProjectExplorer::Constants::CXX_LANGUAGE_ID}; } // namespace -using namespace Utils; - -using CMakeProjectManager::CMakeConfigItem; -using CMakeProjectManager::CMakeConfigurationKitAspect; -using ProjectExplorer::EnvironmentKitAspect; -using ProjectExplorer::Kit; -using ProjectExplorer::KitManager; -using ProjectExplorer::ToolChain; -using ProjectExplorer::ToolChainManager; - -using testing::_; -using testing::Return; - void verifyIarToolchain(const McuToolChainPackagePtr &iarToolchainPackage) { ProjectExplorer::ToolChainFactory toolchainFactory; @@ -1143,24 +1151,25 @@ void McuSupportTest::test_passDirectoryVersionDetectorToRenesasBoardSdkPackage() QCOMPARE(typeid(*versionDetector).name(), typeid(McuPackageDirectoryVersionDetector).name()); } -void McuSupportTest::test_resolveEnvironmentVariablesInDefaultPaths() +void McuSupportTest::test_resolveEnvironmentVariablesInDefaultPath() { - QVERIFY(qputenv(qulEnvVar, qtForMcuSdkPath)); - QCOMPARE(qEnvironmentVariable(qulEnvVar), qtForMcuSdkPath); + QVERIFY(qputenv(QUL_ENV_VAR, qtForMcuSdkPath)); + QCOMPARE(qEnvironmentVariable(QUL_ENV_VAR), qtForMcuSdkPath); - toochainFileDescription.defaultPath = "$Qul_ROOT/lib/cmake/Qul/toolchain/iar.cmake"; + toochainFileDescription.defaultPath = FilePath::fromUserInput( + QString{"$"} + QUL_ENV_VAR + "/lib/cmake/Qul/toolchain/iar.cmake"); targetDescription.toolchain.file = toochainFileDescription; auto [targets, packages] = targetFactory.createTargets(targetDescription, qtForMcuSdkPath); auto qtForMCUPkg = findOrDefault(packages, [](const McuPackagePtr &pkg) { - return (pkg->cmakeVariableName() == Legacy::Constants::QUL_ENV_VAR); + return pkg->environmentVariableName() == QUL_ENV_VAR; }); QVERIFY(qtForMCUPkg); QCOMPARE(qtForMCUPkg->path().toString(), qtForMcuSdkPath); auto toolchainFilePkg = findOrDefault(packages, [](const McuPackagePtr &pkg) { - return (pkg->cmakeVariableName() == Legacy::Constants::TOOLCHAIN_FILE_CMAKE_VARIABLE); + return (pkg->cmakeVariableName() == TOOLCHAIN_FILE_CMAKE_VARIABLE); }); QVERIFY(toolchainFilePkg); @@ -1171,7 +1180,34 @@ void McuSupportTest::test_resolveEnvironmentVariablesInDefaultPaths() QVERIFY(toolchainFilePkg->path().toString().startsWith(qtForMcuSdkPath)); QCOMPARE(toolchainFilePkg->defaultPath().toString(), expectedPkgPath); - QVERIFY(qunsetenv(qulEnvVar)); + QVERIFY(qunsetenv(QUL_ENV_VAR)); +} + +void McuSupportTest::test_resolveCmakeVariablesInDefaultPath() +{ + toochainFileDescription.defaultPath = FilePath::fromUserInput( + QString{"$"} + QUL_CMAKE_VAR + "/lib/cmake/Qul/toolchain/iar.cmake"); + targetDescription.toolchain.file = toochainFileDescription; + + auto [targets, packages] = targetFactory.createTargets(targetDescription, qtForMcuSdkPath); + auto qtForMCUPkg = findOrDefault(packages, [](const McuPackagePtr &pkg) { + return pkg->cmakeVariableName() == QUL_CMAKE_VAR; + }); + + QVERIFY(qtForMCUPkg); + QCOMPARE(qtForMCUPkg->path().toString(), qtForMcuSdkPath); + + auto toolchainFilePkg = findOrDefault(packages, [](const McuPackagePtr &pkg) { + return (pkg->cmakeVariableName() == TOOLCHAIN_FILE_CMAKE_VARIABLE); + }); + + QVERIFY(toolchainFilePkg); + QVERIFY(targets.size() == 1); + + QString expectedPkgPath = QString{qtForMcuSdkPath} + "/lib/cmake/Qul/toolchain/iar.cmake"; + QCOMPARE(toolchainFilePkg->path().toString(), expectedPkgPath); + QVERIFY(toolchainFilePkg->path().toString().startsWith(qtForMcuSdkPath)); + QCOMPARE(toolchainFilePkg->defaultPath().toString(), expectedPkgPath); } } // namespace McuSupport::Internal::Test diff --git a/src/plugins/mcusupport/test/unittest.h b/src/plugins/mcusupport/test/unittest.h index 8edfda13874..9e2374b6949 100644 --- a/src/plugins/mcusupport/test/unittest.h +++ b/src/plugins/mcusupport/test/unittest.h @@ -106,7 +106,8 @@ private slots: void test_createBoardSdk_data(); void test_createBoardSdk(); - void test_resolveEnvironmentVariablesInDefaultPaths(); + void test_resolveEnvironmentVariablesInDefaultPath(); + void test_resolveCmakeVariablesInDefaultPath(); private: QVersionNumber currentQulVersion{2, 0};