mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-11 19:17:33 +00:00
Allow ccache with PCH
Clang records the modification time of every input in the precompiled header, so a fresh checkout produces a different header and every file that includes it misses the compiler cache. -fno-pch-timestamp makes the header reproducible, and pch_defines lets ccache cache the header itself. The precompiled header no longer has to be turned off when the cache is on.
This commit is contained in:
10
.github/workflows/build_orca.yml
vendored
10
.github/workflows/build_orca.yml
vendored
@@ -117,12 +117,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV"
|
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV"
|
||||||
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV"
|
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV"
|
||||||
# Headers a fresh checkout has just written, and the few files that
|
# Headers a fresh checkout has just written, the few files that
|
||||||
# use __DATE__ or __TIME__.
|
# use __DATE__ or __TIME__, and the precompiled header, whose
|
||||||
echo "CCACHE_SLOPPINESS=time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV"
|
# macros ccache cannot see.
|
||||||
# Clang rebuilds the precompiled header with a fresh timestamp on
|
echo "CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV"
|
||||||
# every run, so everything that includes it would miss.
|
|
||||||
echo "ORCA_EXTRA_BUILD_ARGS=-DSLIC3R_PCH=OFF" >> "$GITHUB_ENV"
|
|
||||||
# The restored directory carries the previous run's counters.
|
# The restored directory carries the previous run's counters.
|
||||||
ccache -z
|
ccache -z
|
||||||
|
|
||||||
|
|||||||
@@ -256,6 +256,13 @@ function(add_precompiled_header _target _input)
|
|||||||
message(STATUS "Adding precompiled header ${_input} to target ${_target}.")
|
message(STATUS "Adding precompiled header ${_input} to target ${_target}.")
|
||||||
target_precompile_headers(${_target} PRIVATE ${_input})
|
target_precompile_headers(${_target} PRIVATE ${_input})
|
||||||
|
|
||||||
|
# Clang records the modification time of every input in the precompiled
|
||||||
|
# header, which makes it differ between two checkouts of the same source
|
||||||
|
# and defeats a compiler cache. The build system already rebuilds the
|
||||||
|
# header when an input changes.
|
||||||
|
target_compile_options(${_target} PRIVATE
|
||||||
|
"$<$<CXX_COMPILER_ID:Clang,AppleClang>:SHELL:-Xclang -fno-pch-timestamp>")
|
||||||
|
|
||||||
get_target_property(_sources ${_target} SOURCES)
|
get_target_property(_sources ${_target} SOURCES)
|
||||||
list(FILTER _sources INCLUDE REGEX ".*\\.mm?")
|
list(FILTER _sources INCLUDE REGEX ".*\\.mm?")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user