82 lines
2.0 KiB
CMake
82 lines
2.0 KiB
CMake
cmake_minimum_required(VERSION 3.23)
|
|
project(proto LANGUAGES CXX)
|
|
|
|
|
|
find_package(protobuf CONFIG REQUIRED)
|
|
find_package(gRPC CONFIG REQUIRED)
|
|
|
|
# Add vcpkg paths to the search
|
|
find_program(PROTOC_EXECUTABLE protoc
|
|
PATHS
|
|
${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-linux/tools/protobuf
|
|
${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/protobuf
|
|
REQUIRED
|
|
NO_DEFAULT_PATH
|
|
)
|
|
|
|
find_program(GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin
|
|
PATHS
|
|
${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-linux/tools/grpc
|
|
${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/grpc
|
|
REQUIRED
|
|
NO_DEFAULT_PATH
|
|
)
|
|
|
|
|
|
if(NOT PROTOC_EXECUTABLE)
|
|
message(FATAL_ERROR "protoc not found! Install protobuf compiler")
|
|
endif()
|
|
|
|
if(NOT GRPC_CPP_PLUGIN_EXECUTABLE)
|
|
message(FATAL_ERROR "grpc_cpp_plugin not found! Install gRPC with C++ plugin")
|
|
endif()
|
|
|
|
message(STATUS "Found protoc: ${PROTOC_EXECUTABLE}")
|
|
message(STATUS "Found grpc_cpp_plugin: ${GRPC_CPP_PLUGIN_EXECUTABLE}")
|
|
|
|
set(PROTO_FILES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/messages.proto
|
|
${CMAKE_CURRENT_SOURCE_DIR}/services.proto
|
|
)
|
|
|
|
set(PROTO_OUT ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set(GENERATED_FILES
|
|
${PROTO_OUT}/messages.pb.h ${PROTO_OUT}/messages.pb.cc
|
|
${PROTO_OUT}/services.pb.h ${PROTO_OUT}/services.pb.cc
|
|
${PROTO_OUT}/services.grpc.pb.h ${PROTO_OUT}/services.grpc.pb.cc
|
|
)
|
|
|
|
set(PROTO_INCLUDES
|
|
"-I${CMAKE_CURRENT_LIST_DIR}"
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${GENERATED_FILES}
|
|
COMMAND ${PROTOC_EXECUTABLE}
|
|
ARGS
|
|
--cpp_out=${PROTO_OUT}
|
|
--grpc_out=${PROTO_OUT}
|
|
--plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN_EXECUTABLE}
|
|
${PROTO_INCLUDES}
|
|
${PROTO_FILES}
|
|
WORKING_DIRECTORY ${PROTO_OUT}
|
|
DEPENDS ${PROTO_FILES}
|
|
COMMENT "Generating protobuf files"
|
|
COMMAND_EXPAND_LISTS
|
|
VERBATIM
|
|
)
|
|
|
|
set_source_files_properties(${GENERATED_FILES} PROPERTIES GENERATED TRUE)
|
|
|
|
add_library(proto_static STATIC ${GENERATED_FILES})
|
|
|
|
target_include_directories(proto_static PUBLIC
|
|
${PROTO_OUT}
|
|
)
|
|
|
|
target_link_libraries(proto_static PUBLIC
|
|
protobuf::libprotobuf
|
|
gRPC::grpc++
|
|
)
|