mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-09 02:06:54 +00:00
fix: SLIC3R_PCH=OFF now builds on Windows, allowing compiler caching (#15552)
This commit is contained in:
@@ -92,6 +92,12 @@ New-Item -ItemType Directory -Force -Path $clangDir | Out-Null
|
||||
Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $clangDir 'clang-cl.exe') -Force
|
||||
$clangOnPath = "$clangDir;$env:PATH"
|
||||
|
||||
# A ccache that only has to exist. Nothing runs it; the script only locates it.
|
||||
$cacheDir = Join-Path $fixtures 'cache'
|
||||
New-Item -ItemType Directory -Force -Path $cacheDir | Out-Null
|
||||
Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $cacheDir 'ccache.exe') -Force
|
||||
$ccacheOnPath = "$cacheDir;$env:PATH"
|
||||
|
||||
# ProgramFiles(x86) is where the script looks for vswhere, so an empty one
|
||||
# stands in for a machine whose Visual Studio has no clang toolset.
|
||||
$noVs = Join-Path $fixtures 'no-vs'
|
||||
@@ -121,7 +127,7 @@ $cases = @(
|
||||
'Examples:', 'Environment:') }
|
||||
@{ Name = 'the environment section shows what to set'; Args = @('--help'); DryRun = $false
|
||||
Contains = @('ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS', 'ORCA_UPDATER_SIG_KEY', 'NINJA_STATUS',
|
||||
'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_PCH=OFF', '(PowerShell)', 'debugscript') }
|
||||
'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_BUILD_SANDBOXES=ON', '(PowerShell)', 'debugscript') }
|
||||
@{ Name = 'section headers do not widen the flag column'; Args = @('--help'); DryRun = $false
|
||||
Match = @('^ -d, --deps +Download') }
|
||||
# Windows Terminal opens at 120 columns and wraps at 120, so 119 is the
|
||||
@@ -294,6 +300,14 @@ $cases = @(
|
||||
Contains = @('-DBUILD_TESTS=ON') }
|
||||
@{ Name = '-a enables ASAN for the slicer'; Args = @('-s', '-a')
|
||||
Contains = @('-DSLIC3R_ASAN=ON') }
|
||||
@{ Name = '--no-pch turns the precompiled header off'; Args = @('-s', '--no-pch')
|
||||
Contains = @('-DSLIC3R_PCH=OFF') }
|
||||
@{ Name = '--no-pch says so in the banner'; Args = @('-s', '--no-pch')
|
||||
Contains = @('Precompiled header: off') }
|
||||
@{ Name = 'the precompiled header is on unless asked'; Args = @('-s')
|
||||
NotContains = @('SLIC3R_PCH') }
|
||||
@{ Name = '--no-pch works without a cache'; Args = @('-s', '--no-pch')
|
||||
NotContains = @('COMPILER_LAUNCHER') }
|
||||
@{ Name = 'the slicer build runs gettext'; Args = @('-s')
|
||||
Contains = @('run_gettext.bat') }
|
||||
# tools\7z.exe needs a 7z.dll beside it, which the repo does not carry,
|
||||
@@ -324,6 +338,42 @@ $cases = @(
|
||||
@{ Name = 'deps and slicer build in one invocation'; Args = @('-d', '-s', '-x', '-l')
|
||||
Contains = @('cmake -S deps', 'cmake -B "build-clang" ') }
|
||||
|
||||
'the compiler cache'
|
||||
@{ Name = '--cache needs clang-cl and Ninja'; Args = @('-s', '--cache', 'ccache'); ExpectExit = 1
|
||||
Contains = @('needs clang-cl and Ninja') }
|
||||
# cl.exe is out of scope, since ccache refuses every compile under /Zi.
|
||||
@{ Name = '--cache under Ninja still needs clang-cl'; Args = @('-s', '-x', '--cache', 'ccache'); ExpectExit = 1
|
||||
Contains = @('needs clang-cl and Ninja') }
|
||||
@{ Name = 'an unknown --cache value is rejected'; Args = @('-s', '-x', '--cache', 'nope'); ExpectExit = 1
|
||||
Contains = @('Expected ccache, sccache or off') }
|
||||
# A bare PATH, since the machine running the tests may have sccache installed.
|
||||
@{ Name = 'a --cache tool that is not there is caught early'; Args = @('-s', '-l', '-x', '--cache', 'sccache'); ExpectExit = 1
|
||||
Env = @{ PATH = 'C:\Windows\system32;C:\Windows' }
|
||||
Contains = @('is not on PATH') }
|
||||
@{ Name = '--cache takes any casing'; Args = @('-s', '-l', '-x', '--cache', 'CCACHE')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
Contains = @('ccache.exe') }
|
||||
@{ Name = '--cache off asks for no launcher'; Args = @('-s', '-x', '--cache', 'off')
|
||||
NotContains = @('COMPILER_LAUNCHER') }
|
||||
@{ Name = 'no --cache asks for no launcher'; Args = @('-s', '-x')
|
||||
NotContains = @('COMPILER_LAUNCHER') }
|
||||
@{ Name = '--cache turns the precompiled header off'; Args = @('-s', '-l', '-x', '--cache', 'ccache')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
Contains = @('-DSLIC3R_PCH=OFF', 'COMPILER_LAUNCHER') }
|
||||
# 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 }
|
||||
Match = @('^Compiler cache: .*/ccache\.exe$') }
|
||||
@{ Name = '--cache reaches the dependency configure too'; Args = @('-d', '-l', '-x', '--cache', 'ccache')
|
||||
Env = @{ PATH = $ccacheOnPath }
|
||||
Contains = @('-DCMAKE_C_COMPILER_LAUNCHER=') }
|
||||
# Nothing records a launcher without a configure, so the tool is not needed.
|
||||
# Reaching the cmake check on a bare PATH is what proves it was skipped.
|
||||
@{ Name = '--no-configure asks for no cache tool'; Args = @('-s', '-l', '-x', '--no-configure', '--cache', 'ccache'); ExpectExit = 1
|
||||
Env = @{ PATH = 'C:\Windows\system32;C:\Windows' }
|
||||
Contains = @('CMake was not found')
|
||||
NotContains = @('is not on PATH') }
|
||||
|
||||
'the developer loop'
|
||||
@{ Name = '--slicer-target builds one target'; Args = @('-s', '--slicer-target', 'libslic3r')
|
||||
Contains = @('--config Release --target libslic3r') }
|
||||
|
||||
Reference in New Issue
Block a user