CMakeLists.txt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # Smartbotic Database
  2. # Standalone document database with gRPC API
  3. cmake_minimum_required(VERSION 3.20)
  4. # Read version from VERSION file
  5. file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" SMARTBOTIC_DB_VERSION)
  6. string(STRIP "${SMARTBOTIC_DB_VERSION}" SMARTBOTIC_DB_VERSION)
  7. # Detect standalone vs embedded mode
  8. if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
  9. # Building as standalone project
  10. project(smartbotic-database VERSION ${SMARTBOTIC_DB_VERSION} LANGUAGES CXX C)
  11. set(SMARTBOTIC_DB_STANDALONE ON)
  12. else()
  13. # Building as embedded submodule
  14. set(SMARTBOTIC_DB_STANDALONE OFF)
  15. endif()
  16. # C++ settings
  17. set(CMAKE_CXX_STANDARD 20)
  18. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  19. set(CMAKE_CXX_EXTENSIONS OFF)
  20. # Build options
  21. option(SMARTBOTIC_DB_BUILD_CLIENT "Build the database client library" ON)
  22. option(SMARTBOTIC_DB_BUILD_SERVICE "Build the database service executable" ${SMARTBOTIC_DB_STANDALONE})
  23. # Find required packages
  24. find_package(Protobuf REQUIRED)
  25. find_package(gRPC CONFIG QUIET)
  26. if(NOT gRPC_FOUND)
  27. find_package(PkgConfig REQUIRED)
  28. pkg_check_modules(GRPC REQUIRED grpc++)
  29. endif()
  30. find_package(nlohmann_json 3.2.0 QUIET)
  31. if(NOT nlohmann_json_FOUND)
  32. find_package(PkgConfig REQUIRED)
  33. pkg_check_modules(NLOHMANN_JSON REQUIRED nlohmann_json)
  34. endif()
  35. # Find spdlog
  36. find_package(spdlog QUIET)
  37. if(NOT spdlog_FOUND)
  38. find_package(PkgConfig REQUIRED)
  39. pkg_check_modules(SPDLOG REQUIRED spdlog)
  40. endif()
  41. # Optional: systemd support
  42. find_package(PkgConfig)
  43. if(PKG_CONFIG_FOUND)
  44. pkg_check_modules(SYSTEMD QUIET libsystemd)
  45. endif()
  46. # Proto compilation
  47. add_subdirectory(proto)
  48. # Client library
  49. if(SMARTBOTIC_DB_BUILD_CLIENT)
  50. add_subdirectory(client)
  51. endif()
  52. # Service executable
  53. if(SMARTBOTIC_DB_BUILD_SERVICE)
  54. add_subdirectory(service)
  55. endif()
  56. # Print configuration summary
  57. if(SMARTBOTIC_DB_STANDALONE)
  58. message(STATUS "")
  59. message(STATUS "Smartbotic Database ${SMARTBOTIC_DB_VERSION}")
  60. message(STATUS " Build client library: ${SMARTBOTIC_DB_BUILD_CLIENT}")
  61. message(STATUS " Build service: ${SMARTBOTIC_DB_BUILD_SERVICE}")
  62. message(STATUS " Systemd support: ${SYSTEMD_FOUND}")
  63. message(STATUS "")
  64. endif()