2026-09-16 17:47:45 +02:00
|
|
|
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)
|
|
|
|
|
|
2026-09-16 18:38:35 +02:00
|
|
|
# Locate JUCE: prefer an explicit TERION_JUCE_DIR, then ~/JUCE,
|
|
|
|
|
# ~/.local/git/juce, ~/.local/git/JUCE, then the vendored copy at
|
|
|
|
|
# third_party/JUCE (populated by `make juce`).
|
2026-09-16 17:47:45 +02:00
|
|
|
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")
|
2026-09-16 18:38:35 +02:00
|
|
|
elseif(EXISTS "$ENV{HOME}/.local/git/juce/CMakeLists.txt")
|
|
|
|
|
set(JUCE_DIR_SELECTED "$ENV{HOME}/.local/git/juce")
|
|
|
|
|
elseif(EXISTS "$ENV{HOME}/.local/git/JUCE/CMakeLists.txt")
|
|
|
|
|
set(JUCE_DIR_SELECTED "$ENV{HOME}/.local/git/JUCE")
|
2026-09-16 17:47:45 +02:00
|
|
|
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})
|