COMP: Build Pixi-Cxx CI as Release to enable Windows ccache#6327
Merged
hjmjohnson merged 4 commits intoMay 23, 2026
Merged
Conversation
The configure-ci task built RelWithDebInfo on every OS leg. On Windows the MSVC /Zi separate-PDB debug info makes nearly all compiler invocations uncacheable by ccache (~1% cacheable vs ~100% on Linux/macOS), so the Windows leg gets no ccache benefit. Release omits /Zi, letting Windows compilations be cached like the other platforms. Only configure-ci (the CI configure task, run for all OS legs) changes; the local-dev configure task keeps RelWithDebInfo.
The build/test tasks depend on the local-dev configure (RelWithDebInfo), so CI used --skip-deps to keep the configure-ci Release build type. Add build-ci (depends-on configure-ci) and test-ci (depends-on build-ci) and point the Pixi-Cxx workflow at the *-ci tasks, so the CI dependency chain resolves to the Release + ccache configure rather than the local default.
f358a5d to
dcb9ffd
Compare
This comment was marked as low quality.
This comment was marked as low quality.
Member
Author
|
Both greptile concerns reviewed. They are known behavior changes that are desired. |
dzenanz
approved these changes
May 22, 2026
Set fail-fast: false so a failure on one OS leg no longer cancels the in-progress legs for the other platforms, ensuring every platform runs to completion for diagnosis.
Add a build-external-data-ci task that builds the ITKData target to download all ExternalData blobs, and run it before the build step in the Pixi-Cxx workflow. A missing or failed download now aborts the job immediately at a dedicated step rather than surfacing as an opaque mid-test failure.
e4088a5
into
InsightSoftwareConsortium:main
22 of 23 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Build the Pixi-Cxx CI legs as
Releaseinstead ofRelWithDebInfo, and add dedicatedbuild-ci/test-cipixi tasks so CI's build/test chain depends onconfigure-ci(Release + ccache) rather than the local-devconfigure(RelWithDebInfo). Motivated by ccache being effectively useless on the Windows MSVC leg today.ccache rationale — Windows is ~1% cacheable today
The compiler-launcher plumbing (install, restore/save,
CMAKE_CXX_COMPILER_LAUNCHER=ccache) is identical across all three OS legs, butRelWithDebInfoadds MSVC/Zi(separate-PDB debug info), which ccache cannot cache. Measured on a recentmainPixi-Cxx run:Releaseomits/Zi, so Windows compilations become cacheable like Linux/macOS./O2is unchanged, so generated code is equivalent; only debug info is dropped. CDash/Azure debug coverage is unaffected — the Azure ITK.Linux leg already builds Debug for assert()/debug-codepath coverage.Disk rationale — expected Windows .obj/.pdb size reduction
Because
/O2is identical in both configs, the entire object-size delta is the CodeView debug info/Ziwrites into each.obj(.debug$Ssymbols,.debug$Ttype records). For ITK's extremely template-dense code,.debug$Tdominates (one set of type records per distinct instantiation).Expected on the Windows leg:
.obj~60–75% smaller (Release object ≈ ¼–⅖ of the RelWithDebInfo object; ITK's template density puts it toward the upper end)..pdbfiles eliminated entirely — compilervc*.pdb+ linker.pdb, often as large as the objects themselves. The existing post-build cleanup (COMP: Extend Pixi-Cxx post-build cleanup to MSVC artifacts (followup #6322) #6324) only deletes.obj/.lib; it never touched PDBs, so this is additional headroom..libshrink proportionally (cxx CI config is static).These are estimates from MSVC behavior, not yet a measurement; the cleanup step can be instrumented to report exact bytes if a hard number is wanted.
Why the build-ci / test-ci tasks
build/testdepend on the local-devconfigure(RelWithDebInfo), so CI relied on--skip-depsto keep the explicitly-runconfigure-ci(Release) build type from being clobbered. Addingbuild-ci(depends-onconfigure-ci) andtest-ci(depends-onbuild-ci) makes the CI dependency chain resolve to Release + ccache by construction. The bareconfigure/build/testtasks keepRelWithDebInfofor local development (symbols preserved).--skip-depsis retained in the workflow for step isolation: the post-build disk-cleanup step deletes intermediates between Build and Test, so Test must not attempt a relink.Local validation
Rebased on latest
main;pixi run configure-cithenpixi run --skip-deps build-cion macOS: