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 "===========================================")