|
|
@@ -43,7 +43,7 @@ if (NOT CMAKE_SCRIPT_MODE_FILE) |
|
|
|
endif() |
|
|
|
|
|
|
|
set (COTIRE_CMAKE_MODULE_FILE "${CMAKE_CURRENT_LIST_FILE}") |
|
|
|
set (COTIRE_CMAKE_MODULE_VERSION "1.7.11") |
|
|
|
set (COTIRE_CMAKE_MODULE_VERSION "1.8.0") |
|
|
|
|
|
|
|
# activate select policies |
|
|
|
if (POLICY CMP0025) |
|
|
@@ -1545,16 +1545,36 @@ function (cotire_add_makedep_flags _language _compilerID _compilerVersion _flags |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Clang") |
|
|
|
# Clang options used |
|
|
|
# -H print the name of each header file used |
|
|
|
# -E invoke preprocessor |
|
|
|
# -fno-color-diagnostics don't prints diagnostics in color |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags -H -E -fno-color-diagnostics) |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-H -E -fno-color-diagnostics") |
|
|
|
if (UNIX) |
|
|
|
# Clang options used |
|
|
|
# -H print the name of each header file used |
|
|
|
# -E invoke preprocessor |
|
|
|
# -fno-color-diagnostics do not print diagnostics in color |
|
|
|
# -Eonly just run preprocessor, no output |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags -H -E -fno-color-diagnostics -Xclang -Eonly) |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-H -E -fno-color-diagnostics -Xclang -Eonly") |
|
|
|
endif() |
|
|
|
elseif (WIN32) |
|
|
|
# Clang-cl.exe options used |
|
|
|
# /TC treat all files named on the command line as C source files |
|
|
|
# /TP treat all files named on the command line as C++ source files |
|
|
|
# /EP preprocess to stdout without #line directives |
|
|
|
# -H print the name of each header file used |
|
|
|
# -fno-color-diagnostics do not print diagnostics in color |
|
|
|
# -Eonly just run preprocessor, no output |
|
|
|
set (_sourceFileTypeC "/TC") |
|
|
|
set (_sourceFileTypeCXX "/TP") |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "${_sourceFileType${_language}}" /EP -fno-color-diagnostics -Xclang -H -Xclang -Eonly) |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "${_sourceFileType${_language}} /EP -fno-color-diagnostics -Xclang -H -Xclang -Eonly") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Intel") |
|
|
|
if (WIN32) |
|
|
@@ -1628,8 +1648,8 @@ function (cotire_add_pch_compilation_flags _language _compilerID _compilerVersio |
|
|
|
set (_flags "${_flags} /Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "GNU|Clang") |
|
|
|
# GCC / Clang options used |
|
|
|
elseif (_compilerID MATCHES "GNU") |
|
|
|
# GCC options used |
|
|
|
# -x specify the source language |
|
|
|
# -c compile but do not link |
|
|
|
# -o place output in file |
|
|
@@ -1639,11 +1659,52 @@ function (cotire_add_pch_compilation_flags _language _compilerID _compilerVersio |
|
|
|
set (_xLanguage_CXX "c++-header") |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "-x" "${_xLanguage_${_language}}" "-c" "${_prefixFile}" -o "${_pchFile}") |
|
|
|
list (APPEND _flags -x "${_xLanguage_${_language}}" -c "${_prefixFile}" -o "${_pchFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-x ${_xLanguage_${_language}} -c \"${_prefixFile}\" -o \"${_pchFile}\"") |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Clang") |
|
|
|
if (UNIX) |
|
|
|
# Clang options used |
|
|
|
# -x specify the source language |
|
|
|
# -c compile but do not link |
|
|
|
# -o place output in file |
|
|
|
# -fno-pch-timestamp disable inclusion of timestamp in precompiled headers (clang 4.0.0+) |
|
|
|
set (_xLanguage_C "c-header") |
|
|
|
set (_xLanguage_CXX "c++-header") |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags -x "${_xLanguage_${_language}}" -c "${_prefixFile}" -o "${_pchFile}") |
|
|
|
if (NOT "${_compilerVersion}" VERSION_LESS "4.0.0") |
|
|
|
list (APPEND _flags -Xclang -fno-pch-timestamp) |
|
|
|
endif() |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-x ${_xLanguage_${_language}} -c \"${_prefixFile}\" -o \"${_pchFile}\"") |
|
|
|
if (NOT "${_compilerVersion}" VERSION_LESS "4.0.0") |
|
|
|
set (_flags "${_flags} -Xclang -fno-pch-timestamp") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (WIN32) |
|
|
|
# Clang-cl.exe options used |
|
|
|
# /Yc creates a precompiled header file |
|
|
|
# /Fp specifies precompiled header binary file name |
|
|
|
# /FI forces inclusion of file |
|
|
|
# /Zs syntax check only |
|
|
|
# /TC treat all files named on the command line as C source files |
|
|
|
# /TP treat all files named on the command line as C++ source files |
|
|
|
set (_sourceFileTypeC "/TC") |
|
|
|
set (_sourceFileTypeCXX "/TP") |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "${_sourceFileType${_language}}" |
|
|
|
"/Yc${_prefixFile}" "/Fp${_pchFile}" "/FI${_prefixFile}" /Zs "${_hostFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "/Yc\"${_prefixFile}\" /Fp\"${_pchFile}\" /FI\"${_prefixFile}\"") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Intel") |
|
|
|
if (WIN32) |
|
|
|
file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) |
|
|
@@ -1763,17 +1824,40 @@ function (cotire_add_prefix_pch_inclusion_flags _language _compilerID _compilerV |
|
|
|
set (_flags "-Winvalid-pch -include \"${_prefixFile}\"") |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Clang") |
|
|
|
# Clang options used |
|
|
|
# -include process include file as the first line of the primary source file |
|
|
|
# -include-pch include precompiled header file |
|
|
|
# -Qunused-arguments don't emit warning for unused driver arguments |
|
|
|
# note: ccache requires the -include flag to be used in order to process precompiled header correctly |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "-Qunused-arguments" "-include" "${_prefixFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-Qunused-arguments -include \"${_prefixFile}\"") |
|
|
|
if (UNIX) |
|
|
|
# Clang options used |
|
|
|
# -include process include file as the first line of the primary source file |
|
|
|
# note: ccache requires the -include flag to be used in order to process precompiled header correctly |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND -include "${_prefixFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "-include \"${_prefixFile}\"") |
|
|
|
endif() |
|
|
|
elseif (WIN32) |
|
|
|
# Clang-cl.exe options used |
|
|
|
# /Yu uses a precompiled header file during build |
|
|
|
# /Fp specifies precompiled header binary file name |
|
|
|
# /FI forces inclusion of file |
|
|
|
if (_pchFile) |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "/Yu${_prefixFile}" "/Fp${_pchFile}" "/FI${_prefixFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "/Yu\"${_prefixFile}\" /Fp\"${_pchFile}\" /FI\"${_prefixFile}\"") |
|
|
|
endif() |
|
|
|
else() |
|
|
|
# no precompiled header, force inclusion of prefix header |
|
|
|
if (_flags) |
|
|
|
# append to list |
|
|
|
list (APPEND _flags "/FI${_prefixFile}") |
|
|
|
else() |
|
|
|
# return as a flag string |
|
|
|
set (_flags "/FI\"${_prefixFile}\"") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (_compilerID MATCHES "Intel") |
|
|
|
if (WIN32) |
|
|
@@ -1883,7 +1967,7 @@ function (cotire_precompile_prefix_header _prefixFile _pchFile _hostFile) |
|
|
|
if (MSVC_IDE OR _option_COMPILER_ID MATCHES "MSVC") |
|
|
|
# cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared |
|
|
|
unset (ENV{VS_UNICODE_OUTPUT}) |
|
|
|
elseif (_option_COMPILER_ID MATCHES "GNU|Clang") |
|
|
|
elseif (_option_COMPILER_ID MATCHES "Clang" AND _option_COMPILER_VERSION VERSION_LESS "4.0.0") |
|
|
|
if (_option_COMPILER_LAUNCHER MATCHES "ccache" OR |
|
|
|
_option_COMPILER_EXECUTABLE MATCHES "ccache") |
|
|
|
# Newer versions of Clang embed a compilation timestamp into the precompiled header binary, |
|
|
@@ -1916,8 +2000,16 @@ function (cotire_check_precompiled_header_support _language _target _msgVar) |
|
|
|
set (${_msgVar} "" PARENT_SCOPE) |
|
|
|
endif() |
|
|
|
elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Clang") |
|
|
|
# all Clang versions have PCH support |
|
|
|
set (${_msgVar} "" PARENT_SCOPE) |
|
|
|
if (UNIX) |
|
|
|
# all Unix Clang versions have PCH support |
|
|
|
set (${_msgVar} "" PARENT_SCOPE) |
|
|
|
elseif (WIN32) |
|
|
|
# only clang-cl is supported under Windows |
|
|
|
get_filename_component(_compilerName "${CMAKE_${_language}_COMPILER}" NAME_WE) |
|
|
|
if (NOT _compilerName MATCHES "cl$") |
|
|
|
set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}. Use clang-cl instead." PARENT_SCOPE) |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Intel") |
|
|
|
# Intel PCH support requires version >= 8.0.0 |
|
|
|
if ("${CMAKE_${_language}_COMPILER_VERSION}" VERSION_LESS "8.0.0") |
|
|
@@ -2283,8 +2375,9 @@ endfunction() |
|
|
|
|
|
|
|
function (cotire_setup_pch_file_compilation _language _target _targetScript _prefixFile _pchFile _hostFile) |
|
|
|
set (_sourceFiles ${ARGN}) |
|
|
|
if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") |
|
|
|
# for Visual Studio and Intel, we attach the precompiled header compilation to the host file |
|
|
|
if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" OR |
|
|
|
(WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) |
|
|
|
# for MSVC, Intel and Clang-cl, we attach the precompiled header compilation to the host file |
|
|
|
# the remaining files include the precompiled header, see cotire_setup_pch_file_inclusion |
|
|
|
if (_sourceFiles) |
|
|
|
set (_flags "") |
|
|
@@ -2329,8 +2422,9 @@ function (cotire_setup_pch_file_compilation _language _target _targetScript _pre |
|
|
|
endfunction() |
|
|
|
|
|
|
|
function (cotire_setup_pch_file_inclusion _language _target _wholeTarget _prefixFile _pchFile _hostFile) |
|
|
|
if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") |
|
|
|
# for Visual Studio and Intel, we include the precompiled header in all but the host file |
|
|
|
if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" OR |
|
|
|
(WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) |
|
|
|
# for MSVC, Intel and clang-cl, we include the precompiled header in all but the host file |
|
|
|
# the host file does the precompiled header compilation, see cotire_setup_pch_file_compilation |
|
|
|
set (_sourceFiles ${ARGN}) |
|
|
|
list (LENGTH _sourceFiles _numberOfSourceFiles) |
|
|
@@ -2476,9 +2570,10 @@ function (cotire_setup_target_pch_usage _languages _target _wholeTarget) |
|
|
|
# if this is a single-language target without any excluded files |
|
|
|
if (_wholeTarget) |
|
|
|
set (_language "${_languages}") |
|
|
|
# for Visual Studio and Intel, precompiled header inclusion is always done on the source file level |
|
|
|
# for MSVC, Intel and clang-cl, precompiled header inclusion is always done on the source file level |
|
|
|
# see cotire_setup_pch_file_inclusion |
|
|
|
if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") |
|
|
|
if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" AND NOT |
|
|
|
(WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) |
|
|
|
get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) |
|
|
|
if (_prefixFile) |
|
|
|
get_property(_pchFile TARGET ${_target} PROPERTY COTIRE_${_language}_PRECOMPILED_HEADER) |
|
|
@@ -2949,8 +3044,9 @@ function (cotire_setup_pch_target _languages _configurations _target) |
|
|
|
set (_dependsFiles "") |
|
|
|
foreach (_language ${_languages}) |
|
|
|
set (_props COTIRE_${_language}_PREFIX_HEADER COTIRE_${_language}_UNITY_SOURCE) |
|
|
|
if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") |
|
|
|
# Visual Studio and Intel only create precompiled header as a side effect |
|
|
|
if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" AND NOT |
|
|
|
(WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) |
|
|
|
# MSVC, Intel and clang-cl only create precompiled header as a side effect |
|
|
|
list (INSERT _props 0 COTIRE_${_language}_PRECOMPILED_HEADER) |
|
|
|
endif() |
|
|
|
cotire_get_first_set_property_value(_dependsFile TARGET ${_target} ${_props}) |
|
|
|