McuSupport: Evaluate cmake variables in paths

Change-Id: I04dd77bd5420e57903afe281e6e2601782795909
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Piotr Mućko
2022-08-10 15:50:57 +02:00
parent e31016ccc3
commit fe9de4e205
4 changed files with 62 additions and 24 deletions

View File

@@ -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_"};

View File

@@ -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

View File

@@ -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

View File

@@ -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};