CMakeLists.txt 1.9 KB

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