cmake_minimum_required(VERSION 3.22)

project(BitDOS VERSION 1.2.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}
	PRODUCT_NAME "BitDOS"
	VERSION "${PROJECT_VERSION}"
	COMPANY_NAME "_astriid_"
	FORMATS ${JUCE_FORMATS}
	VST3_CATEGORIES "Distortion"
	COPY_PLUGIN_AFTER_BUILD FALSE
	LV2URI "https://github.com/astriiddev/BitDOS-VST"
)

if(BUILD_CLAP)
    add_subdirectory(clap-juce-extensions EXCLUDE_FROM_ALL)
    clap_juce_extensions_plugin(TARGET ${PROJECT_NAME}
        CLAP_ID "com.github.astriiddev.bitdos-vst"
        CLAP_FEATURES distortion fx
    )
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/bitdos_badge.png
        res/bitdos_gui.png
        res/bitdos_on.png
        res/floppy_btn.png
        res/seg_7.otf
)

target_sources(${PROJECT_NAME}
    PRIVATE
        Source/Background.cpp
        Source/Background.h
        Source/NumberScreen.cpp
        Source/NumberScreen.h
        Source/PluginEditor.cpp
        Source/PluginEditor.h
        Source/PluginProcessor.cpp
        Source/PluginProcessor.h
)

target_link_libraries(${PROJECT_NAME}
    PRIVATE
        ${PROJECT_NAME}_Data
        juce::juce_audio_basics
        juce::juce_audio_devices
        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})
