Add support for the Cypress traveo II kit

Fixes: UL-4242
Change-Id: I0b492a3edd6a1dce9d214e6490e174050c3fdb30
Reviewed-by: <christiaan.janssen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Erik Verbruggen
2021-05-10 11:35:46 +02:00
committed by Erik Verbruggen
parent 02685c691b
commit d98feae8f6
3 changed files with 69 additions and 5 deletions

View File

@@ -460,11 +460,14 @@ ToolChain *McuToolChainPackage::toolChain(Id language) const
QString McuToolChainPackage::toolChainName() const QString McuToolChainPackage::toolChainName() const
{ {
return QLatin1String(m_type == TypeArmGcc switch (m_type) {
? "armgcc" : m_type == McuToolChainPackage::TypeIAR case TypeArmGcc: return QLatin1String("armgcc");
? "iar" : m_type == McuToolChainPackage::TypeKEIL case TypeIAR: return QLatin1String("iar");
? "keil" : m_type == McuToolChainPackage::TypeGHS case TypeKEIL: return QLatin1String("keil");
? "ghs" : "unsupported"); case TypeGHS: return QLatin1String("ghs");
case TypeGHSArm: return QLatin1String("ghs-arm");
default: return QLatin1String("unsupported");
}
} }
QString McuToolChainPackage::cmakeToolChainFileName() const QString McuToolChainPackage::cmakeToolChainFileName() const

View File

@@ -137,6 +137,7 @@ public:
TypeGHS, TypeGHS,
TypeMSVC, TypeMSVC,
TypeGCC, TypeGCC,
TypeGHSArm,
TypeUnsupported TypeUnsupported
}; };

View File

@@ -149,6 +149,30 @@ static McuToolChainPackage *createGhsToolchainPackage()
return result; return result;
} }
static McuToolChainPackage *createGhsArmToolchainPackage()
{
const char envVar[] = "GHS_ARM_COMPILER_DIR";
const QString defaultPath =
qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath();
const auto versionDetector = new McuPackageExecutableVersionDetector(
Utils::HostOsInfo::withExecutableSuffix("asarm"),
{"-V"},
"\\bv(\\d+\\.\\d+\\.\\d+)\\b"
);
auto result = new McuToolChainPackage(
"Green Hills Compiler for ARM",
defaultPath,
Utils::HostOsInfo::withExecutableSuffix("cxarm"),
"GHSArmToolchain",
McuToolChainPackage::TypeGHSArm,
versionDetector);
result->setEnvironmentVariableName(envVar);
return result;
}
static McuToolChainPackage *createIarToolChainPackage() static McuToolChainPackage *createIarToolChainPackage()
{ {
const char envVar[] = "IAR_ARM_COMPILER_DIR"; const char envVar[] = "IAR_ARM_COMPILER_DIR";
@@ -267,6 +291,35 @@ static McuPackage *createMcuXpressoIdePackage()
return result; return result;
} }
static McuPackage *createCypressProgrammerPackage()
{
const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR";
QString defaultPath;
if (qEnvironmentVariableIsSet(envVar)) {
defaultPath = qEnvironmentVariable(envVar);
} else if (Utils::HostOsInfo::isWindowsHost()) {
auto candidate = findInProgramFiles(QLatin1String("/Cypress/Cypress Auto Flash Utility 1.0/"));
if (QFileInfo::exists(candidate)) {
defaultPath = candidate;
}
} else {
defaultPath = QLatin1String("/usr");
}
if (defaultPath.isEmpty()) {
defaultPath = QDir::homePath();
}
auto result = new McuPackage(
"Cypress Auto Flash Utility",
defaultPath,
Utils::HostOsInfo::withExecutableSuffix("/bin/openocd"),
"CypressAutoFlashUtil");
result->setEnvironmentVariableName(envVar);
return result;
}
struct McuTargetDescription struct McuTargetDescription
{ {
enum class TargetType { enum class TargetType {
@@ -304,6 +357,9 @@ static McuPackageVersionDetector* generatePackageVersionDetector(QString envVar)
return nullptr; return nullptr;
} }
/// Create the McuPackage by checking the "boardSdk" property in the JSON file for the board.
/// The name of the environment variable pointing to the the SDK for the board will be defined in the "envVar" property
/// inside the "boardSdk".
static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc) static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc)
{ {
const auto generateSdkName = [](const QString& envVar) { const auto generateSdkName = [](const QString& envVar) {
@@ -538,11 +594,15 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip
{{"iar"}, createIarToolChainPackage()}, {{"iar"}, createIarToolChainPackage()},
{{"msvc"}, createMsvcToolChainPackage()}, {{"msvc"}, createMsvcToolChainPackage()},
{{"gcc"}, createGccToolChainPackage()}, {{"gcc"}, createGccToolChainPackage()},
{{"arm-greenhills"}, createGhsArmToolchainPackage()},
}; };
// Note: the vendor name (the key of the hash) is case-sensitive. It has to match the "platformVendor" key in the
// json file.
const QHash<QString, McuPackage *> vendorPkgs = { const QHash<QString, McuPackage *> vendorPkgs = {
{{"ST"}, createStm32CubeProgrammerPackage()}, {{"ST"}, createStm32CubeProgrammerPackage()},
{{"NXP"}, createMcuXpressoIdePackage()}, {{"NXP"}, createMcuXpressoIdePackage()},
{{"CYPRESS"}, createCypressProgrammerPackage()},
}; };
McuTargetFactory targetFactory(tcPkgs, vendorPkgs); McuTargetFactory targetFactory(tcPkgs, vendorPkgs);