diff --git a/CLAUDE.md b/CLAUDE.md index b7a27e9..ecbaf8c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -42,6 +42,10 @@ Vendors three submodules (see `.gitmodules`): cmake --build build ctest --test-dir build +On a multi-config generator (Visual Studio, Xcode) the bare `ctest` command above +reports every test as "Not Run" — add `-C Debug` (or whichever config was built) to +resolve the test executables. Single-config generators (Ninja, Make) need no such flag. + Every pure module has a corresponding `_tests` executable target that runs without REAPER or a DAW. Targets are declared per directory: each `src/**/CMakeLists.txt` owns its own libraries and their test targets, added via `add_subdirectory` from the root, which keeps only repo-global settings (version, channel, vendor paths). `cmake/reasampler_targets.cmake` holds the two shared declaration helpers. The two loadable-module targets are `reaper_reasampler` (the REAPER extension `.dll`/`.dylib`/`.so`) and `reasampler_vst` (the VST3 instrument; Windows-only, omitted if the `vendor/vst3sdk` slice is absent). The `sample_usage_tests` executable target runs the pure unit tests for `sample_usage` (no REAPER, no DAW). ### Beta channel build diff --git a/docs/COMPLETED.md b/docs/COMPLETED.md index cf398cf..ffb79c4 100644 --- a/docs/COMPLETED.md +++ b/docs/COMPLETED.md @@ -19,6 +19,32 @@ findings — all content cut that should have survived — and all ten were remediated and re-gated before merge. Driver: Daniel's instruction — *"Brief concise engineering comments. A little why, and maybe context, never WHAT."* +### CMake build-system split (ad-hoc, Daniel's request) + +Split the 1423-line root `CMakeLists.txt` into a 91-line root plus 18 per-directory +`CMakeLists.txt` files under `src/`, with two shared declaration helpers +(`reasampler_pure_library`, `reasampler_test`) factored into a new +`cmake/reasampler_targets.cmake`. The root now keeps only repo-global concerns: +version/channel single-source-of-truth, `configure_file`, vendor path vars, +`LICE_SRC`, `enable_testing()`, and the `add_subdirectory` calls. Comments throughout +were rewritten to the project's comment conventions — phase/wave/ticket IDs removed, +module semantics already owned by `src/**/CLAUDE.md` deleted, load-bearing build +facts kept. + +Also fixed two duplicate-object-code defects surfaced by the split: 18 `core/` +translation units were previously compiled directly into the `reaper_reasampler` +module *while also* being linked in as static libraries — those 18 source entries +were removed from the module's source list and 3 missing link edges +(`view_tree`, `guid_diff`, `lane_keys`) added so every `core/` TU now enters through +exactly one static-library link edge. A dead `bridge_marshal` link edge was also +dropped from `reaper_reasampler`, and two inaccurate comments in +`src/app/CMakeLists.txt` were corrected. + +No `.cpp`, `.h`, `tests/`, or `vendor/` file was touched. Behaviour is unchanged and +was verified mechanically: same 130 targets, same 65 tests all passing, +`reaper_reasampler.dll` byte-identical at 3,477,504 bytes, both channels +(stable/beta) building to the same artifact names and locations as before. + ### Θ-W1-T1 — zone-retirement ReaSampler 9000's zone-mapping system is retired: one loaded capture, one parameter