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.
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user