a5423b7f55
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.
101 lines
3.5 KiB
CMake
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)
|