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>
This commit is contained in:
Alessandro Portale
2020-07-03 09:46:44 +02:00
parent 5c6c892388
commit 6fec04d6de
3 changed files with 25 additions and 8 deletions

View File

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

View File

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

View File

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