diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 4dbeaca1c14..39eeeb31878 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -88,6 +88,7 @@ public: LibClangOptionsBuilder optionsBuilder(*projectPart.data()); + optionsBuilder.addTargetTriple(); optionsBuilder.addLanguageOption(fileKind); optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true); diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index d72160403a6..0789ace0c81 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -236,6 +236,8 @@ public: const ExtraToolChainInfo &extraParams) { ClangStaticAnalyzerOptionsBuilder optionsBuilder(projectPart); + + optionsBuilder.addTargetTriple(); optionsBuilder.addLanguageOption(fileKind); optionsBuilder.addOptionsForLanguage(false); @@ -258,7 +260,6 @@ public: QStringList options = optionsBuilder.options(); prependWordWidthArgumentIfNotIncluded(&options, extraParams.wordWidth); - prependTargetTripleIfNotIncludedAndNotEmpty(&options, extraParams.targetTriple); appendMsCompatibility2015OptionForMsvc2015(&options, extraParams.isMsvc2015); undefineCppLanguageFeatureMacrosForMsvc2015(&options, extraParams.isMsvc2015); @@ -272,6 +273,15 @@ private: { } + void addTargetTriple() override + { + // For MSVC toolchains we use clang-cl.exe, so there is nothing to do here since + // 1) clang-cl.exe does not understand the "-triple" option + // 2) clang-cl.exe already hardcodes the right triple value (even if built with mingw) + if (m_projectPart.toolchainType != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) + CompilerOptionsBuilder::addTargetTriple(); + } + void addLanguageOption(ProjectFile::Kind fileKind) override { if (m_isMsvcToolchain) diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index c484e2b1854..b520babef13 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -61,6 +61,14 @@ void CompilerOptionsBuilder::addDefine(const QByteArray &defineLine) m_options.append(defineLineToDefineOption(defineLine)); } +void CompilerOptionsBuilder::addTargetTriple() +{ + if (!m_projectPart.targetTriple.isEmpty()) { + m_options.append(QLatin1String("-target")); + m_options.append(m_projectPart.targetTriple); + } +} + void CompilerOptionsBuilder::addHeaderPathOptions() { typedef ProjectPartHeaderPath HeaderPath; diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index f3e4cbd9df9..c259c8cf4dc 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -45,6 +45,7 @@ public: void addDefine(const QByteArray &defineLine); // Add options based on project part + virtual void addTargetTriple(); void addHeaderPathOptions(); void addToolchainAndProjectDefines(); virtual void addLanguageOption(ProjectFile::Kind fileKind); diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index a9875ee69d7..0f379ccfe3c 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -104,6 +104,7 @@ public: // fields QByteArray projectDefines; QByteArray toolchainDefines; Core::Id toolchainType; + QString targetTriple; ProjectPartHeaderPaths headerPaths; QStringList precompiledHeaders; LanguageVersion languageVersion; diff --git a/src/plugins/cpptools/projectpartbuilder.cpp b/src/plugins/cpptools/projectpartbuilder.cpp index 50329aa7ebc..2cc08c7bd5d 100644 --- a/src/plugins/cpptools/projectpartbuilder.cpp +++ b/src/plugins/cpptools/projectpartbuilder.cpp @@ -262,6 +262,23 @@ ProjectPartHeaderPath toProjectPartHeaderPath(const ProjectExplorer::HeaderPath return ProjectPartHeaderPath(headerPath.path(), headerPathType); } +QString targetTriple(ProjectExplorer::Project *project, const Core::Id &toolchainId) +{ + using namespace ProjectExplorer; + + if (toolchainId == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) + return QLatin1String("i686-pc-windows-msvc"); + + if (project) { + if (Target *target = project->activeTarget()) { + if (ToolChain *toolChain = ToolChainKitInformation::toolChain(target->kit())) + return toolChain->originalTargetTriple(); + } + } + + return QString(); +} + } /*! @@ -324,6 +341,7 @@ void ProjectPartBuilder::evaluateProjectPartToolchain( projectPart->toolchainDefines = toolChain->predefinedMacros(commandLineFlags); projectPart->toolchainType = toolChain->typeId(); + projectPart->targetTriple = targetTriple(projectPart->project, toolChain->typeId()); projectPart->updateLanguageFeatures(); }