diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2019-05-09 23:38:13 +0300 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-05-10 05:37:06 +0000 |
commit | 756e96f270a703097fc02e5ae9c84c09bf3933f7 (patch) | |
tree | a00bfbbea95b2c75de4894cd0a38ba61f3beb67a /src/plugins/baremetal | |
parent | 3ec78efb58bcde07d3cc2a9c0b58fac5a68f5ef3 (diff) |
bare-metal: Add missed C++ language option for IAR toolchain
... at dumping of a predefined macros.
The default compiler language is C, so, it is enough to add
an option only for the C++ language.
Also has been made some related code refactoring.
Change-Id: I8205aab684aed071d47d2ac95161e95c42319e9e
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/baremetal')
-rw-r--r-- | src/plugins/baremetal/iarewtoolchain.cpp | 31 | ||||
-rw-r--r-- | src/plugins/baremetal/iarewtoolchain.h | 2 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/plugins/baremetal/iarewtoolchain.cpp b/src/plugins/baremetal/iarewtoolchain.cpp index a094d47329a..13b45336014 100644 --- a/src/plugins/baremetal/iarewtoolchain.cpp +++ b/src/plugins/baremetal/iarewtoolchain.cpp @@ -66,7 +66,8 @@ static bool compilerExists(const FileName &compilerPath) return fi.exists() && fi.isExecutable() && fi.isFile(); } -static Macros dumpPredefinedMacros(const FileName &compiler, const QStringList &env) +static Macros dumpPredefinedMacros(const FileName &compiler, const Core::Id languageId, + const QStringList &env) { if (compiler.isEmpty() || !compiler.toFileInfo().isExecutable()) return {}; @@ -86,6 +87,8 @@ static Macros dumpPredefinedMacros(const FileName &compiler, const QStringList & QStringList arguments; arguments.push_back(fakeIn.fileName()); + if (languageId == ProjectExplorer::Constants::CXX_LANGUAGE_ID) + arguments.push_back("--ec++"); arguments.push_back("--predef_macros"); arguments.push_back(outpath); @@ -255,18 +258,20 @@ ToolChain::MacroInspectionRunner IarToolChain::createMacroInspectionRunner() con addToEnvironment(env); const Utils::FileName compilerCommand = m_compilerCommand; - const Core::Id lang = language(); + const Core::Id languageId = language(); MacrosCache macrosCache = predefinedMacrosCache(); return [env, compilerCommand, macrosCache, - lang] + languageId] (const QStringList &flags) { Q_UNUSED(flags) - const Macros macros = dumpPredefinedMacros(compilerCommand, env.toStringList()); - const auto report = MacroInspectionReport{macros, languageVersion(lang, macros)}; + const Macros macros = dumpPredefinedMacros(compilerCommand, languageId, + env.toStringList()); + const auto languageVersion = ToolChain::languageVersion(languageId, macros); + const auto report = MacroInspectionReport{macros, languageVersion}; macrosCache->insert({}, report); return report; @@ -502,21 +507,23 @@ QList<ToolChain *> IarToolChainFactory::autoDetectToolchains( } QList<ToolChain *> IarToolChainFactory::autoDetectToolchain( - const Candidate &candidate, Core::Id language) const + const Candidate &candidate, Core::Id languageId) const { const auto env = Environment::systemEnvironment(); - const Macros macros = dumpPredefinedMacros(candidate.compilerPath, env.toStringList()); + const Macros macros = dumpPredefinedMacros(candidate.compilerPath, languageId, + env.toStringList()); if (macros.isEmpty()) return {}; const Abi abi = guessAbi(macros); const auto tc = new IarToolChain(ToolChain::AutoDetection); - tc->setLanguage(language); + tc->setLanguage(languageId); tc->setCompilerCommand(candidate.compilerPath); tc->setTargetAbi(abi); - tc->setDisplayName(buildDisplayName(abi.architecture(), language, candidate.compilerVersion)); + tc->setDisplayName(buildDisplayName(abi.architecture(), languageId, + candidate.compilerVersion)); - const auto languageVersion = ToolChain::languageVersion(language, macros); + const auto languageVersion = ToolChain::languageVersion(languageId, macros); tc->predefinedMacrosCache()->insert({}, {macros, languageVersion}); return {tc}; } @@ -594,7 +601,9 @@ void IarToolChainConfigWidget::handleCompilerCommandChange() const bool haveCompiler = compilerExists(compilerPath); if (haveCompiler) { const auto env = Environment::systemEnvironment(); - m_macros = dumpPredefinedMacros(compilerPath, env.toStringList()); + const auto languageId = toolChain()->language(); + m_macros = dumpPredefinedMacros(compilerPath, languageId, + env.toStringList()); const Abi guessed = guessAbi(m_macros); m_abiWidget->setAbis({}, guessed); } diff --git a/src/plugins/baremetal/iarewtoolchain.h b/src/plugins/baremetal/iarewtoolchain.h index 751bd78b444..917ee680a76 100644 --- a/src/plugins/baremetal/iarewtoolchain.h +++ b/src/plugins/baremetal/iarewtoolchain.h @@ -119,7 +119,7 @@ private: QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates, const QList<ProjectExplorer::ToolChain *> &alreadyKnown) const; QList<ProjectExplorer::ToolChain *> autoDetectToolchain( - const Candidate &candidate, Core::Id language) const; + const Candidate &candidate, Core::Id languageId) const; }; // IarToolChainConfigWidget |