forked from qt-creator/qt-creator
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:
@@ -95,6 +95,11 @@ QString McuPackage::label() const
|
|||||||
return m_label;
|
return m_label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString McuPackage::defaultPath() const
|
||||||
|
{
|
||||||
|
return m_defaultPath;
|
||||||
|
}
|
||||||
|
|
||||||
QString McuPackage::detectionPath() const
|
QString McuPackage::detectionPath() const
|
||||||
{
|
{
|
||||||
return m_detectionPath;
|
return m_detectionPath;
|
||||||
|
@@ -66,6 +66,7 @@ public:
|
|||||||
|
|
||||||
QString path() const;
|
QString path() const;
|
||||||
QString label() const;
|
QString label() const;
|
||||||
|
QString defaultPath() const;
|
||||||
QString detectionPath() const;
|
QString detectionPath() const;
|
||||||
Status status() const;
|
Status status() const;
|
||||||
void setDownloadUrl(const QString &url);
|
void setDownloadUrl(const QString &url);
|
||||||
|
@@ -219,13 +219,18 @@ static McuPackage *createBoardSdkPackage(const QString &envVar)
|
|||||||
return result;
|
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 envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR"));
|
||||||
|
|
||||||
const QString defaultPath =
|
QString defaultPath;
|
||||||
qEnvironmentVariableIsSet(envVar.toLatin1()) ?
|
if (qEnvironmentVariableIsSet(envVar.toLatin1()))
|
||||||
qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath();
|
defaultPath = qEnvironmentVariable(envVar.toLatin1());
|
||||||
|
else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty())
|
||||||
|
defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir;
|
||||||
|
else
|
||||||
|
defaultPath = QDir::homePath();
|
||||||
|
|
||||||
auto result = new McuPackage(
|
auto result = new McuPackage(
|
||||||
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
|
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
|
||||||
@@ -246,6 +251,7 @@ struct McuTargetDescription
|
|||||||
QString toolchainId;
|
QString toolchainId;
|
||||||
QString boardSdkEnvVar;
|
QString boardSdkEnvVar;
|
||||||
QString freeRTOSEnvVar;
|
QString freeRTOSEnvVar;
|
||||||
|
QString freeRTOSBoardSdkSubDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescription> &descriptions,
|
static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescription> &descriptions,
|
||||||
@@ -280,21 +286,25 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
|
|||||||
QVector<McuPackage*> required3rdPartyPkgs = {
|
QVector<McuPackage*> required3rdPartyPkgs = {
|
||||||
vendorPkgs.value(desc.platformVendor), tcPkg
|
vendorPkgs.value(desc.platformVendor), tcPkg
|
||||||
};
|
};
|
||||||
|
QString boardSdkDefaultPath;
|
||||||
if (!desc.boardSdkEnvVar.isEmpty()
|
if (!desc.boardSdkEnvVar.isEmpty()
|
||||||
&& desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs
|
&& desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs
|
||||||
if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) {
|
if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) {
|
||||||
auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar);
|
auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar);
|
||||||
boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
|
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 (os == McuTarget::OS::FreeRTOS) {
|
||||||
if (desc.freeRTOSEnvVar.isEmpty()) {
|
if (desc.freeRTOSEnvVar.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
if (!freeRTOSPkgs.contains(desc.freeRTOSEnvVar)) {
|
if (!freeRTOSPkgs.contains(desc.freeRTOSEnvVar)) {
|
||||||
auto freeRTOSPkg = createFreeRTOSSourcesPackage(desc.freeRTOSEnvVar);
|
freeRTOSPkgs.insert(desc.freeRTOSEnvVar, createFreeRTOSSourcesPackage(
|
||||||
freeRTOSPkgs.insert(desc.freeRTOSEnvVar, freeRTOSPkg);
|
desc.freeRTOSEnvVar, boardSdkDefaultPath,
|
||||||
|
desc.freeRTOSBoardSdkSubDir));
|
||||||
}
|
}
|
||||||
required3rdPartyPkgs.append(freeRTOSPkgs.value(desc.freeRTOSEnvVar));
|
required3rdPartyPkgs.append(freeRTOSPkgs.value(desc.freeRTOSEnvVar));
|
||||||
}
|
}
|
||||||
@@ -346,6 +356,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data)
|
|||||||
toolchain.value("id").toString(),
|
toolchain.value("id").toString(),
|
||||||
boardSdk.value("envVar").toString(),
|
boardSdk.value("envVar").toString(),
|
||||||
freeRTOS.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:
|
// Workaround for missing JSON file for Desktop target:
|
||||||
if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) {
|
if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) {
|
||||||
descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(),
|
descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(),
|
||||||
{"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}});
|
{"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}});
|
||||||
}
|
}
|
||||||
|
|
||||||
mcuTargets->append(targetsFromDescriptions(descriptions, packages));
|
mcuTargets->append(targetsFromDescriptions(descriptions, packages));
|
||||||
|
Reference in New Issue
Block a user