Toolchain: VS2022 (v143) is the build of record -- /FORCE:UNRESOLVED retired

The v143 linker refuses to emit an image with unresolved externals even
under /FORCE, so the dead offline-tool ladders in mech3.cpp
(Mech::CreateSubsystemStream / SubsystemDefaultData -- never called at
runtime, resources ship prebuilt in BTL4.RES) are compiled out behind
BT412_OFFLINE_TOOLS (default off). The exe links /FORCE:MULTIPLE only:
a genuinely unresolved symbol is now a hard link error instead of a
hidden runtime AV. No other source changes needed for v143.

Verified: clean build; solo DEV.EGG runs; two-instance loopback MP via
btconsole.py -- mesh forms, mission runs both sides, master + replicant
tick in each world. (Phase 1 of docs/BT412-ROADMAP.md)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-14 07:36:19 -05:00
co-authored by Claude Fable 5
parent d8dd512843
commit 55e4295dc3
5 changed files with 84 additions and 29 deletions
+14 -10
View File
@@ -50,9 +50,10 @@ CLAUDE.md knowledge-base ROUTER — identity, protocols, quick-lookup,
## Prerequisites
- **Visual Studio 2019 BuildTools** (MSVC v142, x86). The Community install on the original dev
box was broken, hence the explicit BuildTools instance in the configure line below; adjust to
your install.
- **Visual Studio 2022 BuildTools** (MSVC v143, x86) — the BT412 toolchain of record (moved from
the 2019/v142 line at the 4.12 fork; v142 still builds if you swap the generator back). The
explicit BuildTools instance in the configure line below matches the dev box; adjust to your
install.
- **CMake ≥ 3.20**.
- **Legacy DirectX SDK (June 2010)** — the engine uses `d3dx9`/`dinput`/`dxerr`, removed from the
modern Windows SDK. Default path `C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)`;
@@ -65,16 +66,19 @@ the exe automatically at build time.
## Build (32-bit / Win32)
```
cmake -S . -B build -G "Visual Studio 16 2019" -A Win32 ^
-DCMAKE_GENERATOR_INSTANCE="C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools"
cmake -S . -B build -G "Visual Studio 17 2022" -A Win32 ^
-DCMAKE_GENERATOR_INSTANCE="C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools"
cmake --build build --config Debug
```
Must be **Win32** — the DirectX SDK link libs are `Lib/x86`. The link uses `/FORCE`: the 1995
headers define free functions/globals without `inline`/`extern`, so identical symbols appear in
many translation units (~124 `LNK2005`); `/FORCE:MULTIPLE` keeps the first. `UNRESOLVED` tolerates
a dead offline-tool factory in `mech3.cpp` that is never called at runtime. (Cleanup task: move
those definitions to single TUs + neutralize the dead factory, then drop `/FORCE`.)
Must be **Win32** — the DirectX SDK link libs are `Lib/x86`. The link uses `/FORCE:MULTIPLE`: the
1995 headers define free functions/globals without `inline`/`extern`, so identical symbols appear
in many translation units (~124 `LNK2005`); `MULTIPLE` keeps the first. `UNRESOLVED` is gone as of
4.12 — the v143 linker refuses to emit an image with unresolved externals even under `/FORCE`, so
the dead offline-tool factory in `mech3.cpp` is neutralized behind `BT412_OFFLINE_TOOLS` (default
off) and a genuinely unresolved symbol is now a hard link error instead of a hidden runtime AV.
(Remaining cleanup task: move the multiply-defined globals to single TUs, then drop `/FORCE`
entirely.)
## Run