Skip to content

Consume the shared FFT from DspTap; adopt tap::mu (and TapHouse v4)#27

Merged
tap merged 5 commits into
mainfrom
claude/shared-code-submodule-strategy-rdel5d
Jul 21, 2026
Merged

Consume the shared FFT from DspTap; adopt tap::mu (and TapHouse v4)#27
tap merged 5 commits into
mainfrom
claude/shared-code-submodule-strategy-rdel5d

Conversation

@tap

@tap tap commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Moves MuTap onto the extracted shared FFT and into the family namespace, plus the TapHouse v4 style bump. Three commits:

1. Adopt TapHouse v4

Normalize the drift-check pin to v4 and add scripts/tidy.sh (the local clang-tidy gate mirror) — matches the rest of the family.

2. Consume the shared FFT from DspTap; adopt the tap::mu namespace

FFT:

  • Add submodules/dsptap and link tap::dsp; delete the vendored copies (include/mutap/fft.h, third_party/{ooura,cmsis-dsp}) and the FFT unit tests (now DspTap's). include/mutap/fft.h becomes a thin shim that includes tap/dsp/fft.h and re-exports real_fft/real_fft32/basic_real_fft into tap::mu, so the historical include path and unqualified names keep working.
  • The extracted wrapper is byte-identical to what lived here, and DspTap selects the per-target backend itself (CMSIS on the M55, vDSP on Apple, Ooura elsewhere), so the CMSIS/Accelerate option blocks are gone.

Namespace: rename mutaptap::mu across the library, tests, tools, and benches. The CMake target MuTap::MuTap and the MUTAP_* build options are unchanged, so MuTap-Max keeps building against it until it's migrated separately.

3. Re-pin the DspTap submodule to main

After the DspTap PRs merged, move the pin from the pre-merge feature-branch commit onto main.

Verification

Builds on Linux against the DspTap submodule; the FFT-consuming suites (FDAF, FD-Kalman, LPC, closed-loop, PEM-AFC, postfilter) pass. The heavy ITU/G168 integration battery exercises the same byte-identical FFT and runs in CI.

Follow-up (not here)

MuTap-Max consumes MuTap and will need updating: recursive submodule init (the nested dsptap) and the mutap::tap::mu:: rename.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1


Generated by Claude Code

tap and others added 5 commits July 20, 2026 23:49
Everything already matched TapHouse v4 (configs + tidy.sh); only the
drift-check ref needed bumping off v3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1
Wire MuTap onto the extracted tap::dsp real FFT and move MuTap's own code to
the family namespace.

FFT:
- Add submodules/dsptap and link tap::dsp; delete the vendored copies
  (include/mutap/fft.h, third_party/{ooura,cmsis-dsp}) and the FFT unit tests
  (now DspTap's). include/mutap/fft.h becomes a thin shim that includes
  tap/dsp/fft.h and re-exports real_fft / real_fft32 / basic_real_fft into
  tap::mu, so the historical include path and the unqualified names keep
  working. The extracted wrapper is byte-identical to what lived here, and
  DspTap selects the per-target backend itself (CMSIS on the M55, vDSP on
  Apple, Ooura elsewhere), so the CMSIS/Accelerate option blocks are gone.

Namespace:
- Rename mutap -> tap::mu across the library, tests, tools and benches
  (CMake target MuTap::MuTap and the MUTAP_* build options are unchanged, so
  MuTap-Max keeps building against it until it is migrated separately).

Verified: builds on Linux against the DspTap submodule; the FFT-consuming
suites (FDAF, FD-Kalman, LPC, closed-loop, PEM-AFC, postfilter) all pass. The
heavy ITU/G168 integration battery exercises the same byte-identical FFT and
runs in MuTap's CI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1
Move the submodule pin off the pre-merge feature-branch commit (48f2629) onto
DspTap main (9cbfbca). Main additionally carries the double-engine float-I/O
overloads, which MuTap does not use (C++20-constrained, additive) — verified
the build is unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1
MuTap gained a submodule (submodules/dsptap) when it moved to the shared FFT,
but the workflows predate that and checked out without submodules, so every
build/clang-tidy job failed at configure (submodules/dsptap empty →
add_subdirectory has no CMakeLists.txt). Add `submodules: recursive` to every
actions/checkout step.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1
The suppressor branch-free/branchy parity job compiles the Ooura sources and
the parity harness directly (bypassing CMake). The vendored Ooura moved into
the DspTap submodule, so update the paths (third_party/ooura ->
submodules/dsptap/third_party/ooura) and add -Isubmodules/dsptap/include (the
harness pulls mutap/fft.h, now a shim over tap/dsp/fft.h).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRTDgYKY38WH8Bqz17W9k1
@tap
tap merged commit 2e02473 into main Jul 21, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant