Migrated from Make to CMake.

This commit is contained in:
Johannes Findeisen 2026-11-06 19:05:14 +01:00
commit b6ba093000
52 changed files with 1276 additions and 1210 deletions

View file

@ -1,5 +1,9 @@
# Roadmap
Build commands in Phases 0–107 are historical qualification records from the
Makefile era. The current supported commands are in [BUILD.md](BUILD.md);
Phase 108 replaces that build with CMake and CTest.
## Phase 0 — Baseline
### Goal
@ -3500,6 +3504,77 @@ building JUCE's standalone wrapper does not establish hardware acceptance.
---
## Phase 108 — Complete CMake Build Migration
### Goal
Replace the hand-written root Makefile with a full CMake project and CTest,
preserving C99/C++17 boundaries, optional dependencies, SDK examples, fixtures,
developer tools and the audited installation/release workflows. This explicitly
requested build migration can proceed alongside remaining hardware/platform
qualification in earlier phases.
### Tasks and acceptance criteria
- [x] Define target-based core, CLI, GUI, example and plugin-fixture builds with
warnings, generated dependencies and optional JACK/FLTK/LADSPA discovery.
- [x] Register offline/unit/integration and GUI checks with CTest; keep live
JACK workflows opt-in and retain linker-based fault injection.
- [x] Provide separate debug/release/minimal/sanitizer presets, screenshot,
analysis, benchmark, stress and focused test targets.
- [x] Build optional Steinberg/JUCE SDK examples through root CMake; eliminate
JUCE's recursive Make dependency while retaining standalone SDK entry points.
- [x] Preserve staged install/uninstall, configurable layouts, pkg-config,
license inventory, reproducible source exports and binary-package checks.
- [x] Remove the root Makefile and update current documentation, examples,
third-party build guidance and agent instructions to use CMake/CTest.
- [x] Validate GNU Makefiles and Ninja, a minimal C-only build, GUI checks,
sanitizer tests, SDK interoperability and release/install/package workflows.
### Implementation status
Completed on 2026-11-06 with CMake 4.4.5, GCC 16.2.1, Clang 23.1.4 and
both Unix Makefiles and Ninja. The original build-rule Makefile was removed; see
[BUILD.md](BUILD.md), [RELEASING.md](RELEASING.md) and
[third-party guidance](../third_party/README.md).
Validation:
- Debug CMake build with JACK/FLTK: all 55 registered offline/GUI tests passed.
- Ninja Release build with GUI/JACK/LADSPA disabled: all 41 tests passed; the
configuration enabled only C, and `BUILD_TESTING=OFF` also built successfully.
- Clang ASan/UBSan: all 42 offline tests passed, including one million virtual
playback blocks. Clang static analysis passed for all C core sources.
- Default/custom staged install and removal, C/C++ installed pkg-config consumers,
symlink protection, prefix spaces and minimal/no-JACK installation passed.
Binary archive contents, hashes, relocation and repeat packaging passed.
- Two independent source-export Release builds (including the GUI and CTest)
produced byte-identical `libxtc.a`, `xtc-check`, `xtc` and repacked archives.
The check used an isolated temporary Git index to include the new CMake files
without staging the user's working index; normal `dist` still exports indexed
files as documented.
- Root Steinberg SDK build: host interoperability and official validator CTests
passed. Root JUCE build: all four C-host, file/editor, processor and JUCE-host
CTests passed. The standalone JUCE entry point also configured and built its
CMake core target successfully. The bridge does not invoke Make.
- CMake screenshot capture produced four actual creative-workflow images in the
ignored binary tree. Preview targets wrote the expected WAV files; graph and
project benchmark drivers ran successfully (timings were not used as a gate
while compilation was running). Three minimal-build CPU stress rounds passed.
- Five opt-in live JACK/workflow tests were registered and inspected; they were
not rerun as hardware acceptance. External SDK sources can emit upstream
warnings; the normal project builds were warning-free.
A subsequent user-requested convenience Makefile forwards configure/build,
CTest, GUI/run and clean commands to CMake. It has no compilation rules or source
inventory; CMake remains authoritative. See [quick shortcuts](BUILD.md#quick-make-shortcuts).
Historical validation above remains as recorded. This migration adds no
Windows/macOS, physical-device, native ASIO, or additional plugin-format
qualification.
---
## Recommended Execution Order
Reorder the phases when the audit reveals a blocking dependency. Do not mark a