cmake_minimum_required(VERSION 3.22)

project(Plasma VERSION 1.3.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

option(BUILD_STANDALONE "Build Standalone plugin" TRUE)
option(BUILD_CLAP "Build CLAP plugin" TRUE)
option(BUILD_LV2 "Build LV2 plugin" TRUE)
option(BUILD_VST2 "Build VST2 plugin" FALSE)

set(JUCE_FORMATS VST3)

if(BUILD_STANDALONE)
    list(APPEND JUCE_FORMATS Standalone)
endif()

if(BUILD_VST2)
    list(APPEND JUCE_FORMATS VST)
endif()

if (BUILD_LV2 AND UNIX AND NOT APPLE)
    list(APPEND JUCE_FORMATS LV2)
endif()

find_package(JUCE REQUIRED)

juce_add_plugin(${PROJECT_NAME}
	PLUGIN_MANUFACTURER_CODE DMTX
	PRODUCT_NAME "Plasma"
	FORMATS ${JUCE_FORMATS}
	COMPANY_NAME "Dimethoxy"
	LV2URI "https://dimethoxy.com/plasma"
	VERSION "${PROJECT_VERSION}"
	VST3_CATEGORIES "Distortion"
	COPY_PLUGIN_AFTER_BUILD FALSE
)

if(BUILD_CLAP)
    add_subdirectory(clap-juce-extensions EXCLUDE_FROM_ALL)
    clap_juce_extensions_plugin(TARGET ${PROJECT_NAME}
        CLAP_ID "com.dimethoxy.plasma"
        CLAP_FEATURES audio-effect distortion
    )
endif()

target_compile_definitions(${PROJECT_NAME} PRIVATE
    JUCE_DISPLAY_SPLASH_SCREEN=0
    JUCE_VST3_CAN_REPLACE_VST2=0
    JUCE_WEB_BROWSER=0
    JUCE_USE_CURL=0
    JUCE_JACK=1
)

juce_add_binary_data(${PROJECT_NAME}_Data
    SOURCES
        Resources/Poppins/Poppins-Medium.ttf
        Resources/Poppins/Poppins-Regular.ttf
        Resources/Sedgwick_Ave_Display/SedgwickAveDisplay-Regular.ttf
)

target_sources(${PROJECT_NAME}
    PRIVATE
        Source/BaseVisualiser.cpp
        Source/BaseVisualiser.h
        Source/CustomLabel.cpp
        Source/CustomLabel.h
        Source/CustomLookAndFeel.cpp
        Source/CustomLookAndFeel.h
        Source/CustomRotarySlider.cpp
        Source/CustomRotarySlider.h
        Source/CustomTextButton.cpp
        Source/CustomTextButton.h
        Source/LUFSMeter/Ebu128LoudnessMeter.cpp
        Source/LUFSMeter/Ebu128LoudnessMeter.h
        Source/LUFSMeter/MacrosAndJuceHeaders.h
        Source/LUFSMeter/filters/SecondOrderIIRFilter.cpp
        Source/LUFSMeter/filters/SecondOrderIIRFilter.h
        Source/LoudnessMeterComponent.cpp
        Source/LoudnessMeterComponent.h
        Source/PlasmaDistortionProcessor.h
        Source/PlasmaLabel.cpp
        Source/PlasmaLabel.h
        Source/PluginEditor.cpp
        Source/PluginEditor.h
        Source/PluginProcessor.cpp
        Source/PluginProcessor.h
        Source/ResponseCurveComponent.cpp
        Source/ResponseCurveComponent.h
        Source/ShapercurveComponent.cpp
        Source/ShapercurveComponent.h
        Source/Version.h
        Source/WaveformComponent.cpp
        Source/WaveformComponent.h
)

target_link_libraries(${PROJECT_NAME}
    PRIVATE
        ${PROJECT_NAME}_Data
        juce::juce_audio_basics
        juce::juce_audio_devices
        juce::juce_audio_formats
        juce::juce_audio_plugin_client
        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
        juce::juce_opengl
    PUBLIC
        juce::juce_recommended_config_flags
        juce::juce_recommended_lto_flags
        juce::juce_recommended_warning_flags
)

juce_generate_juce_header(${PROJECT_NAME})
