diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index fae24ee6e3a..15dd33509ea 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -460,11 +460,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 597df6a7c15..f70722412d7 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -137,6 +137,7 @@ public: TypeGHS, TypeMSVC, TypeGCC, + TypeGHSArm, TypeUnsupported }; diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 2f2e80fbf0e..52681a5beb8 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -149,6 +149,30 @@ static McuToolChainPackage *createGhsToolchainPackage() 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() { const char envVar[] = "IAR_ARM_COMPILER_DIR"; @@ -267,6 +291,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 { @@ -304,6 +357,9 @@ static McuPackageVersionDetector* generatePackageVersionDetector(QString envVar) 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) { const auto generateSdkName = [](const QString& envVar) { @@ -538,11 +594,15 @@ static QVector targetsFromDescriptions(const QList vendorPkgs = { {{"ST"}, createStm32CubeProgrammerPackage()}, {{"NXP"}, createMcuXpressoIdePackage()}, + {{"CYPRESS"}, createCypressProgrammerPackage()}, }; McuTargetFactory targetFactory(tcPkgs, vendorPkgs);