cmake_minimum_required(VERSION 3.21)
project(dora_zed VERSION 0.1.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-fPIC")

include(DoraTargets.cmake)

set(ZED_DIR "/usr/local/zed" CACHE PATH "Path to the ZED SDK")
set(ZED_PATH ${ZED_DIR})
find_package(CUDAToolkit REQUIRED)
find_package(zed REQUIRED)

find_package(OpenCV REQUIRED)

find_package(onnxruntime REQUIRED)
set(ONNXRUNTIME_INCLUDE_DIRS "")  # propagated via imported target
set(ONNXRUNTIME_LIBRARIES onnxruntime::onnxruntime)

link_directories(${dora_link_dirs})
link_directories(${ZED_LIBRARY_DIR})

add_executable(dora_zed
    src/main.cc
    src/zed/camera.cc
    src/engines/zed_native.cc
    src/engines/yolo_onnx.cc
    src/engines/yoloworld_onnx.cc
    ${node_bridge}
)
add_dependencies(dora_zed Dora_cxx)

target_include_directories(
    dora_zed
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/src
        ${dora_cxx_include_dir}
        ${dora_c_include_dir}
        ${ZED_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        ${CUDAToolkit_INCLUDE_DIRS}
        ${ONNXRUNTIME_INCLUDE_DIRS}
)

target_link_libraries(dora_zed dora_node_api_cxx ${ZED_LIBRARIES} ${OpenCV_LIBS} ${ONNXRUNTIME_LIBRARIES})

install(TARGETS dora_zed DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# Standalone detector tests — no dora, no live camera required

add_executable(test_yolo_onnx
    src/test_yolo_onnx.cc
    src/engines/yolo_onnx.cc
)
target_include_directories(test_yolo_onnx PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${ZED_INCLUDE_DIRS}
    ${OpenCV_INCLUDE_DIRS}
    ${CUDAToolkit_INCLUDE_DIRS}
    ${ONNXRUNTIME_INCLUDE_DIRS}
)
target_link_libraries(test_yolo_onnx PRIVATE
    ${ZED_LIBRARIES}
    ${OpenCV_LIBS}
    ${ONNXRUNTIME_LIBRARIES}
)
install(TARGETS test_yolo_onnx DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin)

add_executable(test_yoloworld_onnx
    src/test_yoloworld_onnx.cc
    src/engines/yoloworld_onnx.cc
)
target_include_directories(test_yoloworld_onnx PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${ZED_INCLUDE_DIRS}
    ${OpenCV_INCLUDE_DIRS}
    ${CUDAToolkit_INCLUDE_DIRS}
    ${ONNXRUNTIME_INCLUDE_DIRS}
)
target_link_libraries(test_yoloworld_onnx PRIVATE
    ${ZED_LIBRARIES}
    ${OpenCV_LIBS}
    ${ONNXRUNTIME_LIBRARIES}
)
install(TARGETS test_yoloworld_onnx DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin)
