rmx-19/CMakeLists.txt

135 lines
No EOL
4.4 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:%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)
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
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)