cmake_minimum_required(VERSION 3.5)

project(kysdk-genai-vision LANGUAGES CXX C)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_SKIP_RPATH ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#######################################################################
# Options
#######################################################################
option(ENABLE_TEST "Build Test" OFF)

include_directories(include)
include_directories(src)

find_package(PkgConfig REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(KylinAiProto REQUIRED)
find_package(KysdkAiCommon REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIR})
pkg_check_modules(GIO REQUIRED gio-unix-2.0)

find_package(jsoncpp REQUIRED)

kylin_ai_generate_gdbus_proto_code(COMMON_PROTO_FILES genaivisionservice)
include_directories(${GIO_INCLUDE_DIRS})
pkg_check_modules(JSON REQUIRED json-glib-1.0)
include_directories(${GIO_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${JSON_INCLUDE_DIRS})
include_directories(include/kylin-ai/genai/vision)
include_directories(include/kylin-ai)

set(SERVICE_SOURCES
    src/imageconfig.cpp
    src/_imageresult.cpp
    src/_genaiimagesession.cpp
    src/genaivisionserviceproxy.cpp
    src/image.cpp
    src/logger.cpp
)

add_library(kysdk-genai-vision SHARED
    include/kylin-ai/genai/vision/imageconfig.h
    include/kylin-ai/genai/vision/imageformat.h
    include/kylin-ai/genai/vision/imageresult.h
    include/kylin-ai/genai/vision/image.h
    include/kylin-ai/genai/vision/error.h
    ${SERVICE_SOURCES}
    ${COMMON_PROTO_FILES}
)

if (ENABLE_TEST)
    enable_testing()
    add_subdirectory(test)
endif ()

set_target_properties(kysdk-genai-vision PROPERTIES VERSION 1.0.0 SOVERSION 1)

target_link_libraries(
    kysdk-genai-vision
    jsoncpp
    ${GIO_LIBRARIES}
    ${JSON_LIBRARIES}
    ${OPENSSL_LIBRARIES}
)

include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
install(TARGETS kysdk-genai-vision
    DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY include/kylin-ai
    DESTINATION include)

install(DIRECTORY usr/ DESTINATION /usr)
