cmake_minimum_required(VERSION 3.22)
project(BEAMGRID VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
    juce
    GIT_REPOSITORY https://github.com/juce-framework/JUCE.git
    GIT_TAG 8.0.6
)
FetchContent_MakeAvailable(juce)

juce_add_plugin(BEAMGRID
    NAME "BEAMGRID"
    COMPANY_NAME "Beamgrid"
    PLUGIN_MANUFACTURER_CODE Bmgr
    PLUGIN_CODE Bmgr
    FORMATS VST3 AU
    PRODUCT_NAME "BEAMGRID"
    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
)

target_sources(BEAMGRID PRIVATE
    Source/JuceHeader.h
    Source/Analyser.h
    Source/Analyser.cpp
    Source/BeamgridLookAndFeel.h
    Source/BeamgridLookAndFeel.cpp
    Source/AnalyserComponent.h
    Source/AnalyserComponent.cpp
    Source/PluginProcessor.h
    Source/PluginProcessor.cpp
    Source/PluginEditor.h
    Source/PluginEditor.cpp
)

target_compile_definitions(BEAMGRID PUBLIC
    JUCE_VST3_CAN_REPLACE_VST2=0
    JUCE_USE_CAMERA_PERMISSIONS=0
)

target_link_libraries(BEAMGRID PRIVATE
    juce::juce_audio_basics
    juce::juce_audio_devices
    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
)

if(APPLE)
    set_target_properties(BEAMGRID PROPERTIES
        CMAKE_OSX_DEPLOYMENT_TARGET "10.15"
    )
endif()

# Generate a version header with the current Git commit, dirty state and a
# fresh build timestamp. Runs on every build via a custom target.
set(GENERATED_DIR ${CMAKE_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${GENERATED_DIR})
set(GIT_VERSION_HEADER ${GENERATED_DIR}/GitVersion.h)

add_custom_target(generate_version ALL
    COMMAND ${CMAKE_COMMAND}
        -D SRC_DIR=${CMAKE_SOURCE_DIR}
        -D TEMPLATE=${CMAKE_SOURCE_DIR}/Source/GitVersion.h.in
        -D OUTPUT=${GIT_VERSION_HEADER}
        -P ${CMAKE_SOURCE_DIR}/cmake/generate_version.cmake
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    COMMENT "Generating BEAMGRID version header"
)

target_include_directories(BEAMGRID PRIVATE ${GENERATED_DIR})
add_dependencies(BEAMGRID generate_version)
