diff options
author | Erik Verbruggen <erik@verbruggen.consulting> | 2022-02-01 16:29:11 +0100 |
---|---|---|
committer | piotr.mucko <piotr.mucko@qt.io> | 2022-02-10 08:52:59 +0000 |
commit | 34345f8b7edfed0db5a964e08f813c3c78080286 (patch) | |
tree | 1d6aef3a08036875b4d4282471a5f1f15392c39e | |
parent | 32f8ed7b669e3d9ffe5c37eb6c66e73dd26f6d17 (diff) |
Make McuToolChainPackage::Type an enum class
And make more use of switch statements without a default case, so each
type is handled explicitly. (Ok, there is a default, but that is
Q_UNREACHABLE).
Change-Id: I30ccc447e55a5aeebebe1a9879ea3136545f5e68
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: <piotr.mucko@qt.io>
-rw-r--r-- | src/plugins/mcusupport/mcupackage.cpp | 2 | ||||
-rw-r--r-- | src/plugins/mcusupport/mcupackage.h | 18 | ||||
-rw-r--r-- | src/plugins/mcusupport/mcusupportoptions.cpp | 151 | ||||
-rw-r--r-- | src/plugins/mcusupport/mcusupportsdk.cpp | 16 |
4 files changed, 111 insertions, 76 deletions
diff --git a/src/plugins/mcusupport/mcupackage.cpp b/src/plugins/mcusupport/mcupackage.cpp index 31d70b34b5..7a98738ffa 100644 --- a/src/plugins/mcusupport/mcupackage.cpp +++ b/src/plugins/mcusupport/mcupackage.cpp @@ -302,7 +302,7 @@ McuToolChainPackage::Type McuToolChainPackage::type() const bool McuToolChainPackage::isDesktopToolchain() const { - return m_type == TypeMSVC || m_type == TypeGCC; + return m_type == Type::MSVC || m_type == Type::GCC; } } // namespace Internal diff --git a/src/plugins/mcusupport/mcupackage.h b/src/plugins/mcusupport/mcupackage.h index ced8ff1d0c..8729a40a33 100644 --- a/src/plugins/mcusupport/mcupackage.h +++ b/src/plugins/mcusupport/mcupackage.h @@ -122,15 +122,15 @@ private: class McuToolChainPackage : public McuPackage { public: - enum Type { - TypeArmGcc, - TypeIAR, - TypeKEIL, - TypeGHS, - TypeMSVC, - TypeGCC, - TypeGHSArm, - TypeUnsupported + enum class Type { + IAR, + KEIL, + MSVC, + GCC, + ArmGcc, + GHS, + GHSArm, + Unsupported }; McuToolChainPackage(const QString &label, diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index fb874a0d15..ec23b7ad08 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -178,35 +178,42 @@ static ToolChain *iarToolChain(const FilePath &path, Id language) ToolChain *McuToolChainPackage::toolChain(Id language) const { - ToolChain *tc = nullptr; - if (m_type == TypeMSVC) - tc = msvcToolChain(language); - else if (m_type == TypeGCC) - tc = gccToolChain(language); - else if (m_type == TypeIAR) { + switch (m_type) { + case Type::MSVC: + return msvcToolChain(language); + case Type::GCC: + return gccToolChain(language); + case Type::IAR: { const FilePath compiler = path().pathAppended("/bin/iccarm").withExecutableSuffix(); - tc = iarToolChain(compiler, language); + return iarToolChain(compiler, language); } - else { + case Type::ArmGcc: + case Type::KEIL: + case Type::GHS: + case Type::GHSArm: + case Type::Unsupported: { const QLatin1String compilerName( - language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); - const QString comp = QLatin1String(m_type == TypeArmGcc ? "/bin/arm-none-eabi-%1" : "/bar/foo-keil-%1") - .arg(compilerName); + language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); + const QString comp = QLatin1String(m_type == Type::ArmGcc ? "/bin/arm-none-eabi-%1" + : "/bar/foo-keil-%1") + .arg(compilerName); const FilePath compiler = path().pathAppended(comp).withExecutableSuffix(); - tc = armGccToolChain(compiler, language); + return armGccToolChain(compiler, language); + } + default: + Q_UNREACHABLE(); } - return tc; } QString McuToolChainPackage::toolChainName() const { 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"); + case Type::ArmGcc: return QLatin1String("armgcc"); + case Type::IAR: return QLatin1String("iar"); + case Type::KEIL: return QLatin1String("keil"); + case Type::GHS: return QLatin1String("ghs"); + case Type::GHSArm: return QLatin1String("ghs-arm"); default: return QLatin1String("unsupported"); } } @@ -224,37 +231,38 @@ QVariant McuToolChainPackage::debuggerId() const DebuggerEngineType engineType; switch (m_type) { - case TypeArmGcc: { + case Type::ArmGcc: { sub = QString::fromLatin1("bin/arm-none-eabi-gdb-py"); displayName = McuPackage::tr("Arm GDB at %1"); engineType = Debugger::GdbEngineType; - break; } - case TypeIAR: { + break; + } + case Type::IAR: { sub = QString::fromLatin1("../common/bin/CSpyBat"); displayName = QLatin1String("CSpy"); engineType = Debugger::NoEngineType; // support for IAR missing - break; } - case TypeKEIL: { + break; + } + case Type::KEIL: { sub = QString::fromLatin1("UV4/UV4"); displayName = QLatin1String("KEIL uVision Debugger"); engineType = Debugger::UvscEngineType; - break; } - default: return QVariant(); + break; + } + default: + return QVariant(); } const FilePath command = path().pathAppended(sub).withExecutableSuffix(); - const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command); - QVariant debuggerId; - if (!debugger) { - DebuggerItem newDebugger; - newDebugger.setCommand(command); - newDebugger.setUnexpandedDisplayName(displayName.arg(command.toUserOutput())); - newDebugger.setEngineType(engineType); - debuggerId = DebuggerItemManager::registerDebugger(newDebugger); - } else { - debuggerId = debugger->id(); + if (const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command)) { + return debugger->id(); } - return debuggerId; + + DebuggerItem newDebugger; + newDebugger.setCommand(command); + newDebugger.setUnexpandedDisplayName(displayName.arg(command.toUserOutput())); + newDebugger.setEngineType(engineType); + return DebuggerItemManager::registerDebugger(newDebugger); } McuTarget::McuTarget(const QVersionNumber &qulVersion, @@ -458,33 +466,60 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc static void setKitToolchains(Kit *k, const McuToolChainPackage *tcPackage) { - // No Green Hills toolchain, because support for it is missing. - if (tcPackage->type() == McuToolChainPackage::TypeUnsupported - || tcPackage->type() == McuToolChainPackage::TypeGHS - || tcPackage->type() == McuToolChainPackage::TypeGHSArm) + switch (tcPackage->type()) { + case McuToolChainPackage::Type::Unsupported: + return; + + case McuToolChainPackage::Type::GHS: + case McuToolChainPackage::Type::GHSArm: + return; // No Green Hills toolchain, because support for it is missing. + + case McuToolChainPackage::Type::IAR: + case McuToolChainPackage::Type::KEIL: + case McuToolChainPackage::Type::MSVC: + case McuToolChainPackage::Type::GCC: + case McuToolChainPackage::Type::ArmGcc: + ToolChainKitAspect::setToolChain(k, + tcPackage->toolChain( + ProjectExplorer::Constants::C_LANGUAGE_ID)); + ToolChainKitAspect::setToolChain(k, + tcPackage->toolChain( + ProjectExplorer::Constants::CXX_LANGUAGE_ID)); return; - ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( - ProjectExplorer::Constants::C_LANGUAGE_ID)); - ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( - ProjectExplorer::Constants::CXX_LANGUAGE_ID)); + default: + Q_UNREACHABLE(); + } } static void setKitDebugger(Kit *k, const McuToolChainPackage *tcPackage) { - // Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain - // We rely on that at least in the Desktop case. - if (tcPackage->isDesktopToolchain() - // No Green Hills and IAR debugger, because support for it is missing. - || tcPackage->type() == McuToolChainPackage::TypeUnsupported - || tcPackage->type() == McuToolChainPackage::TypeGHS - || tcPackage->type() == McuToolChainPackage::TypeGHSArm - || tcPackage->type() == McuToolChainPackage::TypeIAR) + if (tcPackage->isDesktopToolchain()) { + // Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain return; + } - const QVariant debuggerId = tcPackage->debuggerId(); - if (debuggerId.isValid()) - Debugger::DebuggerKitAspect::setDebugger(k, debuggerId); + switch (tcPackage->type()) { + case McuToolChainPackage::Type::Unsupported: + case McuToolChainPackage::Type::GHS: + case McuToolChainPackage::Type::GHSArm: + case McuToolChainPackage::Type::IAR: + return; // No Green Hills and IAR debugger, because support for it is missing. + + case McuToolChainPackage::Type::KEIL: + case McuToolChainPackage::Type::MSVC: + case McuToolChainPackage::Type::GCC: + case McuToolChainPackage::Type::ArmGcc: { + const QVariant debuggerId = tcPackage->debuggerId(); + if (debuggerId.isValid()) { + Debugger::DebuggerKitAspect::setDebugger(k, debuggerId); + } + return; + } + + default: + Q_UNREACHABLE(); + } } static void setKitDevice(Kit *k, const McuTarget* mcuTarget) @@ -596,8 +631,8 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const FilePat CMakeConfig config = CMakeConfigurationKitAspect::configuration(k); // CMake ToolChain file for ghs handles CMAKE_*_COMPILER autonomously - if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeGHS && - mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeGHSArm) { + if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::Type::GHS && + mcuTarget->toolChainPackage()->type() != McuToolChainPackage::Type::GHSArm) { config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}")); config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}")); } @@ -638,7 +673,7 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const FilePat if (HostOsInfo::isWindowsHost()) { auto type = mcuTarget->toolChainPackage()->type(); - if (type == McuToolChainPackage::TypeGHS || type == McuToolChainPackage::TypeGHSArm) { + if (type == McuToolChainPackage::Type::GHS || type == McuToolChainPackage::Type::GHSArm) { // See https://bugreports.qt.io/browse/UL-4247?focusedCommentId=565802&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-565802 // and https://bugreports.qt.io/browse/UL-4247?focusedCommentId=565803&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-565803 CMakeGeneratorKitAspect::setGenerator(k, "NMake Makefiles JOM"); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 88b410f974..2287ad61d7 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -74,17 +74,17 @@ McuPackage *createQtForMCUsPackage() static McuToolChainPackage *createMsvcToolChainPackage() { - return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::TypeMSVC); + return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::Type::MSVC); } static McuToolChainPackage *createGccToolChainPackage() { - return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::TypeGCC); + return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::Type::GCC); } static McuToolChainPackage *createUnsupportedToolChainPackage() { - return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::TypeUnsupported); + return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::Type::Unsupported); } static McuToolChainPackage *createArmGccPackage() @@ -116,7 +116,7 @@ static McuToolChainPackage *createArmGccPackage() defaultPath, detectionPath, "GNUArmEmbeddedToolchain", // settingsKey - McuToolChainPackage::TypeArmGcc, + McuToolChainPackage::Type::ArmGcc, envVar, versionDetector); } @@ -138,7 +138,7 @@ static McuToolChainPackage *createGhsToolchainPackage() Utils::HostOsInfo::withExecutableSuffix( "ccv850"), // detectionPath "GHSToolchain", // settingsKey - McuToolChainPackage::TypeGHS, + McuToolChainPackage::Type::GHS, envVar, versionDetector); } @@ -159,7 +159,7 @@ static McuToolChainPackage *createGhsArmToolchainPackage() defaultPath, Utils::HostOsInfo::withExecutableSuffix("cxarm"), // detectionPath "GHSArmToolchain", // settingsKey - McuToolChainPackage::TypeGHSArm, + McuToolChainPackage::Type::GHSArm, envVar, versionDetector); } @@ -193,7 +193,7 @@ static McuToolChainPackage *createIarToolChainPackage() defaultPath, detectionPath, "IARToolchain", // settings key - McuToolChainPackage::TypeIAR, + McuToolChainPackage::Type::IAR, envVar, versionDetector); } @@ -555,7 +555,7 @@ protected: // Desktop toolchains don't need any additional settings if (tcPkg && !tcPkg->isDesktopToolchain() - && tcPkg->type() != McuToolChainPackage::TypeUnsupported) + && tcPkg->type() != McuToolChainPackage::Type::Unsupported) required3rdPartyPkgs.append(tcPkg); // Add setting specific to platform IDE |