CMakeLists.txt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. cmake_minimum_required(VERSION 3.20)
  2. file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" SVAPI_VERSION)
  3. string(STRIP "${SVAPI_VERSION}" SVAPI_VERSION)
  4. project(smartbotic-vectorapi VERSION ${SVAPI_VERSION} LANGUAGES CXX)
  5. set(CMAKE_CXX_STANDARD 20)
  6. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  7. set(CMAKE_CXX_EXTENSIONS OFF)
  8. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  9. if(NOT CMAKE_BUILD_TYPE)
  10. set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
  11. endif()
  12. option(BUILD_TESTS "Build tests" ON)
  13. option(BUILD_WEBUI "Build the React web UI via npm" ON)
  14. include(GNUInstallDirs)
  15. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
  16. include(Dependencies)
  17. find_package(smartbotic-db-client REQUIRED)
  18. find_package(nlohmann_json REQUIRED)
  19. find_package(spdlog REQUIRED)
  20. find_package(OpenSSL REQUIRED)
  21. # Optional systemd (sd_notify)
  22. find_package(PkgConfig)
  23. if(PkgConfig_FOUND)
  24. pkg_check_modules(SYSTEMD IMPORTED_TARGET libsystemd)
  25. endif()
  26. # git commit for version banner
  27. execute_process(COMMAND git rev-parse --short HEAD
  28. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  29. OUTPUT_VARIABLE SVAPI_GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE
  30. ERROR_QUIET)
  31. if(NOT SVAPI_GIT_COMMIT)
  32. set(SVAPI_GIT_COMMIT "unknown")
  33. endif()
  34. configure_file(${CMAKE_SOURCE_DIR}/cmake/version.hpp.in
  35. ${CMAKE_BINARY_DIR}/generated/svapi/version.hpp @ONLY)
  36. add_subdirectory(src)
  37. if(BUILD_TESTS)
  38. enable_testing()
  39. add_subdirectory(tests)
  40. endif()
  41. if(BUILD_WEBUI)
  42. include(WebUI OPTIONAL) # provided by plan 2; absent is fine
  43. endif()
  44. # Install: config conffile, api docs
  45. install(FILES ${CMAKE_SOURCE_DIR}/config/config.json
  46. DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/smartbotic-vectorapi)
  47. install(FILES ${CMAKE_SOURCE_DIR}/api/openapi.json
  48. ${CMAKE_SOURCE_DIR}/api/llms.txt
  49. DESTINATION ${CMAKE_INSTALL_DATADIR}/smartbotic-vectorapi)