forked from qt-creator/qt-creator
McuSupport: Read RGL configuration from json
Previously whole SDK configuration for Renesas RH850 was hard coded. Now configuration is read form the json file - same as for the other SDKs. This changes adds new boardSdk params: - name: sets the name for the SDK. If not set existing logic for generating name as "MCU SDK()" is used - defaultPath: path where to look for the SDK if env variable is not set Change-Id: Ia4b92c95bdc3302309cea4b935afbdd2e0bcadbe Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
committed by
Alessandro Portale
parent
c3641b02e4
commit
4f595be64a
@@ -201,24 +201,52 @@ static McuPackage *createMcuXpressoIdePackage()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static McuPackage *createBoardSdkPackage(const QString &envVar)
|
struct McuTargetDescription
|
||||||
{
|
{
|
||||||
|
QString qulVersion;
|
||||||
|
QString platform;
|
||||||
|
QString platformVendor;
|
||||||
|
QVector<int> colorDepths;
|
||||||
|
QString toolchainId;
|
||||||
|
QString boardSdkEnvVar;
|
||||||
|
QString boardSdkName;
|
||||||
|
QString boardSdkDefaultPath;
|
||||||
|
QString freeRTOSEnvVar;
|
||||||
|
QString freeRTOSBoardSdkSubDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc)
|
||||||
|
{
|
||||||
|
const auto generateSdkName = [](const QString& envVar) {
|
||||||
auto postfixPos = envVar.indexOf("_SDK_PATH");
|
auto postfixPos = envVar.indexOf("_SDK_PATH");
|
||||||
if (postfixPos < 0) {
|
if (postfixPos < 0) {
|
||||||
postfixPos = envVar.indexOf("_DIR");
|
postfixPos = envVar.indexOf("_DIR");
|
||||||
}
|
}
|
||||||
const QString sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar;
|
auto sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar;
|
||||||
|
return QString::fromLatin1("MCU SDK (%1)").arg(sdkName);
|
||||||
|
};
|
||||||
|
const QString sdkName = desc.boardSdkName.isEmpty() ? generateSdkName(desc.boardSdkEnvVar) : desc.boardSdkName;
|
||||||
|
|
||||||
const QString defaultPath =
|
const QString defaultPath = [&] {
|
||||||
qEnvironmentVariableIsSet(envVar.toLatin1()) ?
|
const auto envVar = desc.boardSdkEnvVar.toLatin1();
|
||||||
qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath();
|
if (qEnvironmentVariableIsSet(envVar)) {
|
||||||
|
return qEnvironmentVariable(envVar);
|
||||||
|
}
|
||||||
|
if (!desc.boardSdkDefaultPath.isEmpty()) {
|
||||||
|
QString defaultPath = QDir::rootPath() + desc.boardSdkDefaultPath;
|
||||||
|
if (QFileInfo::exists(defaultPath)) {
|
||||||
|
return defaultPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QDir::homePath();
|
||||||
|
}();
|
||||||
|
|
||||||
auto result = new McuPackage(
|
auto result = new McuPackage(
|
||||||
QString::fromLatin1("MCU SDK (%1)").arg(sdkName),
|
sdkName,
|
||||||
defaultPath,
|
defaultPath,
|
||||||
{},
|
{},
|
||||||
envVar);
|
desc.boardSdkEnvVar);
|
||||||
result->setEnvironmentVariableName(envVar);
|
result->setEnvironmentVariableName(desc.boardSdkEnvVar);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,18 +273,6 @@ static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const QSt
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct McuTargetDescription
|
|
||||||
{
|
|
||||||
QString qulVersion;
|
|
||||||
QString platform;
|
|
||||||
QString platformVendor;
|
|
||||||
QVector<int> colorDepths;
|
|
||||||
QString toolchainId;
|
|
||||||
QString boardSdkEnvVar;
|
|
||||||
QString freeRTOSEnvVar;
|
|
||||||
QString freeRTOSBoardSdkSubDir;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct McuTargetFactory
|
struct McuTargetFactory
|
||||||
{
|
{
|
||||||
McuTargetFactory(const QHash<QString, McuToolChainPackage *> &tcPkgs,
|
McuTargetFactory(const QHash<QString, McuToolChainPackage *> &tcPkgs,
|
||||||
@@ -295,14 +311,16 @@ protected:
|
|||||||
auto tcPkg = tcPkgs.value(desc.toolchainId);
|
auto tcPkg = tcPkgs.value(desc.toolchainId);
|
||||||
for (auto os : {McuTarget::OS::BareMetal, McuTarget::OS::FreeRTOS}) {
|
for (auto os : {McuTarget::OS::BareMetal, McuTarget::OS::FreeRTOS}) {
|
||||||
for (int colorDepth : desc.colorDepths) {
|
for (int colorDepth : desc.colorDepths) {
|
||||||
QVector<McuPackage*> required3rdPartyPkgs = {
|
QVector<McuPackage*> required3rdPartyPkgs = { tcPkg };
|
||||||
vendorPkgs.value(desc.platformVendor), tcPkg
|
if (vendorPkgs.contains(desc.platformVendor)) {
|
||||||
};
|
required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor));
|
||||||
|
}
|
||||||
QString boardSdkDefaultPath;
|
QString boardSdkDefaultPath;
|
||||||
if (!desc.boardSdkEnvVar.isEmpty()
|
if (!desc.boardSdkEnvVar.isEmpty()) {
|
||||||
&& 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 = desc.boardSdkEnvVar != "RGL_DIR"
|
||||||
|
? createBoardSdkPackage(desc)
|
||||||
|
: createRGLPackage();
|
||||||
boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
|
boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
|
||||||
}
|
}
|
||||||
auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar);
|
auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar);
|
||||||
@@ -338,14 +356,14 @@ protected:
|
|||||||
QVector<McuTarget *> mcuTargets;
|
QVector<McuTarget *> mcuTargets;
|
||||||
auto tcPkg = tcPkgs.value(desc.toolchainId);
|
auto tcPkg = tcPkgs.value(desc.toolchainId);
|
||||||
for (int colorDepth : desc.colorDepths) {
|
for (int colorDepth : desc.colorDepths) {
|
||||||
QVector<McuPackage*> required3rdPartyPkgs = {
|
QVector<McuPackage*> required3rdPartyPkgs = { tcPkg };
|
||||||
vendorPkgs.value(desc.platformVendor), tcPkg
|
if (vendorPkgs.contains(desc.platformVendor)) {
|
||||||
};
|
required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor));
|
||||||
|
}
|
||||||
QString boardSdkDefaultPath;
|
QString boardSdkDefaultPath;
|
||||||
if (!desc.boardSdkEnvVar.isEmpty()
|
if (!desc.boardSdkEnvVar.isEmpty()) {
|
||||||
&& 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);
|
||||||
boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
|
boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg);
|
||||||
}
|
}
|
||||||
auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar);
|
auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar);
|
||||||
@@ -402,7 +420,6 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
|
|||||||
const QHash<QString, McuPackage *> vendorPkgs = {
|
const QHash<QString, McuPackage *> vendorPkgs = {
|
||||||
{{"ST"}, createStm32CubeProgrammerPackage()},
|
{{"ST"}, createStm32CubeProgrammerPackage()},
|
||||||
{{"NXP"}, createMcuXpressoIdePackage()},
|
{{"NXP"}, createMcuXpressoIdePackage()},
|
||||||
{{"Renesas"}, createRGLPackage()}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
McuTargetFactory targetFactory(tcPkgs, vendorPkgs);
|
McuTargetFactory targetFactory(tcPkgs, vendorPkgs);
|
||||||
@@ -448,6 +465,8 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data)
|
|||||||
colorDepthsVector,
|
colorDepthsVector,
|
||||||
toolchain.value("id").toString(),
|
toolchain.value("id").toString(),
|
||||||
boardSdk.value("envVar").toString(),
|
boardSdk.value("envVar").toString(),
|
||||||
|
boardSdk.value("name").toString(),
|
||||||
|
boardSdk.value("defaultPath").toString(),
|
||||||
freeRTOS.value("envVar").toString(),
|
freeRTOS.value("envVar").toString(),
|
||||||
freeRTOS.value("boardSdkSubDir").toString()
|
freeRTOS.value("boardSdkSubDir").toString()
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user