From b7218a34dda3ee29064b591d3cc2d29b3dbc1907 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Mon, 10 May 2021 11:35:46 +0200 Subject: [PATCH] Add support for the Cypress traveo II kit Fixes: UL-4242 Change-Id: I0b492a3edd6a1dce9d214e6490e174050c3fdb30 Reviewed-by: Reviewed-by: Alessandro Portale (cherry picked from commit d98feae8f6fb2f019571f678e8cd55d8a7b5af6d) --- src/plugins/mcusupport/mcusupportoptions.cpp | 13 +++-- src/plugins/mcusupport/mcusupportoptions.h | 1 + src/plugins/mcusupport/mcusupportsdk.cpp | 53 ++++++++++++++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 56bcf57165a..5f9c512bb2d 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -412,11 +412,14 @@ ToolChain *McuToolChainPackage::toolChain(Id language) const QString McuToolChainPackage::toolChainName() const { - return QLatin1String(m_type == TypeArmGcc - ? "armgcc" : m_type == McuToolChainPackage::TypeIAR - ? "iar" : m_type == McuToolChainPackage::TypeKEIL - ? "keil" : m_type == McuToolChainPackage::TypeGHS - ? "ghs" : "unsupported"); + switch (m_type) { + case TypeArmGcc: return QLatin1String("armgcc"); + case TypeIAR: return QLatin1String("iar"); + case TypeKEIL: return QLatin1String("keil"); + case TypeGHS: return QLatin1String("ghs"); + case TypeGHSArm: return QLatin1String("ghs-arm"); + default: return QLatin1String("unsupported"); + } } QString McuToolChainPackage::cmakeToolChainFileName() const diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 57772bafb22..515d22945dd 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -126,6 +126,7 @@ public: TypeGHS, TypeMSVC, TypeGCC, + TypeGHSArm, TypeUnsupported }; diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index e5bb7f911b5..635f5903f8c 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -134,6 +134,23 @@ static McuToolChainPackage *createGhsToolchainPackage() return result; } +static McuToolChainPackage *createGhsArmToolchainPackage() +{ + const char envVar[] = "GHS_ARM_COMPILER_DIR"; + + const QString defaultPath = + qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); + + auto result = new McuToolChainPackage( + "Green Hills Compiler for ARM", + defaultPath, + Utils::HostOsInfo::withExecutableSuffix("cxarm"), + "GHSArmToolchain", + McuToolChainPackage::TypeGHSArm); + result->setEnvironmentVariableName(envVar); + return result; +} + static McuToolChainPackage *createIarToolChainPackage() { const char envVar[] = "IAR_ARM_COMPILER_DIR"; @@ -248,6 +265,35 @@ static McuPackage *createMcuXpressoIdePackage() 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 { enum class TargetType { @@ -269,6 +315,9 @@ struct McuTargetDescription TargetType type; }; +/// 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) { const auto generateSdkName = [](const QString& envVar) { @@ -495,11 +544,15 @@ static QVector targetsFromDescriptions(const QList vendorPkgs = { {{"ST"}, createStm32CubeProgrammerPackage()}, {{"NXP"}, createMcuXpressoIdePackage()}, + {{"CYPRESS"}, createCypressProgrammerPackage()}, }; McuTargetFactory targetFactory(tcPkgs, vendorPkgs);