diff options
author | Kwangsub Kim <kwangsub.kim@qt.io> | 2022-10-18 14:59:48 +0200 |
---|---|---|
committer | Kwangsub Kim <kwangsub.kim@qt.io> | 2022-10-20 17:55:00 +0000 |
commit | d7f9f45daf6c2daae75120d4ed9bfda152373ded (patch) | |
tree | 3550743a583c3919532f2f07e459d2de79be4c84 /src/plugins/mcusupport/mcupackage.cpp | |
parent | 00b4da6f9787e27a095156555ff756d0e7136e18 (diff) | |
download | qt-creator-d7f9f45daf6c2daae75120d4ed9bfda152373ded.tar.gz |
McuSupport: Identify MinGW toolchain
QtMCUs will support MinGW toolchain for Windows desktop platform,
so MinGW toolchain needs to be identified.
If the default toolchain or a user configured one is a correct
MinGW toolchain, it would be selected. If not, a proper toolchain
would be picked up from the registered toolchains in Qt Creator.
Task-number: UL-6607
Change-Id: I82580d721d9ed916a6b32d35c124a638d7a3e68e
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/mcusupport/mcupackage.cpp')
-rw-r--r-- | src/plugins/mcusupport/mcupackage.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/plugins/mcusupport/mcupackage.cpp b/src/plugins/mcusupport/mcupackage.cpp index 93310399ef..f7f29ba456 100644 --- a/src/plugins/mcusupport/mcupackage.cpp +++ b/src/plugins/mcusupport/mcupackage.cpp @@ -294,7 +294,8 @@ McuToolChainPackage::ToolChainType McuToolChainPackage::toolchainType() const bool McuToolChainPackage::isDesktopToolchain() const { - return m_type == ToolChainType::MSVC || m_type == ToolChainType::GCC; + return m_type == ToolChainType::MSVC || m_type == ToolChainType::GCC + || m_type == ToolChainType::MinGW; } ToolChain *McuToolChainPackage::msvcToolChain(Id language) @@ -320,6 +321,28 @@ ToolChain *McuToolChainPackage::gccToolChain(Id language) return toolChain; } +static ToolChain *mingwToolChain(const FilePath &path, Id language) +{ + ToolChain *toolChain = ToolChainManager::toolChain([&path, language](const ToolChain *t) { + // find a MinGW toolchain having the same path from registered toolchains + const Abi abi = t->targetAbi(); + return t->typeId() == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID + && abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64 + && t->language() == language && t->compilerCommand() == path; + }); + if (!toolChain) { + // if there's no MinGW toolchain having the same path, + // a proper MinGW would be selected from the registered toolchains. + toolChain = ToolChainManager::toolChain([language](const ToolChain *t) { + const Abi abi = t->targetAbi(); + return t->typeId() == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID + && abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64 + && t->language() == language; + }); + } + return toolChain; +} + static ToolChain *armGccToolChain(const FilePath &path, Id language) { ToolChain *toolChain = ToolChainManager::toolChain([&path, language](const ToolChain *t) { @@ -384,6 +407,12 @@ ToolChain *McuToolChainPackage::toolChain(Id language) const return msvcToolChain(language); case ToolChainType::GCC: return gccToolChain(language); + case ToolChainType::MinGW: { + const QLatin1String compilerName( + language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); + const FilePath compilerPath = (path() / "bin" / compilerName).withExecutableSuffix(); + return mingwToolChain(compilerPath, language); + } case ToolChainType::IAR: { const FilePath compiler = (path() / "/bin/iccarm").withExecutableSuffix(); return iarToolChain(compiler, language); @@ -414,6 +443,8 @@ QString McuToolChainPackage::toolChainName() const return QLatin1String("msvc"); case ToolChainType::GCC: return QLatin1String("gcc"); + case ToolChainType::MinGW: + return QLatin1String("mingw"); case ToolChainType::ArmGcc: return QLatin1String("armgcc"); case ToolChainType::IAR: |