cmake_minimum_required(VERSION 3.24 FATAL_ERROR)

project(dmf-studio
    VERSION 0.1.0
    LANGUAGES CXX C
)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

option(DMF_BUILD_TESTS "Build tests" ON)
option(DMF_BUILD_MXL_TOOLS "Build MXL tools (testsrc, sink)" ON)
option(DMF_BUILD_DECKLINK "Build DeckLink I/O nodes" ON)
option(DMF_BUILD_FABRICS "Build Fabrics bridge nodes" OFF)

set(DECKLINK_SDK_DIR "" CACHE PATH "Path to Blackmagic DeckLink SDK root")

if(DMF_BUILD_DECKLINK AND DECKLINK_SDK_DIR)
    add_subdirectory(nodes/decklink-in)
    add_subdirectory(nodes/decklink-out)
endif()

if(DMF_BUILD_FABRICS)
    set(MXL_ENABLE_FABRICS_OFI ON CACHE BOOL "" FORCE)
    add_subdirectory(nodes/fabric-bridge)
endif()

find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(Libwebsockets CONFIG REQUIRED)
find_package(Catch2 CONFIG QUIET)

set(BUILD_TESTS OFF CACHE BOOL "" FORCE)

if(DMF_BUILD_MXL_TOOLS)
    set(BUILD_TOOLS ON CACHE BOOL "" FORCE)
    set(BUILD_UTILS ON CACHE BOOL "" FORCE)
endif()

add_subdirectory(extern/mxl)
add_subdirectory(libs/dmf-node)
add_subdirectory(libs/dmf-engine)
add_subdirectory(nodes/passthrough)
add_subdirectory(engine)

if(DMF_BUILD_TESTS AND Catch2_FOUND)
    add_subdirectory(tests)
endif()
