From 4a510960c68aafcb0ea448593cbf2a53de76fbc5 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 29 Mar 2018 14:07:20 +0200 Subject: add distribtest for grpc being added with cmake add_subdirectory --- examples/cpp/helloworld/CMakeLists.txt | 63 ++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 15 deletions(-) (limited to 'examples/cpp') diff --git a/examples/cpp/helloworld/CMakeLists.txt b/examples/cpp/helloworld/CMakeLists.txt index 4f7d3fdddb..d0f705f6d9 100644 --- a/examples/cpp/helloworld/CMakeLists.txt +++ b/examples/cpp/helloworld/CMakeLists.txt @@ -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 $) + set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure) + set(_GRPC_CPP_PLUGIN_EXECUTABLE $) +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 $) + set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) + set(_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 $) + set(_GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure) + set(_GRPC_CPP_PLUGIN_EXECUTABLE $) +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() -- cgit v1.2.3