| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # Proto compilation for smartbotic-database
- # Get the protobuf compiler and gRPC plugin
- find_program(PROTOC protoc REQUIRED)
- find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin REQUIRED)
- # Get the include directory for well-known types
- get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
- if(NOT PROTOBUF_INCLUDE_DIR)
- # Fallback for system protobuf
- set(PROTOBUF_INCLUDE_DIR "/usr/include")
- endif()
- # Create output directory
- set(PROTO_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
- file(MAKE_DIRECTORY ${PROTO_OUTPUT_DIR})
- # Proto file
- set(PROTO_FILE "${CMAKE_CURRENT_SOURCE_DIR}/database.proto")
- # Generated files
- set(PROTO_SRCS "${PROTO_OUTPUT_DIR}/database.pb.cc")
- set(PROTO_HDRS "${PROTO_OUTPUT_DIR}/database.pb.h")
- set(GRPC_SRCS "${PROTO_OUTPUT_DIR}/database.grpc.pb.cc")
- set(GRPC_HDRS "${PROTO_OUTPUT_DIR}/database.grpc.pb.h")
- # Generate proto and gRPC files
- add_custom_command(
- OUTPUT ${PROTO_SRCS} ${PROTO_HDRS} ${GRPC_SRCS} ${GRPC_HDRS}
- COMMAND ${PROTOC}
- --proto_path=${CMAKE_CURRENT_SOURCE_DIR}
- --proto_path=${PROTOBUF_INCLUDE_DIR}
- --cpp_out=${PROTO_OUTPUT_DIR}
- --grpc_out=${PROTO_OUTPUT_DIR}
- --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN}
- ${PROTO_FILE}
- DEPENDS ${PROTO_FILE}
- COMMENT "Generating protobuf/gRPC code for database.proto"
- VERBATIM
- )
- # Create proto library
- add_library(smartbotic_db_proto STATIC
- ${PROTO_SRCS}
- ${GRPC_SRCS}
- )
- target_include_directories(smartbotic_db_proto PUBLIC
- $<BUILD_INTERFACE:${PROTO_OUTPUT_DIR}>
- $<INSTALL_INTERFACE:include>
- )
- # Suppress warnings in generated code
- target_compile_options(smartbotic_db_proto PRIVATE
- -Wno-unused-parameter
- -Wno-array-bounds
- )
- # Link dependencies
- if(TARGET gRPC::grpc++)
- target_link_libraries(smartbotic_db_proto PUBLIC
- protobuf::libprotobuf
- gRPC::grpc++
- )
- else()
- target_link_libraries(smartbotic_db_proto PUBLIC
- protobuf
- ${GRPC_LIBRARIES}
- )
- target_include_directories(smartbotic_db_proto PUBLIC ${GRPC_INCLUDE_DIRS})
- endif()
- # Export for other targets
- add_library(smartbotic::db_proto ALIAS smartbotic_db_proto)
|