CppTools: Apply SkipBuiltIn also to toolchain defines

The only place where Yes is used is the compilation DB, which doesn't
need these defines anyway.

Also add -fPIC for Qt compatibility.

This reduces the compile_commands.json file for Qt Creator from 180M to 33M.

Change-Id: Idd3b363c3a143b1d79f97962c4ff9ee61d7767a4
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Orgad Shaneh
2018-09-20 23:38:06 +03:00
committed by Orgad Shaneh
parent cc1e03a649
commit f07396b86f
2 changed files with 15 additions and 11 deletions

View File

@@ -43,14 +43,14 @@ namespace CppTools {
CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart,
UseSystemHeader useSystemHeader,
SkipBuiltIn skipBuiltInHeaderPaths,
SkipBuiltIn skipBuiltInHeaderPathsAndDefines,
QString clangVersion,
QString clangResourceDirectory)
: m_projectPart(projectPart)
, m_useSystemHeader(useSystemHeader)
, m_clangVersion(clangVersion)
, m_clangResourceDirectory(clangResourceDirectory)
, m_skipBuiltInHeaderPaths(skipBuiltInHeaderPaths)
, m_skipBuiltInHeaderPathsAndDefines(skipBuiltInHeaderPathsAndDefines)
{
}
@@ -85,7 +85,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
undefineCppLanguageFeatureMacrosForMsvc2015();
addDefineFunctionMacrosMsvc();
addGlobalUndef();
addToolchainFlags();
addPrecompiledHeaderOptions(pchUsage);
addHeaderPathOptions();
addProjectConfigFileInclude();
@@ -305,7 +305,7 @@ void CompilerOptionsBuilder::addHeaderPathOptions()
m_options.append(includes);
m_options.append(systemIncludes);
if (m_skipBuiltInHeaderPaths == SkipBuiltIn::Yes)
if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::Yes)
return;
// Exclude all built-in includes except Clang resource directory.
@@ -351,7 +351,8 @@ void CompilerOptionsBuilder::addPrecompiledHeaderOptions(PchUsage pchUsage)
void CompilerOptionsBuilder::addToolchainAndProjectMacros()
{
addMacros(m_projectPart.toolChainMacros);
if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::No)
addMacros(m_projectPart.toolChainMacros);
addMacros(m_projectPart.projectMacros);
}
@@ -634,12 +635,15 @@ void CompilerOptionsBuilder::addWrappedQtHeadersIncludePath(QStringList &list)
}
}
void CompilerOptionsBuilder::addGlobalUndef()
void CompilerOptionsBuilder::addToolchainFlags()
{
// In case of MSVC we need builtin clang defines to correctly handle clang includes
if (m_projectPart.toolchainType != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID
&& m_projectPart.toolchainType != ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
add("-undef");
&& m_projectPart.toolchainType != ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
if (m_skipBuiltInHeaderPathsAndDefines == SkipBuiltIn::No)
add("-undef");
else
add("-fPIC");
}
}

View File

@@ -53,7 +53,7 @@ public:
CompilerOptionsBuilder(const ProjectPart &projectPart,
UseSystemHeader useSystemHeader = UseSystemHeader::No,
SkipBuiltIn skipBuiltInHeaderPaths = SkipBuiltIn::No,
SkipBuiltIn skipBuiltInHeaderPathsAndDefines = SkipBuiltIn::No,
QString clangVersion = QString(),
QString clangResourceDirectory = QString());
virtual ~CompilerOptionsBuilder() {}
@@ -77,7 +77,7 @@ public:
// Add options based on project part
void addWordWidth();
void addGlobalUndef();
void addToolchainFlags();
void addHeaderPathOptions();
void addPrecompiledHeaderOptions(PchUsage pchUsage);
virtual void addToolchainAndProjectMacros();
@@ -113,7 +113,7 @@ private:
QString m_clangVersion;
QString m_clangResourceDirectory;
SkipBuiltIn m_skipBuiltInHeaderPaths;
SkipBuiltIn m_skipBuiltInHeaderPathsAndDefines;
};
} // namespace CppTools