Quellcode durchsuchen

cotire 1.4.1

master
Sascha Kratky vor 13 Jahren
Ursprung
Commit
eb63dcabf0
3 geänderte Dateien mit 45 neuen und 44 gelöschten Zeilen
  1. +39
    -42
      CMake/cotire.cmake
  2. +6
    -0
      HISTORY.md
  3. +0
    -2
      MANUAL.md

+ 39
- 42
CMake/cotire.cmake Datei anzeigen

@@ -45,36 +45,32 @@ if (NOT CMAKE_SCRIPT_MODE_FILE)
endif() endif()


set (COTIRE_CMAKE_MODULE_FILE "${CMAKE_CURRENT_LIST_FILE}") set (COTIRE_CMAKE_MODULE_FILE "${CMAKE_CURRENT_LIST_FILE}")
set (COTIRE_CMAKE_MODULE_VERSION "1.4.0")
set (COTIRE_CMAKE_MODULE_VERSION "1.4.1")


include(CMakeParseArguments) include(CMakeParseArguments)
include(ProcessorCount) include(ProcessorCount)


function (cotire_determine_compiler_version _language _versionPrefix) function (cotire_determine_compiler_version _language _versionPrefix)
if (NOT ${_versionPrefix}_VERSION) if (NOT ${_versionPrefix}_VERSION)
if (MSVC)
# use CMake's predefined version variable for MSVC, if available
if (DEFINED MSVC_VERSION)
set (${_versionPrefix}_VERSION "${MSVC_VERSION}")
else()
# cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared
unset (ENV{VS_UNICODE_OUTPUT})
string (STRIP "${CMAKE_${_language}_COMPILER_ARG1}" _compilerArg1)
execute_process (COMMAND ${CMAKE_${_language}_COMPILER} ${_compilerArg1}
ERROR_VARIABLE _versionLine OUTPUT_QUIET TIMEOUT 10)
string (REGEX REPLACE ".*Version *([0-9]+(\\.[0-9]+)*).*" "\\1"
${_versionPrefix}_VERSION "${_versionLine}")
endif()
# use CMake's predefined compiler version variable (available since CMake 2.8.8)
if (DEFINED CMAKE_${_language}_COMPILER_VERSION)
set (${_versionPrefix}_VERSION "${CMAKE_${_language}_COMPILER_VERSION}")
elseif (WIN32)
# cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared
unset (ENV{VS_UNICODE_OUTPUT})
string (STRIP "${CMAKE_${_language}_COMPILER_ARG1}" _compilerArg1)
execute_process (COMMAND ${CMAKE_${_language}_COMPILER} ${_compilerArg1}
ERROR_VARIABLE _versionLine OUTPUT_QUIET TIMEOUT 10)
string (REGEX REPLACE ".*Version *([0-9]+(\\.[0-9]+)*).*" "\\1" ${_versionPrefix}_VERSION "${_versionLine}")
else() else()
# use CMake's predefined compiler version variable (available since CMake 2.8.8)
if (DEFINED CMAKE_${_language}_COMPILER_VERSION)
set (${_versionPrefix}_VERSION "${CMAKE_${_language}_COMPILER_VERSION}")
else()
# assume GCC like command line interface
string (STRIP "${CMAKE_${_language}_COMPILER_ARG1}" _compilerArg1)
execute_process (COMMAND ${CMAKE_${_language}_COMPILER} ${_compilerArg1} "-dumpversion"
OUTPUT_VARIABLE ${_versionPrefix}_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE TIMEOUT 10)
# assume GCC like command line interface
string (STRIP "${CMAKE_${_language}_COMPILER_ARG1}" _compilerArg1)
execute_process (COMMAND ${CMAKE_${_language}_COMPILER} ${_compilerArg1} "-dumpversion"
OUTPUT_VARIABLE ${_versionPrefix}_VERSION
RESULT_VARIABLE _result
OUTPUT_STRIP_TRAILING_WHITESPACE TIMEOUT 10)
if (_result)
set (${_versionPrefix}_VERSION "")
endif() endif()
endif() endif()
if (${_versionPrefix}_VERSION) if (${_versionPrefix}_VERSION)
@@ -398,7 +394,7 @@ function (cotire_get_target_compile_flags _config _language _directory _target _
set (${_flagsVar} ${_compileFlags} PARENT_SCOPE) set (${_flagsVar} ${_compileFlags} PARENT_SCOPE)
endfunction() 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)
set (_includeDirs "") set (_includeDirs "")
# default include dirs # default include dirs
if (CMAKE_INCLUDE_CURRENT_DIR) if (CMAKE_INCLUDE_CURRENT_DIR)
@@ -1848,7 +1844,7 @@ function (cotire_get_first_set_property_value _propertyValueVar _type _object)
set (${_propertyValueVar} "" PARENT_SCOPE) set (${_propertyValueVar} "" PARENT_SCOPE)
endfunction() endfunction()


function (cotire_setup_combine_command _sourceDir _targetScript _joinedFile _cmdsVar)
function (cotire_setup_combine_command _language _sourceDir _targetScript _joinedFile _cmdsVar)
set (_files ${ARGN}) set (_files ${ARGN})
set (_filesPaths "") set (_filesPaths "")
foreach (_file ${_files}) foreach (_file ${_files})
@@ -1875,11 +1871,19 @@ function (cotire_setup_combine_command _sourceDir _targetScript _joinedFile _cmd
endif() endif()
set_property (SOURCE "${_joinedFile}" PROPERTY GENERATED TRUE) set_property (SOURCE "${_joinedFile}" PROPERTY GENERATED TRUE)
file (RELATIVE_PATH _joinedFileRelPath "${CMAKE_BINARY_DIR}" "${_joinedFile}") file (RELATIVE_PATH _joinedFileRelPath "${CMAKE_BINARY_DIR}" "${_joinedFile}")
get_filename_component(_joinedFileName "${_joinedFileRelPath}" NAME_WE)
if (_language AND _joinedFileName MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}$")
set (_comment "Generating ${_language} unity source ${_joinedFileRelPath}")
elseif (_language AND _joinedFileName MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}$")
set (_comment "Generating ${_language} prefix header ${_joinedFileRelPath}")
else()
set (_comment "Generating ${_joinedFileRelPath}")
endif()
add_custom_command( add_custom_command(
OUTPUT "${_joinedFile}" OUTPUT "${_joinedFile}"
COMMAND ${_prefixCmd} COMMAND ${_prefixCmd}
DEPENDS ${_files} DEPENDS ${_files}
COMMENT "Generating ${_joinedFileRelPath}"
COMMENT "${_comment}"
WORKING_DIRECTORY "${_sourceDir}" VERBATIM) WORKING_DIRECTORY "${_sourceDir}" VERBATIM)
list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd}) list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd})
set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE)
@@ -1900,7 +1904,7 @@ function (cotire_setup_target_pch_usage _languages _targetSourceDir _target _who
list (LENGTH _prefixFiles _numberOfPrefixFiles) list (LENGTH _prefixFiles _numberOfPrefixFiles)
if (_numberOfPrefixFiles GREATER 1) if (_numberOfPrefixFiles GREATER 1)
cotire_make_prefix_file_path("" ${_target} _prefixHeader) cotire_make_prefix_file_path("" ${_target} _prefixHeader)
cotire_setup_combine_command("${_targetSourceDir}" "" "${_prefixHeader}" _cmds ${_prefixFiles})
cotire_setup_combine_command("" "${_targetSourceDir}" "" "${_prefixHeader}" _cmds ${_prefixFiles})
else() else()
set (_prefixHeader "${_prefixFiles}") set (_prefixHeader "${_prefixFiles}")
endif() endif()
@@ -1970,7 +1974,7 @@ function (cotire_setup_unity_generation_commands _language _targetSourceDir _tar
if (_numberOfUnityFiles GREATER 1) if (_numberOfUnityFiles GREATER 1)
# create a joint unity file from all unity file segments # create a joint unity file from all unity file segments
cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFile) cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFile)
cotire_setup_combine_command("${_targetSourceDir}" "${_targetScript}" "${_unityFile}" ${_cmdsVar} ${_unityFiles})
cotire_setup_combine_command(${_language} "${_targetSourceDir}" "${_targetScript}" "${_unityFile}" ${_cmdsVar} ${_unityFiles})
endif() endif()
set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE)
endfunction() endfunction()
@@ -2000,16 +2004,10 @@ function (cotire_setup_multi_prefix_generation_command _language _target _target
set (_sourceFiles ${ARGN}) set (_sourceFiles ${ARGN})
list (LENGTH _unityFiles _numberOfUnityFiles) list (LENGTH _unityFiles _numberOfUnityFiles)
if (_numberOfUnityFiles GREATER 1) if (_numberOfUnityFiles GREATER 1)
set (_prefixFiles "")
foreach (_unityFile ${_unityFiles})
cotire_unity_to_prefix_file_path(${_language} ${_target} "${_unityFile}" _prefixFileSegment)
cotire_setup_single_prefix_generation_command(
${_language} ${_target} "${_targetSourceDir}" "${_targetScript}"
"${_prefixFileSegment}" "${_unityFile}" ${_cmdsVar} ${_sourceFiles})
list (APPEND _prefixFiles "${_prefixFileSegment}")
endforeach()
# create a joint prefix header file from all prefix header segments
cotire_setup_combine_command("${_targetSourceDir}" "${_targetScript}" "${_prefixFile}" ${_cmdsVar} ${_prefixFiles})
cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFile)
cotire_setup_single_prefix_generation_command(
${_language} ${_target} "${_targetSourceDir}" "${_targetScript}"
"${_prefixFile}" "${_unityFile}" ${_cmdsVar} ${_sourceFiles})
else() else()
cotire_setup_single_prefix_generation_command( cotire_setup_single_prefix_generation_command(
${_language} ${_target} "${_targetSourceDir}" "${_targetScript}" ${_language} ${_target} "${_targetSourceDir}" "${_targetScript}"
@@ -2195,7 +2193,7 @@ endfunction()
function (cotire_compute_unity_max_number_of_includes _target _maxIncludesVar) function (cotire_compute_unity_max_number_of_includes _target _maxIncludesVar)
set (_sourceFiles ${ARGN}) set (_sourceFiles ${ARGN})
get_target_property(_maxIncludes ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES) get_target_property(_maxIncludes ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES)
if (_maxIncludes MATCHES "(-j|--parallel) ?([0-9]*)")
if (_maxIncludes MATCHES "(-j|--parallel|--jobs) ?([0-9]*)")
set (_numberOfThreads "${CMAKE_MATCH_2}") set (_numberOfThreads "${CMAKE_MATCH_2}")
if (NOT _numberOfThreads) if (NOT _numberOfThreads)
# use all available cores # use all available cores
@@ -2223,7 +2221,7 @@ function (cotire_process_target_language _language _configurations _targetSource
set (_excludedSources "") set (_excludedSources "")
set (_cotiredSources "") set (_cotiredSources "")
cotire_filter_language_source_files(${_language} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) cotire_filter_language_source_files(${_language} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles})
if (NOT _sourceFiles)
if (NOT _sourceFiles AND NOT _cotiredSources)
return() return()
endif() endif()
set (_wholeTarget ${${_wholeTargetVar}}) set (_wholeTarget ${${_wholeTargetVar}})
@@ -2247,7 +2245,7 @@ function (cotire_process_target_language _language _configurations _targetSource
# check for user provided prefix header files # check for user provided prefix header files
get_property(_prefixHeaderFiles TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT) get_property(_prefixHeaderFiles TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT)
if (_prefixHeaderFiles) if (_prefixHeaderFiles)
cotire_setup_combine_command("${_targetSourceDir}" "${_targetScript}" "${_prefixFile}" _cmds ${_prefixHeaderFiles})
cotire_setup_combine_command(${_language} "${_targetSourceDir}" "${_targetScript}" "${_prefixFile}" _cmds ${_prefixHeaderFiles})
else() else()
cotire_setup_multi_prefix_generation_command( cotire_setup_multi_prefix_generation_command(
${_language} ${_target} "${_targetSourceDir}" "${_targetScript}" "${_prefixFile}" "${_unityFiles}" _cmds ${_unitySourceFiles}) ${_language} ${_target} "${_targetSourceDir}" "${_targetScript}" "${_prefixFile}" "${_unityFiles}" _cmds ${_unitySourceFiles})
@@ -2343,7 +2341,6 @@ function (cotire_setup_unity_build_target _languages _configurations _targetSour
# determine unity target sources # determine unity target sources
get_target_property(_targetSourceFiles ${_target} SOURCES) get_target_property(_targetSourceFiles ${_target} SOURCES)
set (_unityTargetSources ${_targetSourceFiles}) set (_unityTargetSources ${_targetSourceFiles})
get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER)
foreach (_language ${_languages}) foreach (_language ${_languages})
get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE) get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE)
if (_unityFiles) if (_unityFiles)


+ 6
- 0
HISTORY.md Datei anzeigen

@@ -1,3 +1,9 @@
## 1.4.1 (2013-06-08)

* fixed bug with determination of compiler version.
* fixed bug with generation of unity source when target source files are used for multiple targets.
* fixed bug with multi-core optimized prefix header generation.

## 1.4.0 (2013-03-11) ## 1.4.0 (2013-03-11)


* one year anniversary release. * one year anniversary release.


+ 0
- 2
MANUAL.md Datei anzeigen

@@ -459,8 +459,6 @@ done explicitly by setting the cache variable `COTIRE_MAXIMUM_NUMBER_OF_UNITY_IN
$ cmake -D COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES=-j4 <path-to-source> $ cmake -D COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES=-j4 <path-to-source>
$ make -j 4 $ make -j 4


The setting `-j` will also make the automatic prefix header generation run in parallel.

### fixing macro definition clashes ### fixing macro definition clashes


Many unity build problems stem from macro definitions leaking into other target source files, Many unity build problems stem from macro definitions leaking into other target source files,


Laden…
Abbrechen
Speichern