build(cmake): clean up presets, add release/apple presets, cross-platform triplets

Rationalize the preset set to match the project's actual state (past M5):
- Rename dev->skeleton (no-deps stub smoke), m1-dev->dev (default dev preset)
- Drop m2-dev (cache-identical to m1-dev)
- Add release preset (optimized + tests on, symbols kept)
- Strip server-release binaries (-s linker flag)
- Add apple-dev/apple-ios/apple-ios-sim scaffolding presets for XCFramework

Add cmake/voicecat-toolchain.cmake wrapper that auto-resolves the vcpkg
triplet from the host platform (x64-mingw-static/x64-linux/arm64-osx) so
the main presets work on Windows/Linux/macOS without per-OS variants.

Update all docs (building.md, CLAUDE.md, README.md, AGENTS.md, deployment.md,
tech-stack.md, client READMEs) and stale preset-name references in code
comments. No C++ behavior changes — the core was already portable.
This commit is contained in:
2026-06-18 03:16:01 +02:00
parent d397731db9
commit bcb7ae8ccb
23 changed files with 454 additions and 144 deletions

View File

@@ -10,6 +10,49 @@ up instantly. Newest status at the top.
## ▶ Where we left off / next action
- **Done:** **CMake preset cleanup + cross-platform build config** (2026-06-18). The preset
set was a mess — `dev` (never used), `m1-dev` (the one everyone used), `m2-dev`
(cache-identical to `m1-dev`, never used), no optimized+tests preset, no stripping.
Cleaned up to a sensible set + added cross-platform triplet auto-resolution + Apple
platform scaffolding:
- **Renames:** `dev``skeleton` (no-deps stub smoke — accurately named now); `m1-dev``dev`
(the default development preset — milestone-named presets were misleading since the
project is past M5); `m2-dev` **dropped** (cache-identical to `m1-dev`).
- **New presets:** `release` (optimized Release + tests on, symbols kept — run the suite
against optimized code or profile); `apple-dev` / `apple-ios` / `apple-ios-sim`
(scaffolding — static `libvoicecat.a` slices for the Swift Package / XCFramework; marked
"not yet CI-validated, build on macOS to verify").
- **`server-release`** now strips binaries (`CMAKE_EXE_LINKER_FLAGS=-s` +
`CMAKE_SHARED_LINKER_FLAGS=-s`) — smaller executables for deployment.
- **Cross-platform triplet auto-resolution:** new `cmake/voicecat-toolchain.cmake` wraps
vcpkg's toolchain and resolves `VCPKG_TARGET_TRIPLET` / `VCPKG_HOST_TRIPLET` from
`CMAKE_HOST_SYSTEM_NAME` + `CMAKE_HOST_SYSTEM_PROCESSOR``x64-mingw-static` on Windows,
`x64-linux` on Linux, `arm64-osx` on Apple Silicon. The main presets (`dev`, `release`,
`server-release`) now work on all three platforms without per-OS variants. Cross-compile
presets (`apple-ios`, `apple-ios-sim`) override `VCPKG_TARGET_TRIPLET` explicitly. Hidden
base preset renamed `vcpkg-base``vcpkg-common` (now points at the wrapper toolchain
instead of vcpkg's toolchain directly).
- **No C++ source changes** — the core was already portable (every `#ifdef _WIN32` in
`client.cpp` already had a POSIX `#else`; `voicecat.h`'s export macro already handled
GCC visibility; `transport.cpp` is pure Asio; miniaudio abstracts WASAPI/CoreAudio/ALSA).
- **Docs updated:** `docs/building.md` (full rewrite — 8-preset table, platform matrix,
preset history mapping old names to new, Apple scaffolding section), `CLAUDE.md` (build
section reframed around `dev` as default, status line updated to M5-done), `README.md`
(stale "M0 skeleton" framing replaced with current M5 reality), `AGENTS.md` (build
section updated, stale "placeholder builtin-baseline" sentence deleted),
`docs/deployment.md` (server-release now stripped + cross-platform note),
`docs/tech-stack.md` §4 (triplet auto-resolution + Apple scaffolding note),
`clients/apple/README.md` (new "Building the core for Apple platforms" section with
XCFramework workflow), `clients/windows/README.md` (m1-dev→dev).
- **Code comments updated:** `core/include/voicecat.h`, `core/src/net/transport.h`,
`core/src/voicecat.cpp`, `tests/CMakeLists.txt` — preset name references updated.
- **Historical `PROGRESS.md` entries left intact** — `m1-dev`/`m2-dev` mentions in older
entries are a true record of what was run; rewriting them would falsify history. The
preset history table in `docs/building.md` §1 maps old names to new.
- **Verified:** `cmake --list-presets` shows all 8 presets. `skeleton` + `dev` configure
and build green on Windows. Apple presets are scaffolding (won't build on Windows —
expected; they require macOS).
- **Done:** **Disconnect, timeout & keepalive system** (2026-06-18). Three reported bugs
traced to one root cause + two missing designed features, all fixed:
1. **Stale users after disconnect + eternal PLC hiss** (root cause): `ConnSession::close()`