CMakeLists.txt 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Proto compilation for smartbotic-database
  2. # Get the protobuf compiler and gRPC plugin
  3. find_program(PROTOC protoc REQUIRED)
  4. find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin REQUIRED)
  5. # Get the include directory for well-known types
  6. get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
  7. if(NOT PROTOBUF_INCLUDE_DIR)
  8. # Fallback for system protobuf
  9. set(PROTOBUF_INCLUDE_DIR "/usr/include")
  10. endif()
  11. # Create output directory
  12. set(PROTO_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
  13. file(MAKE_DIRECTORY ${PROTO_OUTPUT_DIR})
  14. # Proto file
  15. set(PROTO_FILE "${CMAKE_CURRENT_SOURCE_DIR}/database.proto")
  16. # Generated files
  17. set(PROTO_SRCS "${PROTO_OUTPUT_DIR}/database.pb.cc")
  18. set(PROTO_HDRS "${PROTO_OUTPUT_DIR}/database.pb.h")
  19. set(GRPC_SRCS "${PROTO_OUTPUT_DIR}/database.grpc.pb.cc")
  20. set(GRPC_HDRS "${PROTO_OUTPUT_DIR}/database.grpc.pb.h")
  21. # Generate proto and gRPC files
  22. add_custom_command(
  23. OUTPUT ${PROTO_SRCS} ${PROTO_HDRS} ${GRPC_SRCS} ${GRPC_HDRS}
  24. COMMAND ${PROTOC}
  25. --proto_path=${CMAKE_CURRENT_SOURCE_DIR}
  26. --proto_path=${PROTOBUF_INCLUDE_DIR}
  27. --cpp_out=${PROTO_OUTPUT_DIR}
  28. --grpc_out=${PROTO_OUTPUT_DIR}
  29. --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN}
  30. ${PROTO_FILE}
  31. DEPENDS ${PROTO_FILE}
  32. COMMENT "Generating protobuf/gRPC code for database.proto"
  33. VERBATIM
  34. )
  35. # Create proto library
  36. add_library(smartbotic_db_proto STATIC
  37. ${PROTO_SRCS}
  38. ${GRPC_SRCS}
  39. )
  40. target_include_directories(smartbotic_db_proto PUBLIC
  41. $<BUILD_INTERFACE:${PROTO_OUTPUT_DIR}>
  42. $<INSTALL_INTERFACE:include>
  43. )
  44. # Suppress warnings in generated code
  45. target_compile_options(smartbotic_db_proto PRIVATE
  46. -Wno-unused-parameter
  47. -Wno-array-bounds
  48. )
  49. # Link dependencies
  50. if(TARGET gRPC::grpc++)
  51. target_link_libraries(smartbotic_db_proto PUBLIC
  52. protobuf::libprotobuf
  53. gRPC::grpc++
  54. absl::log_internal_check_op
  55. )
  56. else()
  57. target_link_libraries(smartbotic_db_proto PUBLIC
  58. protobuf
  59. ${GRPC_LIBRARIES}
  60. )
  61. target_include_directories(smartbotic_db_proto PUBLIC ${GRPC_INCLUDE_DIRS})
  62. endif()
  63. # Export for other targets
  64. add_library(smartbotic::db_proto ALIAS smartbotic_db_proto)