• src/sbbs3/Directory.Build.targets

    From Rob Swindell (on Windows 11)@rob@synchro.net to Git commit to main/sbbs/master on Wed May 27 13:47:56 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/2660833170ac70b2a76c0b42
    Added Files:
    src/sbbs3/Directory.Build.targets
    Log Message:
    sbbs3: disable PDB generation for Release|Win32 builds

    Adds src/sbbs3/Directory.Build.targets, auto-imported by MSBuild after
    every sbbs3 .vcxproj's body, which overrides DebugInformationFormat to
    None in ClCompile and GenerateDebugInformation to false in Link for the Release|Win32 configuration across all 33 projects (including scfg/scfg.vcxproj).

    The motivation is sporadic, non-deterministic "internal compiler error" failures observed on the Windows GitLab runner -- random source file
    and line each run, persisting after AV exemption and single-instance
    runner limiting. The root cause is mspdbsrv.exe (the shared PDB writer
    spawned by cl.exe under /Zi) wedging or thrashing across the seven
    sequential builds the windows-x86 [sbbs] job performs in one shot;
    mspdbsrv outlives a single cl invocation and a single MSBuild process,
    so per-runner throttling does not help. Eliminating the compiler /Zi
    and linker /DEBUG settings removes mspdbsrv from the Release pipeline
    entirely.

    Verified by building ans2asc.vcxproj Release: produces a working .exe
    (~42% smaller, no debug sections), no .pdb in either the output dir or
    the intermediate dir, and MSBuild evaluates _DebugSymbolsProduced as
    false. Debug builds are unaffected.

    The CI artifact list in .gitlab-ci.yml never shipped .pdb files anyway.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • From Rob Swindell (on Windows 11)@rob@synchro.net to Git commit to main/sbbs/master on Wed May 27 22:14:35 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/311ed074172dc2231729938f
    Modified Files:
    src/sbbs3/Directory.Build.targets
    Log Message:
    sbbs3: also disable WPO/LTCG for Release|Win32 builds

    Extends the Release|Win32 toolchain pruning in 266083317. That commit suppressed PDBs to take mspdbsrv.exe out of the picture; CI job 1507619
    then surfaced the next layer — a `link.exe` LTCG-pass ICE at
    `ars.c(35)` (compiler file `p2/main.cpp` line 258), still random across
    runs. Same shape of failure (shared toolchain subprocess, random TU), different subsystem: the LTCG backend (c2.dll UTC) re-codegens objects
    compiled with `/GL` at link time.

    Adds `WholeProgramOptimization=false` (drops `/GL`) and `LinkTimeCodeGeneration=Default` (drops `/LTCG:incremental`) for
    Release|Win32 across every sbbs3 vcxproj, eliminating LTCG as a
    shared CI dependency. WPO inlining is not load-bearing for these
    I/O-bound BBS binaries.