# Основная библиотека композитора — `libcuframes_composer.so`. Содержит:
#   - source.c       подписка к cuframes публишеру + state machine
#   - nvenc_loader.c dlopen libnvidia-encode.so + загрузка API таблицы
#   - nvenc.c        обвязка вокруг NVENC SDK (init/encode/teardown)
#
# Дальше по фазам:
#   Phase 2: compose.c (CUDA composition), ringbuf.c (SPSC swap)
#   Phase 3: rtsp_publisher.c, rtp_h264.c, overlay.c, png_decode.c, text_render.c
#   Phase 4: control_zmq.c
#   Phase 5: health_mqtt.c

set(COMPOSER_SOURCES
    source.c
    nvenc_loader.c
    nvenc.c
)

add_library(cuframes_composer SHARED ${COMPOSER_SOURCES})
add_library(cuframes_composer_static STATIC ${COMPOSER_SOURCES})

foreach(target cuframes_composer cuframes_composer_static)
    target_include_directories(${target}
        PUBLIC
            $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
            $<INSTALL_INTERFACE:include>
        PRIVATE
            ${CMAKE_CURRENT_SOURCE_DIR}
            ${NVCODEC_HEADERS_DIR}
    )
    target_compile_features(${target} PRIVATE c_std_11)
    target_compile_options(${target} PRIVATE
        -Wall -Wextra -Wpedantic
        $<$<CONFIG:Debug>:-O0 -g3>
        $<$<CONFIG:Release>:-O2 -g>
    )
    target_link_libraries(${target}
        PUBLIC
            cuframes_static            # из third_party/cuframes
            CUDA::cudart
            CUDA::cuda_driver
            Threads::Threads
            ${LIBDL_LIBRARY}           # для dlopen libnvidia-encode.so
            rt
    )
endforeach()

set_target_properties(cuframes_composer PROPERTIES
    VERSION ${PROJECT_VERSION}
    SOVERSION 0
)

# Install rules
include(GNUInstallDirs)
install(TARGETS cuframes_composer cuframes_composer_static
    EXPORT cuframesComposerTargets
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/cuframes_composer
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    FILES_MATCHING PATTERN "*.h"
)
