cmake_minimum_required(VERSION 3.16)

project(kylin_genai_native_host LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(kylin-genai-native-host src/main.cpp)

find_package(Threads REQUIRED)

find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
  pkg_check_modules(KYLIN_GENAI_NLP QUIET kysdk-genai-nlp)
  pkg_check_modules(KYSDK_AI_VISION QUIET kysdk-coreai-vision)
  pkg_check_modules(GLIB QUIET glib-2.0)
endif()

if(KYLIN_GENAI_NLP_FOUND)
  target_include_directories(kylin-genai-native-host PRIVATE ${KYLIN_GENAI_NLP_INCLUDE_DIRS})
  target_link_directories(kylin-genai-native-host PRIVATE ${KYLIN_GENAI_NLP_LIBRARY_DIRS})
  target_link_libraries(kylin-genai-native-host PRIVATE ${KYLIN_GENAI_NLP_LIBRARIES})
else()
  find_path(KYLIN_GENAI_INCLUDE_DIR genai/text/chat.h PATHS /usr/include/kylin-ai REQUIRED)
  find_library(KYLIN_GENAI_LIBRARY kysdk-genai-nlp PATHS /usr/lib/x86_64-linux-gnu REQUIRED)
  target_include_directories(kylin-genai-native-host PRIVATE ${KYLIN_GENAI_INCLUDE_DIR})
  target_link_libraries(kylin-genai-native-host PRIVATE ${KYLIN_GENAI_LIBRARY})
endif()

if(KYSDK_AI_VISION_FOUND)
  target_compile_definitions(kylin-genai-native-host PRIVATE HAVE_KYSDK_AI_VISION=1)
  target_include_directories(kylin-genai-native-host PRIVATE ${KYSDK_AI_VISION_INCLUDE_DIRS})
  target_link_directories(kylin-genai-native-host PRIVATE ${KYSDK_AI_VISION_LIBRARY_DIRS})
  target_link_libraries(kylin-genai-native-host PRIVATE ${KYSDK_AI_VISION_LIBRARIES})
else()
  target_compile_definitions(kylin-genai-native-host PRIVATE HAVE_KYSDK_AI_VISION=0)
endif()

if(GLIB_FOUND)
  target_include_directories(kylin-genai-native-host PRIVATE ${GLIB_INCLUDE_DIRS})
  target_link_directories(kylin-genai-native-host PRIVATE ${GLIB_LIBRARY_DIRS})
  target_link_libraries(kylin-genai-native-host PRIVATE ${GLIB_LIBRARIES})
else()
  find_library(
    GLIB_LIBRARY
    NAMES glib-2.0 libglib-2.0.so.0
    PATHS /usr/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu
    REQUIRED
  )
  target_link_libraries(kylin-genai-native-host PRIVATE ${GLIB_LIBRARY})
endif()

target_link_libraries(kylin-genai-native-host PRIVATE Threads::Threads)

install(
  TARGETS kylin-genai-native-host
  RUNTIME DESTINATION lib/kylin-genai-native-host
)
