|
|
|
@ -27,22 +27,55 @@ else() |
|
|
|
|
add_definitions(-D_WIN32_WINNT=0x600) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# Find Protobuf installation |
|
|
|
|
# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation. |
|
|
|
|
set(protobuf_MODULE_COMPATIBLE TRUE) |
|
|
|
|
find_package(Protobuf CONFIG REQUIRED) |
|
|
|
|
message(STATUS "Using protobuf ${protobuf_VERSION}") |
|
|
|
|
if(GRPC_AS_SUBMODULE) |
|
|
|
|
# One way to build a projects that uses gRPC is to just include the |
|
|
|
|
# entire gRPC project tree via "add_subdirectory". |
|
|
|
|
# This approach is very simple to use, but the are some potential |
|
|
|
|
# disadvantages: |
|
|
|
|
# * it includes gRPC's CMakeLists.txt directly into your build script |
|
|
|
|
# without and that can make gRPC's internal setting interfere with your |
|
|
|
|
# own build. |
|
|
|
|
# * depending on what's installed on your system, the contents of submodules |
|
|
|
|
# in gRPC's third_party/* might need to be available (and there might be |
|
|
|
|
# additional prerequisites required to build them). Consider using |
|
|
|
|
# the gRPC_*_PROVIDER options to fine-tune the expected behavior. |
|
|
|
|
# |
|
|
|
|
# A more robust approach to add dependency on gRPC is using |
|
|
|
|
# cmake's ExternalProject_Add (see cmake_externalproject/CMakeLists.txt). |
|
|
|
|
|
|
|
|
|
# Include the gRPC's cmake build (normally grpc source code would live |
|
|
|
|
# in a git submodule called "third_party/grpc", but this example lives in |
|
|
|
|
# the same repository as gRPC sources, so we just look a few directories up) |
|
|
|
|
add_subdirectory(../../.. ${CMAKE_CURRENT_BINARY_DIR}/grpc EXCLUDE_FROM_ALL) |
|
|
|
|
message(STATUS "Using gRPC via add_subdirectory.") |
|
|
|
|
|
|
|
|
|
# After using add_subdirectory, we can now use the grpc targets directly from |
|
|
|
|
# this build. |
|
|
|
|
set(_PROTOBUF_LIBPROTOBUF libprotobuf) |
|
|
|
|
set(_PROTOBUF_PROTOC $<TARGET_FILE:protoc>) |
|
|
|
|
set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure) |
|
|
|
|
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>) |
|
|
|
|
else() |
|
|
|
|
# This branch assumes that gRPC and all its dependencies are already installed |
|
|
|
|
# on this system, so they can be located by find_package(). |
|
|
|
|
|
|
|
|
|
# Find Protobuf installation |
|
|
|
|
# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation. |
|
|
|
|
set(protobuf_MODULE_COMPATIBLE TRUE) |
|
|
|
|
find_package(Protobuf CONFIG REQUIRED) |
|
|
|
|
message(STATUS "Using protobuf ${protobuf_VERSION}") |
|
|
|
|
|
|
|
|
|
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) |
|
|
|
|
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>) |
|
|
|
|
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) |
|
|
|
|
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>) |
|
|
|
|
|
|
|
|
|
# Find gRPC installation |
|
|
|
|
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation. |
|
|
|
|
find_package(gRPC CONFIG REQUIRED) |
|
|
|
|
message(STATUS "Using gRPC ${gRPC_VERSION}") |
|
|
|
|
# Find gRPC installation |
|
|
|
|
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation. |
|
|
|
|
find_package(gRPC CONFIG REQUIRED) |
|
|
|
|
message(STATUS "Using gRPC ${gRPC_VERSION}") |
|
|
|
|
|
|
|
|
|
# gRPC C++ plugin |
|
|
|
|
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>) |
|
|
|
|
set(_GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure) |
|
|
|
|
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# Proto file |
|
|
|
|
get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE) |
|
|
|
@ -74,6 +107,6 @@ foreach(_target |
|
|
|
|
${hw_proto_srcs} |
|
|
|
|
${hw_grpc_srcs}) |
|
|
|
|
target_link_libraries(${_target} |
|
|
|
|
${_PROTOBUF_LIBPROTOBUF} |
|
|
|
|
gRPC::grpc++_unsecure) |
|
|
|
|
${_GRPC_GRPCPP_UNSECURE} |
|
|
|
|
${_PROTOBUF_LIBPROTOBUF}) |
|
|
|
|
endforeach() |
|
|
|
|