Files
shawn a5423b7f55 Initial extraction: C++ MixerEngine standalone daemon
Extracted from op-pedal mixer-engine branch. Core components:

- MixerEngine / MixerChannelStrip / MixerBus — cleaned of LV2/Pedalboard/IHost/MidiMapper deps
- MixerControlServer — Unix domain socket JSON control interface
- main.cpp — JACK audio I/O client with headless fallback
- CMake build — auto-fetches nlohmann/json, links JACK
- 9 core tests passing

Architecture: JACK ports → MixerEngine::process() → JACK ports,
controlled via Unix socket JSON commands.
2026-06-23 12:17:45 -04:00

101 lines
3.5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(oplabs-mixer-daemon
VERSION 1.0.0
DESCRIPTION "OPLabs Standalone Mixer Engine Daemon"
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# ---------------------------------------------------------------------------
# Dependencies
# ---------------------------------------------------------------------------
# JACK Audio Connection Kit
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
pkg_check_modules(JACK jack)
endif()
if(NOT JACK_FOUND)
find_package(Jack QUIET)
endif()
# nlohmann/json (single-header, fetched automatically)
include(FetchContent)
FetchContent_Declare(
nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
)
FetchContent_MakeAvailable(nlohmann_json)
# ---------------------------------------------------------------------------
# Mixer library (static)
# ---------------------------------------------------------------------------
set(MIXER_SOURCES
src/MixerBus.cpp
src/MixerChannelStrip.cpp
src/MixerEngine.cpp
)
set(MIXER_HEADERS
include/mixer/Types.hpp
include/mixer/MixerBus.hpp
include/mixer/MixerChannelStrip.hpp
include/mixer/MixerEngine.hpp
)
add_library(mixer STATIC ${MIXER_SOURCES})
target_include_directories(mixer PUBLIC include)
target_link_libraries(mixer PUBLIC nlohmann_json::nlohmann_json)
target_compile_options(mixer PRIVATE -Wall -Wextra -Wpedantic)
# ---------------------------------------------------------------------------
# Control server library (depends on mixer + JACK)
# ---------------------------------------------------------------------------
add_library(mixer-control ${MIXER_SOURCES} src/MixerControlServer.cpp)
target_include_directories(mixer-control PUBLIC include)
target_link_libraries(mixer-control PUBLIC nlohmann_json::nlohmann_json)
target_compile_options(mixer-control PRIVATE -Wall -Wextra -Wpedantic)
# ---------------------------------------------------------------------------
# Daemon executable
# ---------------------------------------------------------------------------
add_executable(mixer-daemon src/main.cpp)
target_link_libraries(mixer-daemon
mixer-control
nlohmann_json::nlohmann_json
)
if(JACK_FOUND)
target_link_libraries(mixer-daemon ${JACK_LIBRARIES})
target_include_directories(mixer-daemon PRIVATE ${JACK_INCLUDE_DIRS})
target_compile_options(mixer-daemon PRIVATE ${JACK_CFLAGS_OTHER})
target_compile_definitions(mixer-daemon PRIVATE HAS_JACK=1)
message(STATUS "JACK found: ${JACK_LIBRARIES}")
else()
message(WARNING "JACK not found — building without JACK support. Install libjack-jackd2-dev (Debian) or jack-audio-connection-kit-devel (Fedora).")
endif()
target_compile_options(mixer-daemon PRIVATE -Wall -Wextra -Wpedantic)
# ---------------------------------------------------------------------------
# Tests
# ---------------------------------------------------------------------------
enable_testing()
add_executable(mixer-test
tests/test_main.cpp
${MIXER_SOURCES}
)
target_include_directories(mixer-test PRIVATE include)
target_link_libraries(mixer-test nlohmann_json::nlohmann_json)
target_compile_options(mixer-test PRIVATE -Wall -Wextra -Wpedantic)
add_test(NAME mixer-core-test COMMAND mixer-test)
# ---------------------------------------------------------------------------
# Install
# ---------------------------------------------------------------------------
install(TARGETS mixer-daemon RUNTIME DESTINATION bin)
install(FILES ${MIXER_HEADERS} DESTINATION include/mixer)