cmake_minimum_required(VERSION 3.22)

project(Gala VERSION 1.1.0)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(JUCE)

# GUI fonts, embedded into the binary. Both are licensed under the SIL OFL
# (see assets/fonts/OFL-*.txt, which must ship alongside any distribution).
juce_add_binary_data(GalaAssets
    SOURCES
        assets/fonts/UnifrakturMaguntia.ttf
        assets/fonts/IMFellEnglish.ttf)

# PLUGIN_MANUFACTURER_CODE and PLUGIN_CODE must never change after the first
# public release, or saved DAW sessions will lose the plugin.
juce_add_plugin(Gala
    COMPANY_NAME "Sognevo"
    BUNDLE_ID com.sognevo.gala
    IS_SYNTH FALSE
    NEEDS_MIDI_INPUT FALSE
    NEEDS_MIDI_OUTPUT FALSE
    IS_MIDI_EFFECT FALSE
    COPY_PLUGIN_AFTER_BUILD FALSE
    PLUGIN_MANUFACTURER_CODE Sgnv
    PLUGIN_CODE Gala
    VST3_CATEGORIES Fx Vocals
    # The standalone build records from the audio input.
    MICROPHONE_PERMISSION_ENABLED TRUE
    MICROPHONE_PERMISSION_TEXT "Gala processes the microphone or line input."
    FORMATS VST3 AU Standalone
    PRODUCT_NAME "Gala")

target_sources(Gala PRIVATE
    src/PluginProcessor.cpp
    src/PluginEditor.cpp)

target_compile_definitions(Gala PUBLIC
    JUCE_WEB_BROWSER=0
    JUCE_USE_CURL=0
    JUCE_VST3_CAN_REPLACE_VST2=0
    # Disabling the splash screen is permitted when JUCE is used under the (A)GPL.
    JUCE_DISPLAY_SPLASH_SCREEN=0)

target_link_libraries(Gala
    PRIVATE
        GalaAssets
        juce::juce_audio_utils
        juce::juce_dsp
    PUBLIC
        juce::juce_recommended_config_flags
        juce::juce_recommended_lto_flags
        juce::juce_recommended_warning_flags)

# Headless DSP tests, run by CI on every platform.
juce_add_console_app(GalaTests PRODUCT_NAME "GalaTests")
target_sources(GalaTests PRIVATE
    tests/Tests.cpp
    src/PluginProcessor.cpp
    src/PluginEditor.cpp)
target_compile_definitions(GalaTests PRIVATE
    JUCE_WEB_BROWSER=0
    JUCE_USE_CURL=0
    JUCE_DISPLAY_SPLASH_SCREEN=0
    JucePlugin_Name="Gala")
target_link_libraries(GalaTests PRIVATE
    GalaAssets
    juce::juce_audio_utils
    juce::juce_dsp
    juce::juce_recommended_config_flags)

# CLAP export (MIT-licensed wrapper around the JUCE plugin target)
add_subdirectory(modules/clap-juce-extensions EXCLUDE_FROM_ALL)
clap_juce_extensions_plugin(TARGET Gala
    CLAP_ID "com.sognevo.gala"
    CLAP_FEATURES audio-effect multi-effects distortion)
