cmake_minimum_required(VERSION 3.5)
project(kysdk-vector-engine-client LANGUAGES CXX C)

set(CMAKE_CXX_STANDARD 17)

find_package(PkgConfig REQUIRED)
find_package(nlohmann_json REQUIRED)

# 向量数据库只支持 x86_64|aarch64，其他架构不支持，sw_64
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|aarch64")
    message(STATUS "Building for ${CMAKE_SYSTEM_PROCESSOR} architecture")

    file(GLOB_RECURSE SOURCE_LIST ${PROJECT_SOURCE_DIR}/src/*.cpp)

    include_directories(${PROJECT_SOURCE_DIR}/include/kysdk-vector-engine-client
            ${PROJECT_SOURCE_DIR}/src/impl)

    pkg_check_modules(GRPC REQUIRED IMPORTED_TARGET grpc)
    find_package(Protobuf REQUIRED)
    find_package(KylinAiProto REQUIRED)

    kylin_ai_generate_grpc_proto_source(RETURNED_GRPC_SOURCE_FILES vector-db schema common msg feder rg milvus)
    message("grpc source files: ${RETURNED_GRPC_SOURCE_FILES}")
    kylin_ai_generate_grpc_proto_service(RETURNED_GRPC_SERVICE_FILES vector-db milvus)
    message("grpc source files: ${RETURNED_GRPC_SERVICE_FILES}")

    add_library(kysdk-vector-engine-client SHARED
            ${SOURCE_LIST}
            ${RETURNED_GRPC_SOURCE_FILES}
            ${RETURNED_GRPC_SERVICE_FILES})

    target_link_libraries(kysdk-vector-engine-client
            PUBLIC grpc++
            PUBLIC protobuf
            PUBLIC nlohmann_json::nlohmann_json)
else()
    message(STATUS "Building for ${CMAKE_SYSTEM_PROCESSOR} architecture")
    add_definitions(-DENABLE_SW_ARCH)

    file(GLOB_RECURSE SOURCE_LIST
            ${PROJECT_SOURCE_DIR}/src/swImpl/*.cpp
            ${PROJECT_SOURCE_DIR}/src/types/*.cpp
            ${PROJECT_SOURCE_DIR}/src/Database.cpp)

    include_directories(${PROJECT_SOURCE_DIR}/include/kysdk-vector-engine-client
            ${PROJECT_SOURCE_DIR}/src/swImpl)

    add_library(kysdk-vector-engine-client SHARED
            ${SOURCE_LIST})

    target_link_libraries(kysdk-vector-engine-client
            PUBLIC nlohmann_json::nlohmann_json)
endif()

# 设置动态库版本号
set_target_properties(kysdk-vector-engine-client PROPERTIES VERSION 0.0.1 SOVERSION 1)

install(TARGETS kysdk-vector-engine-client
        DESTINATION ${CMAKE_INSTALL_LIBDIR})

install(DIRECTORY include/kysdk-vector-engine-client
        DESTINATION include)

install(DIRECTORY usr/ DESTINATION /usr)

if (DEFINED ENABLE_DEMO)
    unset(ENABLE_DEMO CACHE)
endif()
option(ENABLE_DEMO "Build Demo" OFF)
if (ENABLE_DEMO)
    add_subdirectory(demo)
endif(ENABLE_DEMO)
