-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d6c3537
commit ef083f2
Showing
29 changed files
with
2,296 additions
and
170 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
# Copyright 2018 gRPC authors. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
# | ||
# cmake build file for C++ route_guide example. | ||
# Assumes protobuf and gRPC have been installed using cmake. | ||
# See cmake_externalproject/CMakeLists.txt for all-in-one cmake build | ||
# that automatically builds all the dependencies before building route_guide. | ||
|
||
cmake_minimum_required(VERSION 3.5.1) | ||
|
||
if (NOT DEFINED CMAKE_CXX_STANDARD) | ||
set (CMAKE_CXX_STANDARD 14) | ||
endif() | ||
|
||
if(MSVC) | ||
add_definitions(-D_WIN32_WINNT=0x600) | ||
endif() | ||
|
||
find_package(Threads REQUIRED) | ||
|
||
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(_REFLECTION grpc++_reflection) | ||
if(CMAKE_CROSSCOMPILING) | ||
find_program(_PROTOBUF_PROTOC protoc) | ||
else() | ||
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>) | ||
endif() | ||
set(_GRPC_GRPCPP grpc++) | ||
if(CMAKE_CROSSCOMPILING) | ||
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) | ||
else() | ||
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>) | ||
endif() | ||
elseif(GRPC_FETCHCONTENT) | ||
# Another way is to use CMake's FetchContent module to clone gRPC at | ||
# configure time. This makes gRPC's source code available to your project, | ||
# similar to a git submodule. | ||
message(STATUS "Using gRPC via add_subdirectory (FetchContent).") | ||
include(FetchContent) | ||
FetchContent_Declare( | ||
grpc | ||
GIT_REPOSITORY https://github.com/grpc/grpc.git | ||
# when using gRPC, you will actually set this to an existing tag, such as | ||
# v1.25.0, v1.26.0 etc.. | ||
# For the purpose of testing, we override the tag used to the commit | ||
# that's currently under test. | ||
GIT_TAG v1.46.2) | ||
FetchContent_MakeAvailable(grpc) | ||
|
||
# Since FetchContent uses add_subdirectory under the hood, we can use | ||
# the grpc targets directly from this build. | ||
set(_PROTOBUF_LIBPROTOBUF libprotobuf) | ||
set(_REFLECTION grpc++_reflection) | ||
set(_PROTOBUF_PROTOC $<TARGET_FILE:protoc>) | ||
set(_GRPC_GRPCPP grpc++) | ||
if(CMAKE_CROSSCOMPILING) | ||
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) | ||
else() | ||
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>) | ||
endif() | ||
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) | ||
if(NOT Protobuf_FOUND) | ||
find_package(Protobuf REQUIRED) | ||
endif() | ||
message(STATUS "Using protobuf ${Protobuf_VERSION}") | ||
|
||
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) | ||
set(_REFLECTION gRPC::grpc++_reflection) | ||
if(CMAKE_CROSSCOMPILING) | ||
find_program(_PROTOBUF_PROTOC protoc) | ||
else() | ||
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>) | ||
endif() | ||
|
||
# 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}") | ||
|
||
set(_GRPC_GRPCPP gRPC::grpc++) | ||
if(CMAKE_CROSSCOMPILING) | ||
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) | ||
else() | ||
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>) | ||
endif() | ||
endif() |
Oops, something went wrong.