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:
Jacek Nijaki
2020-08-17 11:25:59 +02:00
committed by Alessandro Portale
parent c3641b02e4
commit 4f595be64a

View File

@@ -201,24 +201,52 @@ static McuPackage *createMcuXpressoIdePackage()
return result; return result;
} }
static McuPackage *createBoardSdkPackage(const QString &envVar) struct McuTargetDescription
{ {
auto postfixPos = envVar.indexOf("_SDK_PATH"); QString qulVersion;
if (postfixPos < 0) { QString platform;
postfixPos = envVar.indexOf("_DIR"); QString platformVendor;
} QVector<int> colorDepths;
const QString sdkName = postfixPos > 0 ? envVar.left(postfixPos) : envVar; QString toolchainId;
QString boardSdkEnvVar;
QString boardSdkName;
QString boardSdkDefaultPath;
QString freeRTOSEnvVar;
QString freeRTOSBoardSdkSubDir;
};
const QString defaultPath = static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc)
qEnvironmentVariableIsSet(envVar.toLatin1()) ? {
qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); const auto generateSdkName = [](const QString& envVar) {
auto postfixPos = envVar.indexOf("_SDK_PATH");
if (postfixPos < 0) {
postfixPos = envVar.indexOf("_DIR");
}
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 auto envVar = desc.boardSdkEnvVar.toLatin1();
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()
}; };