forked from qt-creator/qt-creator
Clang: Explicitly set the target triple
As for the analyzer, this makes us independent of the default triple and will most likely reduce the maintenance - e.g. the target implies certain internal command line arguments, we will profit from added ones. This fixes parsing of mingw headers with the clang code model. Change-Id: I722b981125a80fac5f62a7af40a83ecdd7bbf811 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
This commit is contained in:
@@ -88,6 +88,7 @@ public:
|
|||||||
|
|
||||||
LibClangOptionsBuilder optionsBuilder(*projectPart.data());
|
LibClangOptionsBuilder optionsBuilder(*projectPart.data());
|
||||||
|
|
||||||
|
optionsBuilder.addTargetTriple();
|
||||||
optionsBuilder.addLanguageOption(fileKind);
|
optionsBuilder.addLanguageOption(fileKind);
|
||||||
optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true);
|
optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true);
|
||||||
|
|
||||||
|
@@ -236,6 +236,8 @@ public:
|
|||||||
const ExtraToolChainInfo &extraParams)
|
const ExtraToolChainInfo &extraParams)
|
||||||
{
|
{
|
||||||
ClangStaticAnalyzerOptionsBuilder optionsBuilder(projectPart);
|
ClangStaticAnalyzerOptionsBuilder optionsBuilder(projectPart);
|
||||||
|
|
||||||
|
optionsBuilder.addTargetTriple();
|
||||||
optionsBuilder.addLanguageOption(fileKind);
|
optionsBuilder.addLanguageOption(fileKind);
|
||||||
optionsBuilder.addOptionsForLanguage(false);
|
optionsBuilder.addOptionsForLanguage(false);
|
||||||
|
|
||||||
@@ -258,7 +260,6 @@ public:
|
|||||||
|
|
||||||
QStringList options = optionsBuilder.options();
|
QStringList options = optionsBuilder.options();
|
||||||
prependWordWidthArgumentIfNotIncluded(&options, extraParams.wordWidth);
|
prependWordWidthArgumentIfNotIncluded(&options, extraParams.wordWidth);
|
||||||
prependTargetTripleIfNotIncludedAndNotEmpty(&options, extraParams.targetTriple);
|
|
||||||
appendMsCompatibility2015OptionForMsvc2015(&options, extraParams.isMsvc2015);
|
appendMsCompatibility2015OptionForMsvc2015(&options, extraParams.isMsvc2015);
|
||||||
undefineCppLanguageFeatureMacrosForMsvc2015(&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
|
void addLanguageOption(ProjectFile::Kind fileKind) override
|
||||||
{
|
{
|
||||||
if (m_isMsvcToolchain)
|
if (m_isMsvcToolchain)
|
||||||
|
@@ -61,6 +61,14 @@ void CompilerOptionsBuilder::addDefine(const QByteArray &defineLine)
|
|||||||
m_options.append(defineLineToDefineOption(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()
|
void CompilerOptionsBuilder::addHeaderPathOptions()
|
||||||
{
|
{
|
||||||
typedef ProjectPartHeaderPath HeaderPath;
|
typedef ProjectPartHeaderPath HeaderPath;
|
||||||
|
@@ -45,6 +45,7 @@ public:
|
|||||||
void addDefine(const QByteArray &defineLine);
|
void addDefine(const QByteArray &defineLine);
|
||||||
|
|
||||||
// Add options based on project part
|
// Add options based on project part
|
||||||
|
virtual void addTargetTriple();
|
||||||
void addHeaderPathOptions();
|
void addHeaderPathOptions();
|
||||||
void addToolchainAndProjectDefines();
|
void addToolchainAndProjectDefines();
|
||||||
virtual void addLanguageOption(ProjectFile::Kind fileKind);
|
virtual void addLanguageOption(ProjectFile::Kind fileKind);
|
||||||
|
@@ -104,6 +104,7 @@ public: // fields
|
|||||||
QByteArray projectDefines;
|
QByteArray projectDefines;
|
||||||
QByteArray toolchainDefines;
|
QByteArray toolchainDefines;
|
||||||
Core::Id toolchainType;
|
Core::Id toolchainType;
|
||||||
|
QString targetTriple;
|
||||||
ProjectPartHeaderPaths headerPaths;
|
ProjectPartHeaderPaths headerPaths;
|
||||||
QStringList precompiledHeaders;
|
QStringList precompiledHeaders;
|
||||||
LanguageVersion languageVersion;
|
LanguageVersion languageVersion;
|
||||||
|
@@ -262,6 +262,23 @@ ProjectPartHeaderPath toProjectPartHeaderPath(const ProjectExplorer::HeaderPath
|
|||||||
return ProjectPartHeaderPath(headerPath.path(), headerPathType);
|
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->toolchainDefines = toolChain->predefinedMacros(commandLineFlags);
|
||||||
projectPart->toolchainType = toolChain->typeId();
|
projectPart->toolchainType = toolChain->typeId();
|
||||||
|
projectPart->targetTriple = targetTriple(projectPart->project, toolChain->typeId());
|
||||||
projectPart->updateLanguageFeatures();
|
projectPart->updateLanguageFeatures();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user