From 2d3a218a07567c8378c8fa73424429d4e92b77ea Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 14 May 2020 09:50:53 +0200 Subject: [PATCH 1/3] Change pch to new CMake functions --- src/libslic3r/CMakeLists.txt | 3 ++- src/slic3r/CMakeLists.txt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 12e61d7f3..ae9087ed4 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -308,5 +308,6 @@ if(SLIC3R_PROFILE) endif() if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) - add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) + #add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) + target_precompile_headers(libslic3r PRIVATE pchheader.hpp) endif () diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index ac6961990..a110a82ed 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -231,5 +231,6 @@ if (SLIC3R_STATIC AND UNIX AND NOT APPLE) endif () if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) - add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) + #add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) + target_precompile_headers(libslic3r_gui PRIVATE pchheader.hpp) endif () From 63c82ed8c60e0bd3694c48df2fdba4e2b3ef711e Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 14 May 2020 10:10:47 +0200 Subject: [PATCH 2/3] Modify PCH script to use builtin cmake function if possible. --- cmake/modules/PrecompiledHeader.cmake | 15 +++++++++++++++ src/libslic3r/CMakeLists.txt | 3 +-- src/slic3r/CMakeLists.txt | 3 +-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index 2f62a7dbe..e5f01af21 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -101,7 +101,14 @@ function(export_all_flags _filename) file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}${_cxx_flags}\n") endfunction() +# Use the new builtin CMake function if possible or fall back to the old one. +if (CMAKE_VERSION VERSION_LESS 3.16) + function(add_precompiled_header _target _input) + + message(STATUS "Adding precompiled header ${_input} to target ${_target} with legacy method. " + "Update your cmake instance to use the native PCH functions.") + cmake_parse_arguments(_PCH "FORCEINCLUDE" "SOURCE_CXX;SOURCE_C" "" ${ARGN}) get_filename_component(_input_we ${_input} NAME_WE) @@ -241,3 +248,11 @@ function(add_precompiled_header _target _input) endforeach() endif(CMAKE_COMPILER_IS_GNUCXX) endfunction() + +else () + +function(add_precompiled_header _target _input) + target_precompile_headers(${_target} PRIVATE ${_input}) +endfunction() + +endif (CMAKE_VERSION VERSION_LESS 3.16) diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index ae9087ed4..12e61d7f3 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -308,6 +308,5 @@ if(SLIC3R_PROFILE) endif() if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) - #add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) - target_precompile_headers(libslic3r PRIVATE pchheader.hpp) + add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) endif () diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index a110a82ed..ac6961990 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -231,6 +231,5 @@ if (SLIC3R_STATIC AND UNIX AND NOT APPLE) endif () if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) - #add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) - target_precompile_headers(libslic3r_gui PRIVATE pchheader.hpp) + add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) endif () From 2c3ec346ceb771191b7388fb6e5438079fedf850 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 14 May 2020 13:37:06 +0200 Subject: [PATCH 3/3] Exclude *.m and *.mm Objective-C sources from including pch --- cmake/modules/PrecompiledHeader.cmake | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index e5f01af21..7ef80aacf 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -52,6 +52,10 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. + +# Use the new builtin CMake function if possible or fall back to the old one. +if (CMAKE_VERSION VERSION_LESS 3.16) + include(CMakeParseArguments) macro(combine_arguments _variable) @@ -101,9 +105,6 @@ function(export_all_flags _filename) file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}${_cxx_flags}\n") endfunction() -# Use the new builtin CMake function if possible or fall back to the old one. -if (CMAKE_VERSION VERSION_LESS 3.16) - function(add_precompiled_header _target _input) message(STATUS "Adding precompiled header ${_input} to target ${_target} with legacy method. " @@ -252,7 +253,17 @@ endfunction() else () function(add_precompiled_header _target _input) + message(STATUS "Adding precompiled header ${_input} to target ${_target}.") target_precompile_headers(${_target} PRIVATE ${_input}) + + get_target_property(_sources ${_target} SOURCES) + list(FILTER _sources INCLUDE REGEX ".*\\.mm?") + + if (_sources) + message(STATUS "PCH skipping sources: ${_sources}") + endif () + + set_source_files_properties(${_sources} PROPERTIES SKIP_PRECOMPILE_HEADERS ON) endfunction() endif (CMAKE_VERSION VERSION_LESS 3.16)