cmake_minimum_required(VERSION 3.16)
project(watrix_sequence_video_api_example LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")

find_package(OpenCV REQUIRED)
find_package(CURL REQUIRED)

# Download and unpack ONNX Runtime for the target platform, then pass its root:
# cmake -S . -B build -DONNXRUNTIME_ROOT=/path/to/onnxruntime-linux-x64
set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/onnxruntime-linux-x64" CACHE PATH "ONNX Runtime CPU package root")
set(ONNXRUNTIME_INCLUDE_DIR "${ONNXRUNTIME_ROOT}/include")
set(ONNXRUNTIME_LIBRARY "${ONNXRUNTIME_ROOT}/lib/libonnxruntime.so")

if(NOT EXISTS "${ONNXRUNTIME_INCLUDE_DIR}/onnxruntime_cxx_api.h")
    message(FATAL_ERROR "ONNX Runtime header not found; set ONNXRUNTIME_ROOT")
endif()
if(NOT EXISTS "${ONNXRUNTIME_LIBRARY}")
    message(FATAL_ERROR "ONNX Runtime library not found; set ONNXRUNTIME_ROOT")
endif()

add_library(onnxruntime SHARED IMPORTED)
set_target_properties(onnxruntime PROPERTIES IMPORTED_LOCATION "${ONNXRUNTIME_LIBRARY}")

add_library(persondet STATIC persondet.cpp)
target_include_directories(persondet PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${ONNXRUNTIME_INCLUDE_DIR}")
target_compile_definitions(persondet PRIVATE WATRIX_PERSONDET_MODEL_NAME="gait_detect.onnx")
target_link_libraries(persondet PUBLIC onnxruntime ${OpenCV_LIBS})

add_library(typefilter STATIC gait_filter.cpp)
target_include_directories(typefilter PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${ONNXRUNTIME_INCLUDE_DIR}")
target_compile_definitions(typefilter PRIVATE WATRIX_TYPE_FILTER_MODEL_NAME="gait_type.onnx")
target_link_libraries(typefilter PUBLIC onnxruntime ${OpenCV_LIBS})

add_executable(local_video_sequence_extractor main.cpp)
target_compile_definitions(local_video_sequence_extractor PRIVATE WATRIX_REQUIRE_FULL_BODY=0)
target_link_libraries(local_video_sequence_extractor PRIVATE persondet typefilter ${OpenCV_LIBS})
set_target_properties(local_video_sequence_extractor PROPERTIES BUILD_RPATH "${ONNXRUNTIME_ROOT}/lib")
add_custom_command(TARGET local_video_sequence_extractor POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${CMAKE_CURRENT_SOURCE_DIR}/gait_detect.onnx"
        "$<TARGET_FILE_DIR:local_video_sequence_extractor>/gait_detect.onnx"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${CMAKE_CURRENT_SOURCE_DIR}/gait_type.onnx"
        "$<TARGET_FILE_DIR:local_video_sequence_extractor>/gait_type.onnx"
)

