cmake_minimum_required(VERSION 3.22)

project(Horizont
    VERSION 1.0.0
    LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

if(DEFINED JUCE_ROOT AND EXISTS "${JUCE_ROOT}/CMakeLists.txt")
    message(STATUS "Using JUCE from ${JUCE_ROOT}")
    add_subdirectory("${JUCE_ROOT}" "${CMAKE_BINARY_DIR}/JUCE")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/JUCE/CMakeLists.txt")
    message(STATUS "Using JUCE from ${CMAKE_CURRENT_SOURCE_DIR}/JUCE")
    add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/JUCE")
else()
    list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/JUCE")
    find_package(JUCE CONFIG REQUIRED)
endif()

juce_add_plugin(Horizont
    VERSION "1.0.0"
    PRODUCT_NAME "Horizont"
    COMPANY_NAME "Horizont"
    BUNDLE_ID "com.horizont.Horizont"
    PLUGIN_MANUFACTURER_CODE "ARMN"
    PLUGIN_CODE "RVRB"
    DESCRIPTION "Algorithmic stereo reverb with feedback pitch shifting"
    IS_SYNTH FALSE
    IS_MIDI_EFFECT FALSE
    NEEDS_MIDI_INPUT FALSE
    NEEDS_MIDI_OUTPUT FALSE
    FORMATS "VST3" "AU"
    COPY_PLUGIN_AFTER_BUILD FALSE
)

juce_generate_juce_header(Horizont)

# We only ship a VST3 (never released a VST2), so tell JUCE it doesn't need to
# keep parameter IDs compatible with a VST2 version of this plugin.
target_compile_definitions(Horizont PUBLIC JUCE_VST3_CAN_REPLACE_VST2=0)

string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%d__%H-%M-%S")

set(HORIZONT_GIT_REVISION "unknown")
find_package(Git QUIET)
if(Git_FOUND)
    execute_process(
        COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        OUTPUT_VARIABLE HORIZONT_GIT_REVISION
        OUTPUT_STRIP_TRAILING_WHITESPACE
        ERROR_QUIET)
endif()

target_compile_definitions(Horizont PRIVATE
    HORIZONT_VERSION="${PROJECT_VERSION}"
    HORIZONT_GIT_REVISION="${HORIZONT_GIT_REVISION}"
    HORIZONT_BUILD_TIMESTAMP="${BUILD_TIMESTAMP}")

target_sources(Horizont PRIVATE
    Source/PluginProcessor.cpp
    Source/PluginEditor.cpp
    Source/HorizontEngine.cpp
    Source/PitchShifter.cpp
    Source/HorizontLookAndFeel.cpp
    Source/Knob.cpp
    Source/SpectrumDisplay.cpp
    Source/Presets.h
)

target_link_libraries(Horizont PRIVATE juce::juce_dsp)
