rmx-19/CMakeLists.txt

152 lines
5.1 KiB
Text
Raw Normal View History

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:%S")
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)
# RMX-19 has no web UI and does no networking.
# - JUCE_WEB_BROWSER=0: juce_audio_processors depends on juce_gui_extra, whose
# Linux source includes <gtk/gtk.h> and the WebKit headers unless the browser
# component is switched off. This keeps the Linux build free of GTK/WebKit
# (and of native file-chooser dialogs, which this plug-in never uses).
# - JUCE_USE_CURL=0: juce_core otherwise compiles libcurl-backed code, which
# fails to link on Linux (curl_* undefined) unless libcurl is linked in.
# JUCE falls back to its own socket-based implementation.
add_compile_definitions(JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0)
# AU is only buildable on Apple; on Linux (and everywhere else) ship VST3.
if(APPLE)
set(RMX19_FORMATS AU VST3)
else()
set(RMX19_FORMATS VST3)
endif()
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 ${RMX19_FORMATS}
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
2026-09-09 12:53:57 +02:00
b3.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)