diff --git a/src/plugins/baremetal/baremetalplugin.cpp b/src/plugins/baremetal/baremetalplugin.cpp index b8383c65b9d..b1fdc14aed1 100644 --- a/src/plugins/baremetal/baremetalplugin.cpp +++ b/src/plugins/baremetal/baremetalplugin.cpp @@ -16,15 +16,7 @@ #include "keiltoolchain.h" #include "sdcctoolchain.h" -#include -#include -#include -#include -#include -#include - #include -#include using namespace ProjectExplorer; @@ -46,9 +38,6 @@ public: class BareMetalPluginPrivate { public: - IarToolChainFactory iarToolChainFactory; - KeilToolChainFactory keilToolChainFactory; - SdccToolChainFactory sdccToolChainFactory; BareMetalDeviceFactory deviceFactory; BareMetalRunConfigurationFactory runConfigurationFactory; BareMetalCustomRunConfigurationFactory customRunConfigurationFactory; @@ -67,6 +56,10 @@ BareMetalPlugin::~BareMetalPlugin() void BareMetalPlugin::initialize() { d = new BareMetalPluginPrivate; + + setupIarToolChain(); + setupKeilToolChain(); + setupSdccToolChain(); } void BareMetalPlugin::extensionsInitialized() diff --git a/src/plugins/baremetal/iarewtoolchain.cpp b/src/plugins/baremetal/iarewtoolchain.cpp index 262516b4b35..a281d4eb528 100644 --- a/src/plugins/baremetal/iarewtoolchain.cpp +++ b/src/plugins/baremetal/iarewtoolchain.cpp @@ -405,17 +405,33 @@ bool IarToolChain::operator==(const ToolChain &other) const } - // IarToolChainFactory -IarToolChainFactory::IarToolChainFactory() +class IarToolChainFactory final : public ToolChainFactory { - setDisplayName(Tr::tr("IAREW")); - setSupportedToolChainType(Constants::IAREW_TOOLCHAIN_TYPEID); - setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, - ProjectExplorer::Constants::CXX_LANGUAGE_ID}); - setToolchainConstructor([] { return new IarToolChain; }); - setUserCreatable(true); +public: + IarToolChainFactory() + { + setDisplayName(Tr::tr("IAREW")); + setSupportedToolChainType(Constants::IAREW_TOOLCHAIN_TYPEID); + setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, + ProjectExplorer::Constants::CXX_LANGUAGE_ID}); + setToolchainConstructor([] { return new IarToolChain; }); + setUserCreatable(true); + } + + Toolchains autoDetect(const ToolchainDetector &detector) const final; + Toolchains detectForImport(const ToolChainDescription &tcd) const final; + +private: + Toolchains autoDetectToolchains(const Candidates &candidates, + const Toolchains &alreadyKnown) const; + Toolchains autoDetectToolchain(const Candidate &candidate, Id languageId) const; +}; + +void setupIarToolChain() +{ + static IarToolChainFactory theIarToolChainFactory; } Toolchains IarToolChainFactory::autoDetect(const ToolchainDetector &detector) const diff --git a/src/plugins/baremetal/iarewtoolchain.h b/src/plugins/baremetal/iarewtoolchain.h index 1b67e9e051f..9fd6e516cd1 100644 --- a/src/plugins/baremetal/iarewtoolchain.h +++ b/src/plugins/baremetal/iarewtoolchain.h @@ -3,25 +3,8 @@ #pragma once -#include - namespace BareMetal::Internal { -class IarToolChainFactory final : public ProjectExplorer::ToolChainFactory -{ -public: - IarToolChainFactory(); - - ProjectExplorer::Toolchains autoDetect( - const ProjectExplorer::ToolchainDetector &detector) const final; - ProjectExplorer::Toolchains detectForImport( - const ProjectExplorer::ToolChainDescription &tcd) const final; - -private: - ProjectExplorer::Toolchains autoDetectToolchains(const Candidates &candidates, - const ProjectExplorer::Toolchains &alreadyKnown) const; - ProjectExplorer::Toolchains autoDetectToolchain( - const Candidate &candidate, Utils::Id languageId) const; -}; +void setupIarToolChain(); } // BareMetal::Internal diff --git a/src/plugins/baremetal/keiltoolchain.cpp b/src/plugins/baremetal/keiltoolchain.cpp index d39dc9f03b0..f6a097f0a41 100644 --- a/src/plugins/baremetal/keiltoolchain.cpp +++ b/src/plugins/baremetal/keiltoolchain.cpp @@ -538,14 +538,31 @@ QStringList KeilToolChain::extraCodeModelFlags() const // KeilToolchainFactory -KeilToolChainFactory::KeilToolChainFactory() +class KeilToolChainFactory final : public ToolChainFactory { - setDisplayName(Tr::tr("KEIL")); - setSupportedToolChainType(Constants::KEIL_TOOLCHAIN_TYPEID); - setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, - ProjectExplorer::Constants::CXX_LANGUAGE_ID}); - setToolchainConstructor([] { return new KeilToolChain; }); - setUserCreatable(true); +public: + KeilToolChainFactory() + { + setDisplayName(Tr::tr("KEIL")); + setSupportedToolChainType(Constants::KEIL_TOOLCHAIN_TYPEID); + setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID, + ProjectExplorer::Constants::CXX_LANGUAGE_ID}); + setToolchainConstructor([] { return new KeilToolChain; }); + setUserCreatable(true); + } + + Toolchains autoDetect(const ToolchainDetector &detector) const final; + +private: + Toolchains autoDetectToolchains(const Candidates &candidates, + const Toolchains &alreadyKnown) const; + Toolchains autoDetectToolchain( + const Candidate &candidate, Utils::Id language) const; +}; + +void setupKeilToolChain() +{ + static KeilToolChainFactory theKeilToolChainFactory; } // Parse the 'tools.ini' file to fetch a toolchain version. diff --git a/src/plugins/baremetal/keiltoolchain.h b/src/plugins/baremetal/keiltoolchain.h index 6f897369095..652fe6141fb 100644 --- a/src/plugins/baremetal/keiltoolchain.h +++ b/src/plugins/baremetal/keiltoolchain.h @@ -3,23 +3,8 @@ #pragma once -#include - namespace BareMetal::Internal { -class KeilToolChainFactory final : public ProjectExplorer::ToolChainFactory -{ -public: - KeilToolChainFactory(); - - ProjectExplorer::Toolchains autoDetect( - const ProjectExplorer::ToolchainDetector &detector) const final; - -private: - ProjectExplorer::Toolchains autoDetectToolchains(const Candidates &candidates, - const ProjectExplorer::Toolchains &alreadyKnown) const; - ProjectExplorer::Toolchains autoDetectToolchain( - const Candidate &candidate, Utils::Id language) const; -}; +void setupKeilToolChain(); } // BareMetal::Internal diff --git a/src/plugins/baremetal/sdcctoolchain.cpp b/src/plugins/baremetal/sdcctoolchain.cpp index e57dd9fafe2..411b2317c5f 100644 --- a/src/plugins/baremetal/sdcctoolchain.cpp +++ b/src/plugins/baremetal/sdcctoolchain.cpp @@ -300,13 +300,29 @@ bool SdccToolChain::operator==(const ToolChain &other) const // SdccToolChainFactory -SdccToolChainFactory::SdccToolChainFactory() +class SdccToolChainFactory final : public ToolChainFactory { - setDisplayName(Tr::tr("SDCC")); - setSupportedToolChainType(Constants::SDCC_TOOLCHAIN_TYPEID); - setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID}); - setToolchainConstructor([] { return new SdccToolChain; }); - setUserCreatable(true); +public: + SdccToolChainFactory() + { + setDisplayName(Tr::tr("SDCC")); + setSupportedToolChainType(Constants::SDCC_TOOLCHAIN_TYPEID); + setSupportedLanguages({ProjectExplorer::Constants::C_LANGUAGE_ID}); + setToolchainConstructor([] { return new SdccToolChain; }); + setUserCreatable(true); + } + + Toolchains autoDetect(const ToolchainDetector &detector) const final; + +private: + Toolchains autoDetectToolchains(const Candidates &candidates, + const Toolchains &alreadyKnown) const; + Toolchains autoDetectToolchain(const Candidate &candidate, Id language) const; +}; + +void setupSdccToolChain() +{ + static SdccToolChainFactory theSdccToolChainFactory; } Toolchains SdccToolChainFactory::autoDetect(const ToolchainDetector &detector) const diff --git a/src/plugins/baremetal/sdcctoolchain.h b/src/plugins/baremetal/sdcctoolchain.h index 972eee000d5..431573afe48 100644 --- a/src/plugins/baremetal/sdcctoolchain.h +++ b/src/plugins/baremetal/sdcctoolchain.h @@ -3,23 +3,8 @@ #pragma once -#include - namespace BareMetal::Internal { -class SdccToolChainFactory final : public ProjectExplorer::ToolChainFactory -{ -public: - SdccToolChainFactory(); - - ProjectExplorer::Toolchains autoDetect( - const ProjectExplorer::ToolchainDetector &detector) const final; - -private: - ProjectExplorer::Toolchains autoDetectToolchains(const Candidates &candidates, - const ProjectExplorer::Toolchains &alreadyKnown) const; - ProjectExplorer::Toolchains autoDetectToolchain( - const Candidate &candidate, Utils::Id language) const; -}; +void setupSdccToolChain(); } // BareMetal::Internal