cmake_minimum_required(VERSION 3.14)

project(triton_sam LANGUAGES C CXX)

option(TRITON_ENABLE_GPU "Enable GPU support in backend" OFF)
option(TRITON_ENABLE_STATS "Include statistics collections in backend" ON)

FIND_PACKAGE(OpenCV REQUIRED)
FIND_PACKAGE(TritonCore REQUIRED)
FIND_PACKAGE(TritonCommon REQUIRED)
FIND_PACKAGE(TritonBackend REQUIRED)
FIND_PACKAGE(PkgConfig REQUIRED)
FIND_PACKAGE(RapidJSON REQUIRED) # 由于triton/backend/backend_common.h依赖rapidjson，所以这里引入rapidjson
FIND_PACKAGE(nlohmann_json REQUIRED)


set(TRITON_MIN_CXX_STANDARD 17 CACHE STRING "The minimum C++ standard whose features are requested to build this target.")

configure_file(src/libtriton_sam.ldscript libtriton_sam.ldscript COPYONLY)

add_library(
  ${PROJECT_NAME} SHARED
  src/sam.cpp
  src/utils/utils.cpp
  src/encoder.cpp
  src/decoder.cpp
)

add_library(
  SamBackend::${PROJECT_NAME} ALIAS ${PROJECT_NAME}
)

target_include_directories(
  ${PROJECT_NAME}
  PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/src
  ${CMAKE_CURRENT_SOURCE_DIR}/src/utils
  ${OpenCV_INCLUDE_DIRS}
)

target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_${TRITON_MIN_CXX_STANDARD})

target_link_libraries(
  ${PROJECT_NAME}
  PRIVATE
  ${TRITONCORE_LIBRARIES}
  ${TRITONCOMMON_LIBRARIES}
  ${TRITONBACKEND_LIBRARIES}
  ${OpenCV_LIBS}
)


add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E make_directory
  ${CMAKE_CURRENT_SOURCE_DIR}/model-repository/seg_sam/1
  COMMAND ${CMAKE_COMMAND} -E copy
  $<TARGET_FILE:${PROJECT_NAME}>
  ${CMAKE_CURRENT_SOURCE_DIR}/model-repository/seg_sam/1/)

set_target_properties(
  ${PROJECT_NAME} PROPERTIES
  POSITION_INDEPENDENT_CODE ON
  OUTPUT_NAME ${PROJECT_NAME}
  LINK_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libtriton_sam.ldscript
  LINK_FLAGS "-Wl,--version-script libtriton_sam.ldscript"
)


include(GNUInstallDirs)
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/SamBackend)

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/model-repository/seg_sam
  DESTINATION /usr/share/kylin-ai/model-repository
  COMPONENT sam-model
  PATTERN ".gitkeep" EXCLUDE
  PATTERN "*~" EXCLUDE
  PATTERN "__pycache__" EXCLUDE)

include(CMakePackageConfigHelpers)
configure_package_config_file(
  ${CMAKE_CURRENT_LIST_DIR}/cmake/SamBackendConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/SamBackendConfig.cmake
  INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
)

export(PACKAGE SamBackend)
