| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | # 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 "superbuild" file for C++ helloworld example.# This build file demonstrates how to build the helloworld project# and all its dependencies in a single cmake build (hence "superbuild")# that is easy to build and maintain.# cmake's ExternalProject_Add() is used to import all the sub-projects,# including the "helloworld" project itself.# See https://blog.kitware.com/cmake-superbuilds-git-submodules/cmake_minimum_required(VERSION 2.8)# Projectproject(HelloWorld-SuperBuild C CXX)include(ExternalProject)# Builds c-ares project from the git submodule.# Note: For all external projects, instead of using checked-out code, one could# specify GIT_REPOSITORY and GIT_TAG to have cmake download the dependency directly,# without needing to add a submodule to your project.ExternalProject_Add(c-ares  PREFIX c-ares  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/cares/cares"  CMAKE_CACHE_ARGS        -DCARES_SHARED:BOOL=OFF        -DCARES_STATIC:BOOL=ON        -DCARES_STATIC_PIC:BOOL=ON        -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares)# Builds protobuf project from the git submodule.ExternalProject_Add(protobuf  PREFIX protobuf  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/protobuf/cmake"  CMAKE_CACHE_ARGS        -Dprotobuf_BUILD_TESTS:BOOL=OFF        -Dprotobuf_WITH_ZLIB:BOOL=OFF        -Dprotobuf_MSVC_STATIC_RUNTIME:BOOL=OFF        -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/protobuf)# Builds zlib project from the git submodule.ExternalProject_Add(zlib  PREFIX zlib  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/zlib"  CMAKE_CACHE_ARGS        -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/zlib)# the location where protobuf-config.cmake will be installed varies by platformif (WIN32)  set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake")else()  set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/protobuf/lib/cmake/protobuf")endif()# if OPENSSL_ROOT_DIR is set, propagate that hint path to the external projects with OpenSSL dependency.set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "")if (OPENSSL_ROOT_DIR)  set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}")endif()# Builds gRPC based on locally checked-out sources and set arguments so that all the dependencies# are correctly located.ExternalProject_Add(grpc  PREFIX grpc  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../.."  CMAKE_CACHE_ARGS        -DgRPC_INSTALL:BOOL=ON        -DgRPC_BUILD_TESTS:BOOL=OFF        -DgRPC_PROTOBUF_PROVIDER:STRING=package        -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG        -DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}        -DgRPC_ZLIB_PROVIDER:STRING=package        -DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib        -DgRPC_CARES_PROVIDER:STRING=package        -Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares        -DgRPC_SSL_PROVIDER:STRING=package        ${_CMAKE_ARGS_OPENSSL_ROOT_DIR}        -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc  DEPENDS c-ares protobuf zlib)# Build the helloworld projects itself using a CMakeLists.txt that assumes all the dependencies# have already been installed.# Even though helloworld is not really an "external project" from perspective of this build,# we are still importing it using ExternalProject_Add because that allows us to use find_package()# to locate all the dependencies (if we were building helloworld directly in this build we,# we would have needed to manually import the libraries as opposed to reusing targets exported by# gRPC and protobuf).ExternalProject_Add(helloworld  PREFIX helloworld  SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.."  BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/helloworld"  INSTALL_COMMAND ""  CMAKE_CACHE_ARGS        -DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}        -Dc-ares_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/c-ares/lib/cmake/c-ares        -DZLIB_ROOT:STRING=${CMAKE_CURRENT_BINARY_DIR}/zlib        ${_CMAKE_ARGS_OPENSSL_ROOT_DIR}        -DgRPC_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/grpc/lib/cmake/grpc  DEPENDS protobuf grpc)
 |