forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -66,7 +66,8 @@ static bool compilerExists(const FileName &compilerPath)
|
|||||||
return fi.exists() && fi.isExecutable() && fi.isFile();
|
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())
|
if (compiler.isEmpty() || !compiler.toFileInfo().isExecutable())
|
||||||
return {};
|
return {};
|
||||||
@@ -86,6 +87,8 @@ static Macros dumpPredefinedMacros(const FileName &compiler, const QStringList &
|
|||||||
|
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
arguments.push_back(fakeIn.fileName());
|
arguments.push_back(fakeIn.fileName());
|
||||||
|
if (languageId == ProjectExplorer::Constants::CXX_LANGUAGE_ID)
|
||||||
|
arguments.push_back("--ec++");
|
||||||
arguments.push_back("--predef_macros");
|
arguments.push_back("--predef_macros");
|
||||||
arguments.push_back(outpath);
|
arguments.push_back(outpath);
|
||||||
|
|
||||||
@@ -255,18 +258,20 @@ ToolChain::MacroInspectionRunner IarToolChain::createMacroInspectionRunner() con
|
|||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
|
|
||||||
const Utils::FileName compilerCommand = m_compilerCommand;
|
const Utils::FileName compilerCommand = m_compilerCommand;
|
||||||
const Core::Id lang = language();
|
const Core::Id languageId = language();
|
||||||
|
|
||||||
MacrosCache macrosCache = predefinedMacrosCache();
|
MacrosCache macrosCache = predefinedMacrosCache();
|
||||||
|
|
||||||
return [env, compilerCommand,
|
return [env, compilerCommand,
|
||||||
macrosCache,
|
macrosCache,
|
||||||
lang]
|
languageId]
|
||||||
(const QStringList &flags) {
|
(const QStringList &flags) {
|
||||||
Q_UNUSED(flags)
|
Q_UNUSED(flags)
|
||||||
|
|
||||||
const Macros macros = dumpPredefinedMacros(compilerCommand, env.toStringList());
|
const Macros macros = dumpPredefinedMacros(compilerCommand, languageId,
|
||||||
const auto report = MacroInspectionReport{macros, languageVersion(lang, macros)};
|
env.toStringList());
|
||||||
|
const auto languageVersion = ToolChain::languageVersion(languageId, macros);
|
||||||
|
const auto report = MacroInspectionReport{macros, languageVersion};
|
||||||
macrosCache->insert({}, report);
|
macrosCache->insert({}, report);
|
||||||
|
|
||||||
return report;
|
return report;
|
||||||
@@ -502,21 +507,23 @@ QList<ToolChain *> IarToolChainFactory::autoDetectToolchains(
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> IarToolChainFactory::autoDetectToolchain(
|
QList<ToolChain *> IarToolChainFactory::autoDetectToolchain(
|
||||||
const Candidate &candidate, Core::Id language) const
|
const Candidate &candidate, Core::Id languageId) const
|
||||||
{
|
{
|
||||||
const auto env = Environment::systemEnvironment();
|
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())
|
if (macros.isEmpty())
|
||||||
return {};
|
return {};
|
||||||
const Abi abi = guessAbi(macros);
|
const Abi abi = guessAbi(macros);
|
||||||
|
|
||||||
const auto tc = new IarToolChain(ToolChain::AutoDetection);
|
const auto tc = new IarToolChain(ToolChain::AutoDetection);
|
||||||
tc->setLanguage(language);
|
tc->setLanguage(languageId);
|
||||||
tc->setCompilerCommand(candidate.compilerPath);
|
tc->setCompilerCommand(candidate.compilerPath);
|
||||||
tc->setTargetAbi(abi);
|
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});
|
tc->predefinedMacrosCache()->insert({}, {macros, languageVersion});
|
||||||
return {tc};
|
return {tc};
|
||||||
}
|
}
|
||||||
@@ -594,7 +601,9 @@ void IarToolChainConfigWidget::handleCompilerCommandChange()
|
|||||||
const bool haveCompiler = compilerExists(compilerPath);
|
const bool haveCompiler = compilerExists(compilerPath);
|
||||||
if (haveCompiler) {
|
if (haveCompiler) {
|
||||||
const auto env = Environment::systemEnvironment();
|
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);
|
const Abi guessed = guessAbi(m_macros);
|
||||||
m_abiWidget->setAbis({}, guessed);
|
m_abiWidget->setAbis({}, guessed);
|
||||||
}
|
}
|
||||||
|
@@ -119,7 +119,7 @@ private:
|
|||||||
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
QList<ProjectExplorer::ToolChain *> autoDetectToolchains(const Candidates &candidates,
|
||||||
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) const;
|
const QList<ProjectExplorer::ToolChain *> &alreadyKnown) const;
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetectToolchain(
|
QList<ProjectExplorer::ToolChain *> autoDetectToolchain(
|
||||||
const Candidate &candidate, Core::Id language) const;
|
const Candidate &candidate, Core::Id languageId) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// IarToolChainConfigWidget
|
// IarToolChainConfigWidget
|
||||||
|
Reference in New Issue
Block a user