From e51683412b311aaafbf4c649a514695c4e7a156c Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Fri, 15 Dec 2017 15:28:13 +0100 Subject: [PATCH] ProjectPart: save codegen flags in project part And add them to other clang code model arguments. These flags provide architecture for cross-compilation when ios kit is selected. Task-number: QTCREATORBUG-19437 Task-number: QTCREATORBUG-19430 Change-Id: I7a485f49d637371bb28b2096086d7d8a4b0c404a Reviewed-by: Tobias Hunger --- src/plugins/cpptools/compileroptionsbuilder.cpp | 9 +++++++++ src/plugins/cpptools/compileroptionsbuilder.h | 1 + src/plugins/cpptools/cppprojectinfogenerator.cpp | 3 ++- src/plugins/cpptools/projectinfo.cpp | 4 +++- src/plugins/cpptools/projectinfo.h | 3 ++- src/plugins/cpptools/projectpart.h | 1 + src/plugins/projectexplorer/gcctoolchain.cpp | 5 +++++ src/plugins/projectexplorer/gcctoolchain.h | 1 + src/plugins/projectexplorer/toolchain.h | 1 + 9 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 8164009bf1c..26a133824ad 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -52,6 +52,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind, addWordWidth(); addTargetTriple(); + addExtraCodeModelFlags(); addLanguageOption(fileKind); addOptionsForLanguage(/*checkForBorlandExtensions*/ true); enableExceptions(); @@ -104,6 +105,14 @@ void CompilerOptionsBuilder::addTargetTriple() } } +void CompilerOptionsBuilder::addExtraCodeModelFlags() +{ + // extraCodeModelFlags keep build architecture for cross-compilation. + // In case of iOS build target triple has aarch64 archtecture set which makes + // code model fail with CXError_Failure. To fix that we explicitly provide architecture. + m_options.append(m_projectPart.extraCodeModelFlags); +} + void CompilerOptionsBuilder::enableExceptions() { add(QLatin1String("-fcxx-exceptions")); diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index d27f19ba483..2f860e510bd 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -45,6 +45,7 @@ public: virtual ~CompilerOptionsBuilder() {} virtual void addTargetTriple(); + virtual void addExtraCodeModelFlags(); virtual void enableExceptions(); virtual void addPredefinedHeaderPathsOptions(); virtual void addLanguageOption(ProjectFile::Kind fileKind); diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index 4a76052c666..4afa69755f9 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -52,6 +52,7 @@ public: m_projectPart.isMsvc2015Toolchain = m_tcInfo.isMsvc2015ToolChain; m_projectPart.toolChainWordWidth = mapWordWith(m_tcInfo.wordWidth); m_projectPart.toolChainTargetTriple = m_tcInfo.targetTriple; + m_projectPart.extraCodeModelFlags = m_tcInfo.extraCodeModelFlags; m_projectPart.warningFlags = m_flags.warningFlags; @@ -128,7 +129,7 @@ private: const QList systemHeaderPaths = m_tcInfo.headerPathsRunner(m_flags.commandLineFlags, - m_tcInfo.sysRoothPath); + m_tcInfo.sysRootPath); ProjectPartHeaderPaths &headerPaths = m_projectPart.headerPaths; for (const ProjectExplorer::HeaderPath &header : systemHeaderPaths) { diff --git a/src/plugins/cpptools/projectinfo.cpp b/src/plugins/cpptools/projectinfo.cpp index e0dbee363fc..22028afe587 100644 --- a/src/plugins/cpptools/projectinfo.cpp +++ b/src/plugins/cpptools/projectinfo.cpp @@ -26,6 +26,7 @@ #include "projectinfo.h" #include +#include #include #include @@ -41,10 +42,11 @@ ToolChainInfo::ToolChainInfo(const ProjectExplorer::ToolChain *toolChain, = toolChain->targetAbi().osFlavor() == ProjectExplorer::Abi::WindowsMsvc2015Flavor; wordWidth = toolChain->targetAbi().wordWidth(); targetTriple = toolChain->originalTargetTriple(); + extraCodeModelFlags = toolChain->extraCodeModelFlags(); // ...and save the potentially expensive operations for later so that // they can be run from a worker thread. - sysRoothPath = ProjectExplorer::SysRootKitInformation::sysRoot(kit).toString(); + sysRootPath = ProjectExplorer::SysRootKitInformation::sysRoot(kit).toString(); headerPathsRunner = toolChain->createSystemHeaderPathsRunner(); predefinedMacrosRunner = toolChain->createPredefinedMacrosRunner(); } diff --git a/src/plugins/cpptools/projectinfo.h b/src/plugins/cpptools/projectinfo.h index ee016f5b3ea..50596b79b00 100644 --- a/src/plugins/cpptools/projectinfo.h +++ b/src/plugins/cpptools/projectinfo.h @@ -54,8 +54,9 @@ public: bool isMsvc2015ToolChain = false; unsigned wordWidth = 0; QString targetTriple; + QStringList extraCodeModelFlags; - QString sysRoothPath; // For headerPathsRunner. + QString sysRootPath; // For headerPathsRunner. ProjectExplorer::ToolChain::SystemHeaderPathsRunner headerPathsRunner; ProjectExplorer::ToolChain::PredefinedMacrosRunner predefinedMacrosRunner; }; diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index 51b620f0c35..c8f1700f967 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -140,6 +140,7 @@ public: ProjectExplorer::Macros toolChainMacros; ToolChainWordWidth toolChainWordWidth = WordWidth32Bit; QString toolChainTargetTriple; + QStringList extraCodeModelFlags; BuildTargetType buildTargetType = Unknown; }; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 58b6117d4c7..0650827f43c 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -774,6 +774,11 @@ void GccToolChain::setPlatformCodeGenFlags(const QStringList &flags) } } +QStringList GccToolChain::extraCodeModelFlags() const +{ + return platformCodeGenFlags(); +} + /*! Code gen flags that have to be passed to the compiler. */ diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index f2b0795aab5..44f9b91b96a 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -165,6 +165,7 @@ public: void resetToolChain(const Utils::FileName &); Utils::FileName compilerCommand() const override; void setPlatformCodeGenFlags(const QStringList &); + QStringList extraCodeModelFlags() const override; QStringList platformCodeGenFlags() const; void setPlatformLinkerFlags(const QStringList &); QStringList platformLinkerFlags() const; diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 10c86c9e920..af8241b953d 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -100,6 +100,7 @@ public: virtual Abi targetAbi() const = 0; virtual QList supportedAbis() const; virtual QString originalTargetTriple() const { return QString(); } + virtual QStringList extraCodeModelFlags() const { return QStringList(); } virtual bool isValid() const = 0;