mirror of
https://codeberg.org/armin/rmx-19.git
synced 2026-10-11 16:51:55 +02:00
- Add host-tempo-synced delay: FX screen gains a 4th SYNC row for rhythmic divisions (1/16 .. 1/1) that lock delay time to DAW tempo - Embed rack faceplate background (b2.png) via juce binary data - Add offline dev probe (rmx_probe) for GUI-less MIDI testing - Allow overriding JUCE_ROOT when configuring the build - Write comprehensive README describing the instrument, UI, MIDI, DSP, and build/install steps
135 lines
No EOL
4.3 KiB
CMake
135 lines
No EOL
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
|
|
project(RMX19 VERSION 1.0.0 LANGUAGES C CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "arch")
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "deployment target")
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Git + compile-time build info (shown in the LCD status footer)
|
|
# ---------------------------------------------------------------------------
|
|
if(NOT DEFINED BUILD_GIT_BRANCH)
|
|
execute_process(COMMAND git -C "${CMAKE_CURRENT_SOURCE_DIR}" rev-parse --abbrev-ref HEAD
|
|
OUTPUT_VARIABLE _GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _OK)
|
|
if(NOT _OK EQUAL 0)
|
|
set(BUILD_GIT_BRANCH "no-vcs")
|
|
else()
|
|
set(BUILD_GIT_BRANCH "${_GIT_BRANCH}")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT DEFINED BUILD_GIT_COMMIT)
|
|
execute_process(COMMAND git -C "${CMAKE_CURRENT_SOURCE_DIR}" rev-parse --short HEAD
|
|
OUTPUT_VARIABLE _GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _OK)
|
|
if(NOT _OK EQUAL 0)
|
|
set(BUILD_GIT_COMMIT "0000000")
|
|
else()
|
|
set(BUILD_GIT_COMMIT "${_GIT_COMMIT}")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT DEFINED BUILD_GIT_DIRTY)
|
|
execute_process(COMMAND git -C "${CMAKE_CURRENT_SOURCE_DIR}" status --porcelain
|
|
OUTPUT_VARIABLE _GIT_DIRTY OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _OK)
|
|
if(NOT _OK EQUAL 0)
|
|
set(BUILD_GIT_DIRTY "?")
|
|
elseif(NOT "${_GIT_DIRTY}" STREQUAL "")
|
|
set(BUILD_GIT_DIRTY "*")
|
|
else()
|
|
set(BUILD_GIT_DIRTY "")
|
|
endif()
|
|
endif()
|
|
|
|
string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
|
|
string(TIMESTAMP BUILD_TIME "%H:%M")
|
|
|
|
configure_file(Source/BuildInfo.h.in ${CMAKE_CURRENT_BINARY_DIR}/Source/BuildInfo.h @ONLY)
|
|
message(STATUS "RMX-19 build: ${BUILD_GIT_BRANCH} ${BUILD_GIT_COMMIT}${BUILD_GIT_DIRTY} @ ${BUILD_DATE} ${BUILD_TIME}")
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# JUCE
|
|
# ---------------------------------------------------------------------------
|
|
if(NOT DEFINED JUCE_ROOT)
|
|
if(EXISTS "$ENV{HOME}/JUCE/CMakeLists.txt")
|
|
set(JUCE_ROOT "$ENV{HOME}/JUCE")
|
|
elseif(EXISTS "/opt/JUCE/CMakeLists.txt")
|
|
set(JUCE_ROOT "/opt/JUCE")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT DEFINED JUCE_ROOT OR NOT EXISTS "${JUCE_ROOT}/CMakeLists.txt")
|
|
message(FATAL_ERROR "JUCE not found. Set -DJUCE_ROOT=<path to JUCE source>")
|
|
endif()
|
|
|
|
add_subdirectory(${JUCE_ROOT} juce)
|
|
|
|
juce_add_plugin(RMX19
|
|
PRODUCT_NAME "RMX-19"
|
|
PLUGIN_NAME "RMX-19"
|
|
BUNDLE_ID "com.rackmodule.rmx19"
|
|
COMPANY_NAME "Rack Module Labs"
|
|
COMPANY_WEBSITE "https://localhost/rmx19"
|
|
COMPANY_EMAIL "dev@null.local"
|
|
VERSION "1.0.0"
|
|
DESCRIPTION "19 inch rack digital sound module"
|
|
PLUGIN_MANUFACTURER_CODE "Rmlb"
|
|
PLUGIN_CODE "Rmx1"
|
|
FORMATS AU VST3
|
|
IS_SYNTH TRUE
|
|
NEEDS_MIDI_INPUT TRUE
|
|
EDITOR_WANTS_KEYBOARD_FOCUS TRUE
|
|
)
|
|
|
|
set(RMX19_SOURCES
|
|
Source/PluginProcessor.cpp
|
|
Source/PluginEditor.cpp
|
|
Source/LcdPanel.cpp
|
|
Source/PresetBank.cpp
|
|
Source/SynthEngine.cpp
|
|
Source/Params.cpp
|
|
)
|
|
|
|
juce_add_binary_data(RMX19_Assets
|
|
NAMESPACE BinaryData
|
|
SOURCES
|
|
b2.png
|
|
)
|
|
|
|
target_sources(RMX19 PRIVATE ${RMX19_SOURCES})
|
|
target_include_directories(RMX19 PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Source"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/Source")
|
|
|
|
target_link_libraries(RMX19 PRIVATE
|
|
RMX19_Assets
|
|
juce::juce_audio_utils
|
|
juce::juce_gui_basics
|
|
juce::juce_dsp)
|
|
|
|
target_compile_definitions(RMX19 PRIVATE JUCE_MODAL_LOOPS_PERMITTED=1
|
|
JUCE_VST3_CAN_REPLACE_VST2=0)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Offline probe (dev only): runs the processor with scripted MIDI, no GUI.
|
|
# ---------------------------------------------------------------------------
|
|
add_executable(rmx_probe Source/Probe.cpp
|
|
Source/PluginProcessor.cpp
|
|
Source/PluginEditor.cpp
|
|
Source/LcdPanel.cpp
|
|
Source/PresetBank.cpp
|
|
Source/SynthEngine.cpp
|
|
Source/Params.cpp)
|
|
target_include_directories(rmx_probe PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Source"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/Source"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/juce_binarydata_RMX19_Assets/JuceLibraryCode")
|
|
target_link_libraries(rmx_probe PRIVATE
|
|
RMX19_Assets
|
|
juce::juce_audio_utils
|
|
juce::juce_gui_basics
|
|
juce::juce_dsp) |