cmake_minimum_required(VERSION 3.22) project(Terion VERSION 1.0.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Locate JUCE: prefer an explicit TERION_JUCE_DIR, then ~/JUCE, then the # vendored copy at third_party/JUCE (populated by `make juce`). if(TERION_JUCE_DIR) set(JUCE_DIR_SELECTED "${TERION_JUCE_DIR}") elseif(EXISTS "$ENV{HOME}/JUCE/CMakeLists.txt") set(JUCE_DIR_SELECTED "$ENV{HOME}/JUCE") elseif(EXISTS "${CMAKE_SOURCE_DIR}/third_party/JUCE/CMakeLists.txt") set(JUCE_DIR_SELECTED "${CMAKE_SOURCE_DIR}/third_party/JUCE") else() message(FATAL_ERROR "JUCE not found. Run 'make juce' to clone it into third_party/JUCE, " "or pass -DTERION_JUCE_DIR=/path/to/JUCE.") endif() message(STATUS "Using JUCE at: ${JUCE_DIR_SELECTED}") # Git version info execute_process( COMMAND git log -1 --format=%h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) if(NOT GIT_HASH) set(GIT_HASH "unknown") endif() execute_process( COMMAND git rev-list --count HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_LOCAL_COMMITS OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) if(NOT GIT_LOCAL_COMMITS) set(GIT_LOCAL_COMMITS "0") endif() string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S") configure_file( ${CMAKE_SOURCE_DIR}/Source/Version.h.in ${CMAKE_BINARY_DIR}/Version.h @ONLY ) add_subdirectory("${JUCE_DIR_SELECTED}" "${CMAKE_BINARY_DIR}/JUCE") juce_add_plugin(Terion PRODUCT_NAME "Terion" COMPANY_NAME "Terion" BUNDLE_ID "com.terion.stereo-analyzer" PLUGIN_MANUFACTURER_CODE Teri PLUGIN_CODE TeAn FORMATS VST3 AU IS_SYNTH FALSE NEEDS_MIDI_INPUT FALSE NEEDS_MIDI_OUTPUT FALSE IS_MIDI_EFFECT FALSE EDITOR_WANTS_KEYBOARD_FOCUS FALSE COPY_PLUGIN_AFTER_BUILD TRUE VST3_CATEGORIES Analyzer ) target_sources(Terion PRIVATE Source/PluginProcessor.cpp Source/PluginEditor.cpp Source/VectorScope.cpp Source/ArcKnob.cpp ) target_compile_definitions(Terion PUBLIC JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0 JUCE_VST3_CAN_REPLACE_VST2=0 ) target_link_libraries(Terion PRIVATE juce::juce_audio_utils juce::juce_dsp juce::juce_opengl juce::juce_graphics juce::juce_gui_basics juce::juce_gui_extra ) target_include_directories(Terion PRIVATE ${CMAKE_BINARY_DIR})