cmake_minimum_required(VERSION 3.22)

project(AmiSampler VERSION 0.7.2 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}
	PRODUCT_NAME "Ami Sampler"
	VERSION "${PROJECT_VERSION}"
	COMPANY_NAME "_astriid_"
	FORMATS ${JUCE_FORMATS}
	VST3_CATEGORIES "Sampler"
	IS_SYNTH TRUE
	NEEDS_MIDI_INPUT TRUE
	NEEDS_MIDI_OUTPUT TRUE
	COPY_PLUGIN_AFTER_BUILD FALSE
	LV2URI "https://github.com/astriiddev/Ami-Sampler-VST"
)

if(BUILD_CLAP)
    add_subdirectory(clap-juce-extensions EXCLUDE_FROM_ALL)
    clap_juce_extensions_plugin(TARGET ${PROJECT_NAME}
        CLAP_ID "com.github.astriiddev.ami-sampler-vst"
        CLAP_FEATURES instrument sampler
    )
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
        Res/AmiLogo.png
        Res/amiMouseCursor.png
        Res/amiTrashOff.png
        Res/amiTrashOn.png
        Res/amidos.ttf
        Res/amiwin1_1.png
        Res/amiwin1_2.png
        Res/amiwin2_1.png
        Res/amiwin2_2.png
        Res/amiwin3_1.png
        Res/amiwin3_2.png
        Res/astriid_amiga.png
        Res/pixelkey_black.png
)

target_sources(${PROJECT_NAME}
    PRIVATE
        Source/AmiAlertWindow.cpp
        Source/AmiAlertWindow.h
        Source/AmiLookAndFeel.cpp
        Source/AmiLookAndFeel.h
        Source/AmiSamplerSound.cpp
        Source/AmiSamplerSound.h
        Source/AmiWindowEditor.cpp
        Source/AmiWindowEditor.h
        Source/GuiComponent.cpp
        Source/GuiComponent.h
        Source/PixelBuffer.cpp
        Source/PixelBuffer.h
        Source/PluginEditor.cpp
        Source/PluginEditor.h
        Source/PluginProcessor.cpp
        Source/PluginProcessor.h
        Source/RCFilters.cpp
        Source/RCFilters.h
        Source/SliderComponent.cpp
        Source/SliderComponent.h
        Source/TrackerKeyboardComponent.h
        Source/ami_font.cpp
        Source/ami_font.h
        Source/ami_palette.h
        Source/astro_formats/astro_BrrAudioFormat.cpp
        Source/astro_formats/astro_BrrAudioFormat.h
        Source/astro_formats/astro_IffAudioFormat.cpp
        Source/astro_formats/astro_IffAudioFormat.h
        Source/astro_formats/astro_MuLawFormat.cpp
        Source/astro_formats/astro_MuLawFormat.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_events
        juce::juce_graphics
        juce::juce_gui_basics
        juce::juce_gui_extra
    PUBLIC
        juce::juce_recommended_config_flags
        juce::juce_recommended_lto_flags
        juce::juce_recommended_warning_flags
)

juce_generate_juce_header(${PROJECT_NAME})
