CMakeLists.txt 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. )
  55. else()
  56. target_link_libraries(smartbotic_db_proto PUBLIC
  57. protobuf
  58. ${GRPC_LIBRARIES}
  59. )
  60. target_include_directories(smartbotic_db_proto PUBLIC ${GRPC_INCLUDE_DIRS})
  61. endif()
  62. # Export for other targets
  63. add_library(smartbotic::db_proto ALIAS smartbotic_db_proto)