ambivalence/CMakeLists.txt

174 lines
6.5 KiB
Text
Raw Normal View History

2026-08-15 15:36:28 +02:00
cmake_minimum_required(VERSION 3.22)
project(Ambivalence VERSION 1.1.0 LANGUAGES C CXX)
# ============================================================================
# C++20
# ============================================================================
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# ============================================================================
# JUCE
# Pass the path to your JUCE checkout with -DJUCE_PATH=/path/to/JUCE,
# or install JUCE in one of the standard locations below.
# ============================================================================
if(NOT DEFINED JUCE_PATH OR JUCE_PATH STREQUAL "")
foreach(_juce_candidate
${CMAKE_CURRENT_SOURCE_DIR}/JUCE
${CMAKE_BINARY_DIR}/JUCE
${CMAKE_HOME_DIRECTORY}/../JUCE
$ENV{HOME}/JUCE
/opt/JUCE
/usr/local/JUCE
/Applications/JUCE)
if(EXISTS "${_juce_candidate}/modules/juce_core")
set(JUCE_PATH "${_juce_candidate}")
break()
endif()
endforeach()
endif()
if(NOT JUCE_PATH)
message(FATAL_ERROR
"JUCE not found. Set -DJUCE_PATH=/path/to/JUCE or install JUCE in a standard location.")
endif()
set(JUCE_PATH "${JUCE_PATH}" CACHE PATH "Path to the JUCE repository" FORCE)
set(_juce_binary_dir "${CMAKE_BINARY_DIR}/JUCE")
if(_juce_binary_dir STREQUAL "${JUCE_PATH}")
set(_juce_binary_dir "${CMAKE_BINARY_DIR}/JUCE-build")
endif()
add_subdirectory(${JUCE_PATH} ${_juce_binary_dir})
# ============================================================================
# plugin definition
# ============================================================================
juce_add_plugin(Ambivalence
COMPANY_NAME "OTODESK"
PLUGIN_MANUFACTURER_CODE "Otdk"
PLUGIN_CODE "Ambi"
FORMATS VST3 Standalone
PRODUCT_NAME "Ambivalence1.1"
PLUGIN_DESCRIPTION "16-channel FDN Algorithmic Reverb"
IS_SYNTH FALSE
NEEDS_MIDI_INPUT FALSE
NEEDS_MIDI_OUTPUT FALSE
IS_MIDI_EFFECT FALSE
EDITOR_WANTS_KEYBOARD_FOCUS FALSE
VST3_AUTO_MANIFEST FALSE
COPY_PLUGIN_AFTER_BUILD FALSE
VERSION "1.1.0"
)
# ============================================================================
# build info (Git branch, commit, dirty state)
# ============================================================================
execute_process(COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE AMBIVALENCE_GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(NOT AMBIVALENCE_GIT_BRANCH)
set(AMBIVALENCE_GIT_BRANCH "unknown")
endif()
execute_process(COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE AMBIVALENCE_GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(NOT AMBIVALENCE_GIT_COMMIT)
set(AMBIVALENCE_GIT_COMMIT "unknown")
endif()
execute_process(COMMAND git status --porcelain
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE AMBIVALENCE_GIT_STATUS
ERROR_QUIET)
if(AMBIVALENCE_GIT_STATUS)
set(AMBIVALENCE_GIT_DIRTY 1)
else()
set(AMBIVALENCE_GIT_DIRTY 0)
endif()
configure_file(Source/BuildInfo.h.in ${CMAKE_CURRENT_BINARY_DIR}/BuildInfo.h @ONLY)
# ============================================================================
# sources (only existing files)
# ============================================================================
target_sources(Ambivalence PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/BuildInfo.h
Source/BuildInfo.h.in
Source/PluginProcessor.h
Source/PluginProcessor.cpp
Source/PluginEditor.h
Source/PluginEditor.cpp
Source/PluginParameters.h
Source/PluginParameters.cpp
Source/PresetManager.h
Source/PresetManager.cpp
Source/GUI/AmbivalenceUI.h
Source/GUI/AmbivalenceUI.cpp
Source/AlgorithmPresets.h
Source/DSP/DSPConstants.h
Source/DSP/DelayMemory.h
Source/DSP/BiquadFilters.h
Source/DSP/BiquadFilters.cpp
Source/DSP/MagnitudeResponseFitter.h
Source/DSP/MagnitudeResponseFitter.cpp
Source/DSP/UniversalEngine.h
Source/DSP/UniversalEngine.cpp
Source/DSP/AcousticMetrics.h
Source/DSP/AcousticMetrics.cpp
Source/GUI/DecayCurveViz.h
Source/GUI/DecayCurveViz.cpp
Source/DSP/Saturator.h
Source/DSP/OutputLimiter.h
Source/DSP/OutputEQ.h
)# ============================================================================
# include paths
# ============================================================================
target_include_directories(Ambivalence PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/Source
${CMAKE_CURRENT_SOURCE_DIR}/Source/DSP
${CMAKE_CURRENT_SOURCE_DIR}/Source/GUI
${CMAKE_CURRENT_BINARY_DIR}
)
# ============================================================================
# JUCE
# ============================================================================
target_link_libraries(Ambivalence
PRIVATE
juce::juce_audio_basics
juce::juce_audio_devices
juce::juce_audio_formats
juce::juce_audio_plugin_client
juce::juce_audio_processors
juce::juce_audio_utils
juce::juce_core
juce::juce_data_structures
juce::juce_dsp
juce::juce_events
juce::juce_graphics
juce::juce_gui_basics
juce::juce_gui_extra
PUBLIC
juce::juce_recommended_config_flags
juce::juce_recommended_lto_flags
juce::juce_recommended_warning_flags
)
# ============================================================================
# compile definitions
# ============================================================================
target_compile_definitions(Ambivalence PRIVATE
JUCE_WEB_BROWSER=0
JUCE_USE_CURL=0
JUCE_VST3_CAN_REPLACE_VST2=0
JUCE_DISPLAY_SPLASH_SCREEN=0
AMBIVALENCE_VERSION="1.1.0"
)
# ============================================================================
# JUCE header generation
# ============================================================================
juce_generate_juce_header(Ambivalence)
# ============================================================================
# build message
# ============================================================================
message(STATUS "===========================================")
message(STATUS "Ambivalence VST3 - CMake Configuration")
message(STATUS "JUCE: ${JUCE_PATH}")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
message(STATUS "===========================================")