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

@ -40,23 +40,37 @@ hosting supports the compatible mono processors documented in
## Build
Requirements: a C compiler, a C++ compiler, GNU Make, and `pkg-config`. FLTK is optional for the core and tests.
Requirements: CMake 3.25+, a C99 compiler, Python 3.12+ and a build backend
such as Ninja or Unix Makefiles. The optional GUI needs C++17 and FLTK; JACK and
LADSPA development files enable their optional integrations.
```sh
make
make test
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --parallel
ctest --test-dir build --output-on-failure
```
`make` also builds `build/xtc-check`, a headless core startup/shutdown
check. Use `make debug` for a separate debug build and test run. See
[docs/BUILD.md](docs/BUILD.md) for the inspected toolchain and baseline limits.
Build the optional FLTK GUI if FLTK is installed:
For quick development, the optional Make wrapper provides the same workflow:
```sh
make gui
make # configure and build
make test # build and run CTest
make gui # build just the FLTK application
make run # build and launch it
make clean # clean products; keep the CMake cache
```
Override `BUILD_DIR`, `BUILD_TYPE` or `JOBS` as needed, for example
`make BUILD_DIR=build/release BUILD_TYPE=Release JOBS=8`. Pass additional options
with `CMAKE_ARGS` and `CTEST_ARGS`. CMake remains the authoritative build system.
This builds `libxtc.a`, the headless `xtc-check`, tests, examples and the FLTK
application when available. Live JACK tests are opt-in. Use `-DXTC_BUILD_GUI=OFF`
for the C-only build, or the `debug`, `release`, `minimal` and `sanitize` presets
for separate configurations. See [docs/BUILD.md](docs/BUILD.md) for options,
focused tests, installation and IDE setup. [Phase 108](docs/ROADMAP.md#phase-108--complete-cmake-build-migration) records
the CMake migration.
Run the GUI:
```sh
@ -93,24 +107,24 @@ active graph intact; queued changes are labeled until the engine adopts them.
See [GUI documentation](docs/GUI.md).
For Linux installation, routing and CLI options see [LINUX.md](docs/LINUX.md);
for native effects/instruments see [NATIVE_API.md](docs/NATIVE_API.md).
`make release`, `make dist`, `make test-install` and `make test-release` provide
release preparation; see [RELEASING.md](docs/RELEASING.md) for exact guarantees.
With JACK development files and an existing JACK-compatible server, run the
isolated software-loopback test with `make test-jack` and the record/reopen/play
acceptance test with `make test-jack-audio` and MIDI acceptance with
`make test-jack-midi`. It connects only test
clients. See [engine documentation](docs/AUDIO_ENGINE.md) for configuration,
routing, ownership and recovery.
The release preset and CMake’s `dist`, `test-install`, `test-release` and
`test-package` targets provide release preparation; see
[RELEASING.md](docs/RELEASING.md) for exact guarantees.
With JACK development files and an existing JACK-compatible server, configure
with `-DXTC_ENABLE_LIVE_TESTS=ON`, build, and run
`ctest --test-dir build --output-on-failure -L live`. These software-loopback
checks connect only test clients. See [engine documentation](docs/AUDIO_ENGINE.md)
for configuration, routing, ownership and recovery.
Clean generated files:
```sh
make clean
cmake --build build --target clean
```
## Suggested first agent task
Read `AGENT.md` and `docs/ARCHITECTURE.md`. Inspect the existing implementation, run `make test`, and report gaps before adding the next feature. Do not jump directly to plugin hosting or a full sequencer.
Read `AGENT.md` and `docs/ARCHITECTURE.md`. Inspect the existing implementation, run `cmake --build build --target check`, and report gaps before adding the next feature. Do not jump directly to plugin hosting or a full sequencer.
## License
@ -128,19 +142,19 @@ See [RECOVERY.md](docs/RECOVERY.md), [NATIVE_API.md](docs/NATIVE_API.md) and
For everyday use see [USER_MANUAL.md](docs/USER_MANUAL.md),
[KNOWN_LIMITATIONS.md](docs/KNOWN_LIMITATIONS.md) and
[MAINTENANCE.md](docs/MAINTENANCE.md). `xtc-check --diagnose` reports build features;
`make test-package` checks a local system-linked Linux binary archive.
`cmake --build build --target test-package` checks a local system-linked Linux binary archive.
Effect automation/controllers, editing commands, v7 project-folder media paths,
performance baselines and release/installation checks are also supported.
Non-destructive audio splitting, clip gain/fades and cached timeline waveforms
are supported, with undo and v8 persistence (reading v1–v7). See
[AUDIO_FILES.md](docs/AUDIO_FILES.md#non-destructive-clip-editing).
`make test-audio-editing` checks source preservation and exact boundary output.
`cmake --build build --target test-audio-editing` checks source preservation and exact boundary output.
Time stretching and independent pitch shifting remain deferred.
Signal-flow graph layout, routing diagnostics, direction/role indicators and
atomic unity-gain insertion into a wire are supported. See
[ROUTING.md](docs/ROUTING.md); `make test-routing` verifies the C routing contract.
[ROUTING.md](docs/ROUTING.md); `cmake --build build --target test-routing` verifies the C routing contract.
One-level mix buses, routing, coherent track/bus peaks and master clipping
indicators are supported, persisted in v9 (reading v1–v8). See [MIXER.md](docs/MIXER.md).
@ -198,12 +212,12 @@ for file support, routing and persistence details.
[Steinberg SDK integration (Phase 106)](docs/STEINBERG.md) adds conventional Linux
VST3 bundle loading, transport context, official-SDK gain/synth examples and
validator checks. Run `make VST3_SDK_ROOT=/path/to/vst3sdk test-steinberg-sdk`
validator checks. Run `cmake -S . -B build -DXTC_VST3_SDK_ROOT=/path/to/vst3sdk -DXTC_BUILD_STEINBERG=ON && cmake --build build --target test-steinberg-sdk`
for optional SDK qualification. A Windows ASIO device diagnostic is provided;
a native ASIO playback/capture backend remains planned.
[JUCE integration (Phase 107)](docs/JUCE.md) provides an optional VST3/standalone
Soft Keys instrument with a native editor, DSP effects, presets, MIDI-to-WAV
rendering and VST3 hosting examples. Build and qualify it with
`make JUCE_ROOT=/path/to/JUCE test-juce`; review JUCE’s AGPLv3/commercial licence
`cmake -S . -B build -DXTC_JUCE_ROOT=/path/to/JUCE -DXTC_BUILD_JUCE=ON && cmake --build build --target test-juce`; review JUCE’s AGPLv3/commercial licence
before distributing linked binaries. See [the examples](examples/juce/README.md).