summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2020-07-03 09:46:44 +0200
committerAlessandro Portale <alessandro.portale@qt.io>2020-07-06 07:51:48 +0000
commit6fec04d6de52034ffd61c591393e460dc3a33c8f (patch)
treed265f051c21c25b89fa9ff076775ab5a6c4deee9
parent5c6c892388f9e15d31539c8578e28b834b553cc8 (diff)
downloadqt-creator-6fec04d6de52034ffd61c591393e460dc3a33c8f.tar.gz
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 <Rainer.Keller@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp5
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.h1
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp27
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<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescription> &descriptions,
@@ -280,21 +286,25 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
QVector<McuPackage*> 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<McuPackage *> *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));