aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/baremetal
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2019-05-09 23:38:13 +0300
committerhjk <hjk@qt.io>2019-05-10 05:37:06 +0000
commit756e96f270a703097fc02e5ae9c84c09bf3933f7 (patch)
treea00bfbbea95b2c75de4894cd0a38ba61f3beb67a /src/plugins/baremetal
parent3ec78efb58bcde07d3cc2a9c0b58fac5a68f5ef3 (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.cpp31
-rw-r--r--src/plugins/baremetal/iarewtoolchain.h2
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