From 957a415bc1960526eaaeda98eaa71443485e3188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= <44814898+BruebachL@users.noreply.github.com> Date: Sat, 7 Nov 2026 14:04:43 +0100 Subject: [PATCH] [CI] Build the Windows and macOS legs without debug information Debug information is most of what a compiler cache stores: one Linux configuration measures 1.2 GB with full DWARF and 660 MB at -g1. The Windows leg cannot be lowered that way, because MSVC has no -g level and /Z7 is the only cacheable form, so it sits at full debug info and fills a 1.2 GB cache. Teach COCKATRICE_DEBUG_INFO_LEVEL=0 to mean something on MSVC by leaving /Z7 out, and build the vcpkg legs (Windows and macOS) at level 0 for every non-tag ref. A tag is the build that ships and is symbolicated, so it keeps the full set. The Linux legs keep -g1: a sanitizer report without file and line is not worth the quota it would save. Report the ccache directory and the object total at the end of each leg, so the working set a bound has to fit is a number in the log rather than an estimate. --- .github/workflows/desktop-build.yml | 22 ++++++++++++++++++++-- CMakeLists.txt | 9 ++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml index 7e31fed66..77cba2455 100644 --- a/.github/workflows/desktop-build.yml +++ b/.github/workflows/desktop-build.yml @@ -702,8 +702,11 @@ jobs: CCACHE_DIR: ${{ github.workspace }}/.cache/ CCACHE_SIZE: ${{ matrix.ccache_size || '700M' }} PERSIST_CCACHE: ${{ matrix.persist_ccache || 'true' }} - # MSVC has no -g level, so the Windows leg does not ask for one. - COCKATRICE_DEBUG_INFO_LEVEL: ${{ matrix.os != 'Windows' && github.ref_type != 'tag' && '1' || '' }} + # MSVC has no -g level, so there is nothing to ask for on Windows: level 0 is the one + # value with a meaning there, and it drops /Z7 rather than lowering a level. Pull-request + # builds carry no debug information, which is most of what a compiler cache stores; a + # tag is the build whose binary is shipped and symbolicated, so it keeps the full set. + COCKATRICE_DEBUG_INFO_LEVEL: ${{ github.ref_type != 'tag' && '0' || '' }} # Shared with build-vcpkg-nightly so the two leg sets run the same steps. steps: &vcpkg-steps @@ -877,6 +880,21 @@ jobs: WITH_CRASH_REPORTING: ${{ matrix.type == 'Release' && 'ON' || '' }} run: .ci/compile.sh --server --test --vcpkg + # What the compiler cache has to hold for this leg. ccache stores the objects it + # compiles, so their total is the working set a bound has to fit, and the cache + # directory shows what this build actually wrote. Debug information dominates both, + # which is why the level above is reported next to them. + - name: "Report compiler cache footprint" + if: always() + shell: bash + run: | + echo "=== ccache directory" + du -sh "$CCACHE_DIR" 2>/dev/null || echo "(none)" + echo "=== objects and archives" + find build -type f \( -name '*.o' -o -name '*.obj' -o -name '*.a' -o -name '*.lib' \) -exec du -k {} + 2>/dev/null \ + | awk '{n++; s+=$1} END {printf "%d files, %.2f GB\n", n, s/1048576}' + echo "=== debug info level in use: '${COCKATRICE_DEBUG_INFO_LEVEL}'" + - name: "Install sentry-cli" if: needs.configure.outputs.tag != null && matrix.make_package == '1' # Same as the Linux leg above: the install downloads from Sentry's registry, so a diff --git a/CMakeLists.txt b/CMakeLists.txt index 1edfef8e0..71f195385 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -279,7 +279,14 @@ set(COCKATRICE_DEBUG_INFO_LEVEL ) if(NOT COCKATRICE_DEBUG_INFO_LEVEL STREQUAL "") if(MSVC) - message(WARNING "COCKATRICE_DEBUG_INFO_LEVEL is ignored on MSVC") + # MSVC has no -g level, so /Z7 is either there or it is not. Level 0 is the only value + # that means something here: without /Z7 the objects carry no debug information, which is + # what a cache that has to fit a bound holds. Anything else is the full debug info. + if(COCKATRICE_DEBUG_INFO_LEVEL STREQUAL "0") + string(REPLACE " /Z7" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else() + message(WARNING "COCKATRICE_DEBUG_INFO_LEVEL is ignored on MSVC except 0") + endif() else() string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g${COCKATRICE_DEBUG_INFO_LEVEL}") string(APPEND CMAKE_CXX_FLAGS_RELEASE " -g${COCKATRICE_DEBUG_INFO_LEVEL}")