cmake_minimum_required(VERSION 3.20)
project(vizionStreamer)

set(CMAKE_CXX_STANDARD 23)

# ---------------- Vizion SDK integration ----------------
set(VIZIONSDK_ROOT "/opt/vizionsdk")
set(VIZIONSDK_INCLUDE_DIR "${VIZIONSDK_ROOT}/include")
set(VIZIONSDK_LIB_DIR "${VIZIONSDK_ROOT}/lib")

# Add VizionSDK include directory
include_directories(${VIZIONSDK_INCLUDE_DIR})

# Add project include directory
include_directories(${CMAKE_SOURCE_DIR}/include)

# ---------------- GStreamer integration ----------------
find_package(PkgConfig REQUIRED)
pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0)
pkg_check_modules(GSTREAMER_APP REQUIRED gstreamer-app-1.0)

include_directories(
    ${GSTREAMER_INCLUDE_DIRS}
    ${GSTREAMER_APP_INCLUDE_DIRS}
)

link_directories(
    ${GSTREAMER_LIBRARY_DIRS}
    ${GSTREAMER_APP_LIBRARY_DIRS}
)

# Find VizionSDK library
find_library(VIZIONSDK_LIBRARY
    NAMES VizionSDK
    PATHS ${VIZIONSDK_LIB_DIR}
    NO_DEFAULT_PATH
    REQUIRED
)

# Create executable
add_executable(vizionStreamer
    src/main.cpp
    src/SocketServer.cpp
    src/CameraController.cpp
    src/GStreamerPipeline.cpp
    src/StreamingEngine.cpp
    src/SharedMemoryWriter.cpp
)

# Link libraries
target_link_libraries(vizionStreamer PRIVATE
    ${VIZIONSDK_LIBRARY}
    ${GSTREAMER_LIBRARIES}
    ${GSTREAMER_APP_LIBRARIES}
    rt
)

# Set RPATH so the executable can find the SDK .so at runtime without needing LD_LIBRARY_PATH
set_target_properties(vizionStreamer PROPERTIES
    BUILD_RPATH "${VIZIONSDK_LIB_DIR}"
    INSTALL_RPATH "${VIZIONSDK_LIB_DIR}"
)

# Copy VxConfig.conf to build directory on every build
add_custom_command(TARGET vizionStreamer POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        ${CMAKE_SOURCE_DIR}/config/VxConfig.conf
        ${CMAKE_BINARY_DIR}/VxConfig.conf
    COMMENT "Copying VxConfig.conf to build directory"
)
# --------------------------------------------------------
