mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-08 09:46:55 +00:00
build: share cached objects between build directories and worktrees (#15573)
This commit is contained in:
@@ -110,6 +110,7 @@ option(SLIC3R_WARNINGS "Emit compiler warnings for OrcaSlicer sources"
|
||||
option(SLIC3R_BUNDLED_WARNINGS "Emit compiler warnings for bundled third-party sources" 0)
|
||||
option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
|
||||
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
|
||||
option(SLIC3R_RELATIVE_DEBUG_PATHS "Record a relative compilation directory in debug info (clang-cl)" 0)
|
||||
option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0)
|
||||
|
||||
# Python stubgen module
|
||||
@@ -352,11 +353,14 @@ if (MSVC)
|
||||
add_compile_options(/Zc:lambda)
|
||||
endif ()
|
||||
# /bigobj (Increase Number of Sections in .Obj file)
|
||||
add_compile_options(-bigobj)
|
||||
# error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater
|
||||
# Generate symbols at every build target, even for the release.
|
||||
# -Zm520 fixes error C3859 but forces the compiler to pre-allocate that memory for every translation unit regardless
|
||||
# combining /Zi with /FS frees up a significant amount of memory pressure across all parallel compile jobs and makes /MP faster overall.
|
||||
add_compile_options(-bigobj /Zi /FS)
|
||||
if (SLIC3R_MSVC_PDB)
|
||||
add_compile_options(/Zi /FS)
|
||||
endif ()
|
||||
# Disable STL4007: Many result_type typedefs and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17.
|
||||
#FIXME Remove this line after eigen library adapts to the new C++17 adaptor rules.
|
||||
add_compile_options(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING)
|
||||
@@ -374,6 +378,16 @@ if (MSVC)
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
|
||||
endif ()
|
||||
|
||||
# Without this every object names its build directory and two worktrees never
|
||||
# share cache entries. The linker still writes absolute paths into the PDB.
|
||||
if (SLIC3R_RELATIVE_DEBUG_PATHS)
|
||||
if (IS_CLANG_CL)
|
||||
add_compile_options(-ffile-compilation-dir=.)
|
||||
else ()
|
||||
message(WARNING "SLIC3R_RELATIVE_DEBUG_PATHS is only implemented for clang-cl")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15)
|
||||
add_compile_definitions(BOOST_NO_CXX98_FUNCTION_BASE _HAS_AUTO_PTR_ETC=0)
|
||||
endif()
|
||||
|
||||
@@ -699,7 +699,8 @@ if "%build_slicer%" == "ON" (
|
||||
)
|
||||
|
||||
if not "!cache_args!" == "" (
|
||||
set "slicer_args=!slicer_args! !cache_args!"
|
||||
REM Relative debug paths as well, so another tree can reuse the objects.
|
||||
set "slicer_args=!slicer_args! !cache_args! -DSLIC3R_RELATIVE_DEBUG_PATHS=ON"
|
||||
)
|
||||
|
||||
REM Configuring against a tree that was never built fails deep inside
|
||||
|
||||
@@ -360,6 +360,12 @@ $cases = @(
|
||||
@{ Name = '--cache turns the precompiled header off'; Args = @('-s', '-l', '-x', '--cache', 'ccache')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
Contains = @('-DSLIC3R_PCH=OFF', 'COMPILER_LAUNCHER') }
|
||||
# Without it the objects name the build directory and only that tree can use them.
|
||||
@{ Name = '--cache asks for relative debug paths'; Args = @('-s', '-l', '-x', '--cache', 'ccache')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
Contains = @('-DSLIC3R_RELATIVE_DEBUG_PATHS=ON') }
|
||||
@{ Name = 'no --cache leaves the debug paths alone'; Args = @('-s', '-l', '-x')
|
||||
NotContains = @('SLIC3R_RELATIVE_DEBUG_PATHS') }
|
||||
# The resolved path, not the bare name, so PATH cannot change it later.
|
||||
@{ Name = '--cache names the resolved path in the banner'; Args = @('-s', '-l', '-x', '--cache', 'ccache')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
|
||||
Reference in New Issue
Block a user