cmake_minimum_required(VERSION 3.20) file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" SVAPI_VERSION) string(STRIP "${SVAPI_VERSION}" SVAPI_VERSION) project(smartbotic-vectorapi VERSION ${SVAPI_VERSION} LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) endif() option(BUILD_TESTS "Build tests" ON) option(BUILD_WEBUI "Build the React web UI via npm" ON) include(GNUInstallDirs) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include(Dependencies) find_package(smartbotic-db-client REQUIRED) find_package(nlohmann_json REQUIRED) find_package(spdlog REQUIRED) find_package(OpenSSL REQUIRED) # Optional systemd (sd_notify) find_package(PkgConfig) if(PkgConfig_FOUND) pkg_check_modules(SYSTEMD IMPORTED_TARGET libsystemd) endif() # git commit for version banner execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVAPI_GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) if(NOT SVAPI_GIT_COMMIT) set(SVAPI_GIT_COMMIT "unknown") endif() configure_file(${CMAKE_SOURCE_DIR}/cmake/version.hpp.in ${CMAKE_BINARY_DIR}/generated/svapi/version.hpp @ONLY) add_subdirectory(src) if(BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() if(BUILD_WEBUI) include(WebUI OPTIONAL) # provided by plan 2; absent is fine endif() # Install: config conffile, api docs install(FILES ${CMAKE_SOURCE_DIR}/config/config.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/smartbotic-vectorapi) install(FILES ${CMAKE_SOURCE_DIR}/api/openapi.json ${CMAKE_SOURCE_DIR}/api/llms.txt DESTINATION ${CMAKE_INSTALL_DATADIR}/smartbotic-vectorapi)