feedBack-desktop/CMakeLists.txt
2026-06-16 18:48:12 +02:00

65 lines
2.4 KiB
CMake

cmake_minimum_required(VERSION 3.22)
project(slopsmith_audio VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# cmake-js integration
if(DEFINED CMAKE_JS_INC)
message(STATUS "Building as Node.js native addon (cmake-js)")
else()
message(WARNING "CMAKE_JS_INC not defined — building standalone (for testing only)")
endif()
# JUCE — add as subdirectory (submodule)
if(EXISTS "${CMAKE_SOURCE_DIR}/JUCE/CMakeLists.txt")
add_subdirectory(JUCE)
else()
message(FATAL_ERROR "JUCE submodule not found. Run: git submodule update --init --recursive")
endif()
# NAM Core (Neural Amp Modeler)
set(NAM_DIR "${CMAKE_SOURCE_DIR}/src/audio/third_party/NAM")
if(EXISTS "${NAM_DIR}/CMakeLists.txt")
set(NAM_AVAILABLE ON)
# NAM uses its own build system — we'll include its source directly
message(STATUS "NeuralAmpModelerCore found")
else()
set(NAM_AVAILABLE OFF)
message(STATUS "NeuralAmpModelerCore not found — NAM support disabled")
endif()
# RTNeural
set(RTNEURAL_DIR "${CMAKE_SOURCE_DIR}/src/audio/third_party/RTNeural")
if(EXISTS "${RTNEURAL_DIR}/CMakeLists.txt")
set(RTNEURAL_AVAILABLE ON)
set(RTNEURAL_XSIMD ON CACHE BOOL "Use XSIMD backend for RTNeural")
add_subdirectory("${RTNEURAL_DIR}" rtneural_build EXCLUDE_FROM_ALL)
message(STATUS "RTNeural found")
else()
set(RTNEURAL_AVAILABLE OFF)
message(STATUS "RTNeural not found")
endif()
# ONNX Runtime — for the Basic Pitch ML note detector (MlNoteDetector).
# Sets ONNXRUNTIME_AVAILABLE; build still succeeds (YIN fallback) if it can't
# be obtained. See cmake/onnxruntime.cmake.
include("${CMAKE_SOURCE_DIR}/cmake/onnxruntime.cmake")
add_subdirectory(src/audio)
# Out-of-process VST helpers (slopsmith-vst-host on all platforms now that the
# POSIX sandbox runtime exists; macOS also builds the slopsmith-vst-scan probe).
add_subdirectory(src/vst-host)
# Tests (cross-platform; gated on SLOPSMITH_BUILD_TESTS, default ON). The
# audio-ring loopback runs everywhere; the control-channel + posix_spawn smoke
# tests are POSIX-only (see tests/sandbox/CMakeLists.txt). enable_testing() must
# be at the top level so `ctest` from the root build directory discovers tests
# registered via add_test() in subdirectories.
if(EXISTS "${CMAKE_SOURCE_DIR}/tests/CMakeLists.txt")
enable_testing()
add_subdirectory(tests)
endif()