From 6fec04d6de52034ffd61c591393e460dc3a33c8f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 3 Jul 2020 09:46:44 +0200 Subject: McuSupport: Find default FreeRTOS dir inside pre-installed board SDK Qt for MCUs 1.3 ships the board/MCU SDKs, and also adds the subdir to the FreeRTOS component inside the board/MCU SDKs as "boardSdkSubDir" to the .json files (see: UL-2760). Task: Qt Creator needs to lookup that "boardSdkSubDir" value and use it to construct a default path for the FreeRTOS path. Task-number: QTCREATORBUG-24300 Change-Id: Ie3c8186b76443d5fe3640226ea61aa8b14779d54 Reviewed-by: Rainer Keller Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportoptions.cpp | 5 +++++ src/plugins/mcusupport/mcusupportoptions.h | 1 + src/plugins/mcusupport/mcusupportsdk.cpp | 27 +++++++++++++++++++-------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index ece93331e7..911f0b3091 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -95,6 +95,11 @@ QString McuPackage::label() const return m_label; } +QString McuPackage::defaultPath() const +{ + return m_defaultPath; +} + QString McuPackage::detectionPath() const { return m_detectionPath; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 53d00fb8e5..0ef910b756 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -66,6 +66,7 @@ public: QString path() const; QString label() const; + QString defaultPath() const; QString detectionPath() const; Status status() const; void setDownloadUrl(const QString &url); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 1e2e4befec..e3e44a9eaf 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -219,13 +219,18 @@ static McuPackage *createBoardSdkPackage(const QString &envVar) return result; } -static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar) +static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const QString &boardSdkDir, + const QString &freeRTOSBoardSdkSubDir) { const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR")); - const QString defaultPath = - qEnvironmentVariableIsSet(envVar.toLatin1()) ? - qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); + QString defaultPath; + if (qEnvironmentVariableIsSet(envVar.toLatin1())) + defaultPath = qEnvironmentVariable(envVar.toLatin1()); + else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty()) + defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir; + else + defaultPath = QDir::homePath(); auto result = new McuPackage( QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), @@ -246,6 +251,7 @@ struct McuTargetDescription QString toolchainId; QString boardSdkEnvVar; QString freeRTOSEnvVar; + QString freeRTOSBoardSdkSubDir; }; static QVector targetsFromDescriptions(const QList &descriptions, @@ -280,21 +286,25 @@ static QVector targetsFromDescriptions(const QList required3rdPartyPkgs = { vendorPkgs.value(desc.platformVendor), tcPkg }; + QString boardSdkDefaultPath; if (!desc.boardSdkEnvVar.isEmpty() && desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar); boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg); } - required3rdPartyPkgs.append(boardSdkPkgs.value(desc.boardSdkEnvVar)); + auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar); + boardSdkDefaultPath = boardSdkPkg->defaultPath(); + required3rdPartyPkgs.append(boardSdkPkg); } if (os == McuTarget::OS::FreeRTOS) { if (desc.freeRTOSEnvVar.isEmpty()) { continue; } else { if (!freeRTOSPkgs.contains(desc.freeRTOSEnvVar)) { - auto freeRTOSPkg = createFreeRTOSSourcesPackage(desc.freeRTOSEnvVar); - freeRTOSPkgs.insert(desc.freeRTOSEnvVar, freeRTOSPkg); + freeRTOSPkgs.insert(desc.freeRTOSEnvVar, createFreeRTOSSourcesPackage( + desc.freeRTOSEnvVar, boardSdkDefaultPath, + desc.freeRTOSBoardSdkSubDir)); } required3rdPartyPkgs.append(freeRTOSPkgs.value(desc.freeRTOSEnvVar)); } @@ -346,6 +356,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data) toolchain.value("id").toString(), boardSdk.value("envVar").toString(), freeRTOS.value("envVar").toString(), + freeRTOS.value("boardSdkSubDir").toString() }; } @@ -368,7 +379,7 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa // Workaround for missing JSON file for Desktop target: if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) { descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(), - {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}}); + {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}}); } mcuTargets->append(targetsFromDescriptions(descriptions, packages)); -- cgit v1.2.3