Преглед на файлове

Preserve system flag for includes when generating PCH

If the compiler understands system include paths it exposes the
necessary flag within the CMAKE_INCLUDE_SYSTEM_FLAG_${LANG}
variable.

System include paths for targets could be queried via the target
property INTERFACE_SYSTEM_INCLUDE_DIRECTORIES. Here the system
include paths are listed in addition of being available in
the INTERFACE_INCLUDE_DIRECTORIES property.

Note: Currently there is no way to query the SYSTEM flag for
directory include properties.
master
Gregor Jasny преди 10 години
родител
ревизия
64e710122b
променени са 1 файла, в които са добавени 41 реда и са изтрити 13 реда
  1. +41
    -13
      CMake/cotire.cmake

+ 41
- 13
CMake/cotire.cmake Целия файл

@@ -434,8 +434,9 @@ function (cotire_get_target_compile_flags _config _language _directory _target _
set (${_flagsVar} ${_compileFlags} PARENT_SCOPE)
endfunction()

function (cotire_get_target_include_directories _config _language _targetSourceDir _targetBinaryDir _target _includeDirsVar)
function (cotire_get_target_include_directories _config _language _targetSourceDir _targetBinaryDir _target _includeDirsVar _systemIncludeDirsVar)
set (_includeDirs "")
set (_systemIncludeDirs "")
# default include dirs
if (CMAKE_INCLUDE_CURRENT_DIR)
list (APPEND _includeDirs "${_targetBinaryDir}")
@@ -455,6 +456,11 @@ function (cotire_get_target_include_directories _config _language _targetSourceD
if (_targetDirs)
list (APPEND _dirs ${_targetDirs})
endif()
get_target_property(_targetDirs ${_target} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
if (_targetDirs)
list (APPEND _systemIncludeDirs ${_targetDirs})
endif()

# interface include directories from linked library targets
cotire_get_target_link_libraries_for_usage_requirements(${_target} _linkLibraries)
foreach (_library ${_linkLibraries})
@@ -462,6 +468,10 @@ function (cotire_get_target_include_directories _config _language _targetSourceD
if (_targetDirs)
list (APPEND _dirs ${_targetDirs})
endif()
get_target_property(_targetDirs ${_library} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
if (_targetDirs)
list (APPEND _systemIncludeDirs ${_targetDirs})
endif()
endforeach()
endif()
if (dirs)
@@ -487,6 +497,7 @@ function (cotire_get_target_include_directories _config _language _targetSourceD
endif()
endforeach()
list (REMOVE_DUPLICATES _includeDirs)
list (REMOVE_DUPLICATES _systemIncludeDirs)
if (CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES)
list (REMOVE_ITEM _includeDirs ${CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES})
endif()
@@ -494,6 +505,10 @@ function (cotire_get_target_include_directories _config _language _targetSourceD
message (STATUS "Target ${_target} include dirs ${_includeDirs}")
endif()
set (${_includeDirsVar} ${_includeDirs} PARENT_SCOPE)
if (COTIRE_DEBUG AND _systemIncludeDirs)
message (STATUS "Target ${_target} system include dirs ${_systemIncludeDirs}")
endif()
set (${_systemIncludeDirsVar} ${_systemIncludeDirs} PARENT_SCOPE)
endfunction()

macro (cotire_make_C_identifier _identifierVar _str)
@@ -726,13 +741,18 @@ macro (cotire_add_definitions_to_cmd _cmdVar _language)
endforeach()
endmacro()

macro (cotire_add_includes_to_cmd _cmdVar _language)
foreach (_include ${ARGN})
macro (cotire_add_includes_to_cmd _cmdVar _language _includeSystemFlag _includesVar _systemIncludesVar)
foreach (_include ${${_includesVar}})
if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel")
file (TO_NATIVE_PATH "${_include}" _include)
list (APPEND ${_cmdVar} "/I${_include}")
else()
list (APPEND ${_cmdVar} "-I${_include}")
list(FIND ${_systemIncludesVar} ${_include} _index)
if(_index GREATER -1 AND NOT "${_includeSystemFlag}" STREQUAL "")
list (APPEND ${_cmdVar} "${_includeSystemFlag} ${_include}")
else()
list (APPEND ${_cmdVar} "-I${_include}")
endif()
endif()
endforeach()
endmacro()
@@ -993,8 +1013,8 @@ endfunction()

function (cotire_scan_includes _includesVar)
set(_options "")
set(_oneValueArgs COMPILER_ID COMPILER_EXECUTABLE COMPILER_VERSION LANGUAGE UNPARSED_LINES)
set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS)
set(_oneValueArgs COMPILER_ID COMPILER_EXECUTABLE COMPILER_VERSION INCLUDE_SYSTEM_FLAG LANGUAGE UNPARSED_LINES)
set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS)
cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
set (_sourceFiles ${_option_UNPARSED_ARGUMENTS})
if (NOT _option_LANGUAGE)
@@ -1007,7 +1027,7 @@ function (cotire_scan_includes _includesVar)
cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}")
cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS})
cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS})
cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_INCLUDE_DIRECTORIES})
cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" "${_option_INCLUDE_SYSTEM_FLAG}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES)
cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_INCLUDE_DIRECTORIES})
cotire_add_makedep_flags("${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}" _cmd)
# only consider existing source files for scanning
@@ -1185,9 +1205,9 @@ endfunction()

function (cotire_generate_prefix_header _prefixFile)
set(_options "")
set(_oneValueArgs LANGUAGE COMPILER_EXECUTABLE COMPILER_ID COMPILER_VERSION)
set(_oneValueArgs LANGUAGE COMPILER_EXECUTABLE COMPILER_ID COMPILER_VERSION INCLUDE_SYSTEM_FLAG)
set(_multiValueArgs DEPENDS COMPILE_DEFINITIONS COMPILE_FLAGS
INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS)
INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS)
cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
if (_option_DEPENDS)
cotire_check_file_up_to_date(_prefixFileIsUpToDate "${_prefixFile}" ${_option_DEPENDS})
@@ -1219,6 +1239,8 @@ function (cotire_generate_prefix_header _prefixFile)
COMPILE_DEFINITIONS ${_option_COMPILE_DEFINITIONS}
COMPILE_FLAGS ${_option_COMPILE_FLAGS}
INCLUDE_DIRECTORIES ${_option_INCLUDE_DIRECTORIES}
INCLUDE_SYSTEM_FLAG ${_option_INCLUDE_SYSTEM_FLAG}
SYSTEM_INCLUDE_DIRECTORIES ${_option_SYSTEM_INCLUDE_DIRECTORIES}
IGNORE_PATH ${_option_IGNORE_PATH}
INCLUDE_PATH ${_option_INCLUDE_PATH}
IGNORE_EXTENSIONS ${_option_IGNORE_EXTENSIONS}
@@ -1555,8 +1577,8 @@ endfunction()

function (cotire_precompile_prefix_header _prefixFile _pchFile _hostFile)
set(_options "")
set(_oneValueArgs COMPILER_EXECUTABLE COMPILER_ID COMPILER_VERSION LANGUAGE)
set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES)
set(_oneValueArgs COMPILER_EXECUTABLE COMPILER_ID COMPILER_VERSION INCLUDE_SYSTEM_FLAG LANGUAGE)
set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES SYS)
cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
if (NOT _option_LANGUAGE)
set (_option_LANGUAGE "CXX")
@@ -1567,7 +1589,7 @@ function (cotire_precompile_prefix_header _prefixFile _pchFile _hostFile)
cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}")
cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS})
cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS})
cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_INCLUDE_DIRECTORIES})
cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" "${_option_INCLUDE_SYSTEM_FLAG}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES)
cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_INCLUDE_DIRECTORIES})
cotire_add_pch_compilation_flags(
"${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}"
@@ -1890,11 +1912,12 @@ function (cotire_generate_target_script _language _configurations _targetSourceD
get_target_property(COTIRE_TARGET_MAXIMUM_NUMBER_OF_INCLUDES ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES)
cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_PRE_UNDEFS COTIRE_TARGET_SOURCES_PRE_UNDEFS ${COTIRE_TARGET_SOURCES})
cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_POST_UNDEFS COTIRE_TARGET_SOURCES_POST_UNDEFS ${COTIRE_TARGET_SOURCES})
set (COTIRE_INCLUDE_SYSTEM_FLAG ${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}})
set (COTIRE_TARGET_CONFIGURATION_TYPES "${_configurations}")
foreach (_config ${_configurations})
string (TOUPPER "${_config}" _upperConfig)
cotire_get_target_include_directories(
"${_config}" "${_language}" "${_targetSourceDir}" "${_targetBinaryDir}" "${_target}" COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig})
"${_config}" "${_language}" "${_targetSourceDir}" "${_targetBinaryDir}" "${_target}" COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig} COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig})
cotire_get_target_compile_definitions(
"${_config}" "${_language}" "${_targetSourceDir}" "${_target}" COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig})
cotire_get_target_compiler_flags(
@@ -2959,6 +2982,7 @@ if (CMAKE_SCRIPT_MODE_FILE)
endif()
string (TOUPPER "${COTIRE_BUILD_TYPE}" _upperConfig)
set (_includeDirs ${COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig}})
set (_systemIncludeDirs ${COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig}})
set (_compileDefinitions ${COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig}})
set (_compileFlags ${COTIRE_TARGET_COMPILE_FLAGS_${_upperConfig}})
# check if target has been cotired for actual build type COTIRE_BUILD_TYPE
@@ -3011,7 +3035,9 @@ if (CMAKE_SCRIPT_MODE_FILE)
IGNORE_PATH "${COTIRE_TARGET_IGNORE_PATH};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH}"
INCLUDE_PATH ${COTIRE_TARGET_INCLUDE_PATH}
IGNORE_EXTENSIONS "${CMAKE_${COTIRE_TARGET_LANGUAGE}_SOURCE_FILE_EXTENSIONS};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS}"
INCLUDE_SYSTEM_FLAG "${COTIRE_INCLUDE_SYSTEM_FLAG}"
INCLUDE_DIRECTORIES ${_includeDirs}
SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs}
COMPILE_DEFINITIONS ${_compileDefinitions}
COMPILE_FLAGS ${_compileFlags})

@@ -3031,7 +3057,9 @@ if (CMAKE_SCRIPT_MODE_FILE)
COMPILER_ID "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ID}"
COMPILER_VERSION "${COTIRE_${COTIRE_TARGET_LANGUAGE}_COMPILER_VERSION}"
LANGUAGE "${COTIRE_TARGET_LANGUAGE}"
INCLUDE_SYSTEM_FLAG "${COTIRE_INCLUDE_SYSTEM_FLAG}"
INCLUDE_DIRECTORIES ${_includeDirs}
SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs}
COMPILE_DEFINITIONS ${_compileDefinitions}
COMPILE_FLAGS ${_compileFlags})



Зареждане…
Отказ
Запис