cmake_minimum_required(VERSION 3.16)
project(decklink-bridge CXX C)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD   11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -O2")

# Path to DeckLink SDK headers (services/capture/sdk/)
set(DECKLINK_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../sdk"
    CACHE PATH "Path to Blackmagic DeckLink SDK headers")

# Path to Deltacast bridge (for fc_writer.h/c — shared writer module)
set(DELTACAST_BRIDGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../deltacast-bridge"
    CACHE PATH "Path to deltacast-bridge (contains fc_writer.h/c)")

# Legacy FIFO fallback option (mirrors deltacast-bridge option)
option(LEGACY_FIFO "Use named FIFOs instead of framecache shm" OFF)

# ── decklink-bridge executable ────────────────────────────────────────
add_executable(decklink-bridge
    main.cpp
    ${DELTACAST_BRIDGE_DIR}/fc_writer.c   # shared framecache writer
)

if(LEGACY_FIFO)
    target_compile_definitions(decklink-bridge PRIVATE LEGACY_FIFO=1)
    message(STATUS "decklink-bridge: LEGACY_FIFO mode enabled")
else()
    message(STATUS "decklink-bridge: framecache shm mode enabled")
endif()

target_include_directories(decklink-bridge PRIVATE
    ${DECKLINK_SDK_DIR}
    ${DELTACAST_BRIDGE_DIR}   # fc_writer.h
)

target_link_libraries(decklink-bridge PRIVATE
    pthread
    rt      # shm_open, sem_open
    dl      # dlopen (used by DeckLinkAPIDispatch.cpp on Linux)
)

# DeckLink driver is linked at runtime via dlopen (no link-time .so needed).
# The SDK's DeckLinkAPIDispatch.cpp handles the dynamic loading.

set_target_properties(decklink-bridge PROPERTIES
    INSTALL_RPATH "/usr/local/lib"
    BUILD_WITH_INSTALL_RPATH TRUE
)

install(TARGETS decklink-bridge DESTINATION bin)
