cmake_minimum_required(VERSION 3.14)

project(tutorialpuncbackend 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(TritonCore REQUIRED)
FIND_PACKAGE(TritonCommon REQUIRED)
FIND_PACKAGE(TritonBackend REQUIRED)
FIND_PACKAGE(PkgConfig REQUIRED)
FIND_PACKAGE(nlohmann_json REQUIRED)
FIND_PACKAGE(RapidJSON REQUIRED)
pkg_check_modules(YAML_CPP REQUIRED yaml-cpp)

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

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()


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

add_library(
  triton-punc-backend SHARED
  src/punc.cc
  src/utils.cc
)

add_library(
  TutorialPuncBackend::triton-punc-backend ALIAS triton-punc-backend
)

target_include_directories(
  triton-punc-backend
  PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
)

target_compile_features(triton-punc-backend PRIVATE cxx_std_${TRITON_MIN_CXX_STANDARD})
target_compile_options(
  triton-punc-backend PRIVATE
  $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
    -Wall -Wextra -Wno-unused-parameter -Wno-type-limits -Werror>
  $<$<CXX_COMPILER_ID:MSVC>:/Wall /D_WIN32_WINNT=0x0A00 /EHsc /Zc:preprocessor>
)

target_link_libraries(
  triton-punc-backend
  PRIVATE
    ${TRITONCORE_LIBRARIES}
    ${TRITONCOMMON_LIBRARIES}
    ${TRITONBACKEND_LIBRARIES}
    ${YAML_CPP_LIBRARIES}
    yaml-cpp
)

target_link_options(
  triton-punc-backend
  PRIVATE
    -Wl,-z,relro
    -Wl,-z,now
)

set_target_properties(
  triton-punc-backend PROPERTIES
  POSITION_INDEPENDENT_CODE ON
  OUTPUT_NAME triton_ensemble-punc_ct-transformer_nonstreaming
  LINK_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libtriton_punc.ldscript
  LINK_FLAGS "-Wl,--version-script libtriton_punc.ldscript"
)
