cmake_minimum_required(VERSION 3.5)

project(kysdk-coreai-speech 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)
include_directories(${OPENSSL_INCLUDE_DIR})
pkg_check_modules(GIO REQUIRED gio-unix-2.0)
pkg_check_modules(AI_COMMON REQUIRED kysdk-ai-common)

find_package(jsoncpp REQUIRED)

kylin_ai_generate_gdbus_proto_code(SPEECH_COMMON_PROTO_FILES corespeechservice)
kylin_ai_generate_gdbus_proto_code(VISION_COMMON_PROTO_FILES corevisionservice)
kylin_ai_generate_gdbus_proto_code(EMBEDDING_COMMON_PROTO_FILES coretextembeddingservice coreimageembeddingservice)
include_directories(${GIO_INCLUDE_DIRS})
include_directories(${GIO_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${AI_COMMON_INCLUDE_DIRS})
include_directories(include/kylin-ai/coreai/speech)
include_directories(include/kylin-ai/coreai/vision)
include_directories(include/kylin-ai/coreai/embedding)
include_directories(include/kylin-ai)

set(SPEECH_SERVICE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/_speechrecognitionresult.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/_speechrecognitionsession.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/_speechsynthesisresult.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/_speechsynthesizersession.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/_speechmodelconfig.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/audioconfig.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/audiodatastream.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/coreaispeechserviceproxy.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/coreaispeechserver.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/logger.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/recognizer.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/speech/synthesizer.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/util.cpp
)

set(VISION_SERVICE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vision/_textrecognitionresult.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vision/_textrecognitionsession.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vision/textrecognition.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vision/corevisionserviceproxy.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vision/_textrecognitionconfig.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/util.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/logger.cpp
)

set(EMBEDDING_SERVICE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/embedding/embedding.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/embedding/imageembeddingprocessorproxy.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/embedding/imageembeddingsession.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/embedding/textembeddingprocessorproxy.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/embedding/textembeddingsession.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/logger.cpp
)

add_library(kysdk-coreai-speech SHARED
    include/kylin-ai/coreai/speech/audioconfig.h
    include/kylin-ai/coreai/speech/audiodatastream.h
    include/kylin-ai/coreai/speech/recognizer.h
    include/kylin-ai/coreai/speech/result.h
    include/kylin-ai/coreai/speech/synthesizer.h
    include/kylin-ai/coreai/speech/error.h
    include/kylin-ai/coreai/speech/config.h
    ${SPEECH_SERVICE_SOURCES}
    ${SPEECH_COMMON_PROTO_FILES}
)

add_library(kysdk-coreai-vision SHARED
    include/kylin-ai/coreai/vision/textrecognitionresult.h
    include/kylin-ai/coreai/vision/textrecognition.h
    include/kylin-ai/coreai/vision/error.h
    include/kylin-ai/coreai/vision/config.h
    ${VISION_SERVICE_SOURCES}
    ${VISION_COMMON_PROTO_FILES}
)
add_library(kysdk-coreai-embedding SHARED
    ${EMBEDDING_SERVICE_SOURCES}
    ${EMBEDDING_COMMON_PROTO_FILES}
)
if (ENABLE_TEST)
    add_subdirectory(tests)
endif ()

set_target_properties(kysdk-coreai-speech PROPERTIES VERSION 1.0.0 SOVERSION 1)
set_target_properties(kysdk-coreai-vision PROPERTIES VERSION 1.0.0 SOVERSION 1)
set_target_properties(kysdk-coreai-embedding PROPERTIES VERSION 1.0.0 SOVERSION 1)

target_link_libraries(
    kysdk-coreai-speech
    jsoncpp
    ${GIO_LIBRARIES}
    ${OPENSSL_LIBRARIES}
)

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

target_link_libraries(
    kysdk-coreai-embedding
    jsoncpp
    ${GIO_LIBRARIES}
    ${OPENSSL_LIBRARIES}
)

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

install(DIRECTORY usr/ DESTINATION /usr)
