Skip to content

build(perf): Cut full rebuild time and the ARM64 CI jobs - #184

Merged
relmer merged 10 commits into
masterfrom
claude/build-time-deps-merged-a94e4c
Nov 10, 2026
Merged

relmer merged 10 commits into
masterfrom
claude/build-time-deps-merged-a94e4c

Conversation

@relmer

@relmer relmer commented Nov 10, 2026

Copy link
Copy Markdown
Owner

Draft, opened to measure CI. Build time roughly doubled when 033 merged: a Debug x64 rebuild went from 42 s to 78 s on a 32-core machine, and the CI run from about 17.5 to 31 minutes.

Changes

  • Move the C++/WinRT includes out of Dxui/Pch.h into Dxui/Window/DxuiWinRt.h, which only DxuiPopupHost.cpp includes. They take about 4 s to parse. Dxui headers include Pch.h and Dxui.h is in three other precompiled headers, so that cost was paid four times. CheckStyle.ps1 and copilot-instructions.md have the exception to the angle-bracket rule.
  • Build the static libraries in parallel. CassoEmuCore no longer references CassoCore and Dxui; a static library does not link them, so the references only imposed build order. CassoCli and ScenarioTests reference Dxui directly.
  • Compile StbVorbisWrapper.cpp with the PCH. It was a separate one-file compile step that parsed Pch.h again.
  • Compile shaders in parallel (MultiProcFXC).
  • Rename UnitTest/CassoLink/BootDiskTests.cpp and its class to CassoLinkBootDiskTests. Two files with that name compiled to one .obj, so its three tests were never linked or run. MSB8027 is now an error.
  • ARM64 CI jobs build only Casso, CassoCli and CassoExplorer. The ARM64 test DLLs cannot run on the x64 runner. In the ARM64 Release job, UnitTest took about 12 minutes to compile and analyze and 6.5 minutes to link.
  • scripts/ProfileBuild.ps1, plus -BinaryLog and -Property options for Build.ps1.

Measured locally (Debug x64 rebuild, 32 cores, nothing else building)

Rebuild
master 78 s
WinRT includes moved 59 s
libraries in parallel, Vorbis wrapper on the PCH 49 s
shaders in parallel 46 s

Verification

  • Debug unit suite: 8536 of 8536 passed, before the shader and test-rename commits. Both BootDiskTests classes pass after them (7 of 7).
  • Code analysis rebuild, Debug x64: no errors or analysis warnings, before the last commits.
  • ARM64 Debug build of the three programs with the new target list succeeds and does not build UnitTest.dll.
  • Not run locally: Release and ARM64 through the full gate, the scenario suite, the AddressSanitizer run.

Open question

The parallel-library, shader and link changes mostly use idle cores, which a 4-core runner does not have. How much of the local gain applies on CI is unknown until this PR's run finishes.

@relmer
relmer marked this pull request as ready for review November 10, 2026 17:21
@relmer
relmer merged commit ab930d4 into master Nov 10, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant