Skip to content
Snippets Groups Projects
Select Git revision
  • ef0b362f4ff2f91cabdcfe8da7e6492a937273f2
  • main default protected
  • f-sss4grpc
  • dev
  • 108-implement-rpc-call-for-server-side-scripting
  • f-windows-conan-create
  • f-to-string
  • f-update-requirements
  • f-related-projects
  • f-role
  • f-remote-path
  • f-rel-path
  • f-consol-message
  • v0.3.0
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.2
  • v0.1.1
  • v0.1
  • v0.0.19
  • v0.0.18
  • v0.0.16
  • v0.0.15
  • v0.0.10
  • v0.0.9
  • v0.0.8
  • v0.0.7
  • v0.0.6
  • v0.0.5
  • v0.0.4
  • v0.0.3
  • v0.0.2
33 results

FetchGRPC.cmake

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FetchGRPC.cmake 7.79 KiB
    # 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.15)
    
    if(MSVC)
      add_definitions(-D_WIN32_WINNT=0x600)
    endif()
    
    find_package(Threads REQUIRED)
    
    # disable a lot of stuff
    set(gRPC_BUILD_TESTS OFF)
    set(gRPC_BUILD_CSHARP_EXT OFF)
    set(gRPC_BUILD_GRPC_CSHARP_PLUGIN OFF)
    set(gRPC_BUILD_GRPC_PYTHON_PLUGIN OFF)
    set(gRPC_BUILD_GRPC_RUBY_PLUGIN OFF)
    set(gRPC_BUILD_GRPC_PHP_PLUGIN OFF)
    set(gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN OFF)
    set(gRPC_BUILD_GRPC_NODE_PLUGIN OFF)
    set(protobuf_BUILD_TESTS OFF)
    set(vGRPC_TAG_VERSION_OF_YOUR_CHOICE "v1.38.0")
    
    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        vGRPC_TAG_VERSION_OF_YOUR_CHOICE
        GIT_SHALLOW     1)
      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()
    
      ## disable more unused stuff
      set_target_properties(
        zlibstatic
        libprotobuf
        libprotoc
        grpc_plugin_support
        grpc_cpp_plugin
        upb
        address_sorting
        absl_log_severity
        absl_raw_logging_internal
        absl_bad_optional_access
        absl_spinlock_wait
        absl_throw_delegate
        absl_base
        absl_malloc_internal
        absl_debugging_internal
        absl_stacktrace
        absl_strings_internal
        absl_int128
        absl_strings
        absl_demangle_internal
        absl_symbolize
        absl_str_format_internal
        absl_cord
        absl_status
        absl_civil_time
        absl_time_zone
        absl_time
        absl_graphcycles_internal
        absl_synchronization
        gpr
        absl_exponential_biased
        absl_hashtablez_sampler
        absl_raw_hash_set
        absl_wyhash
        absl_city
        absl_bad_variant_access
        absl_hash
        absl_statusor
        c-ares
        re2
        ssl
        crypto
        gen_hpack_tables
        gen_legal_metadata_characters
        check_epollexclusive
        grpcpp_channelz
        gen_percent_encoding_tables
        grpc++_error_details
        grpc_unsecure
        grpc++_alts
        grpc++_unsecure
        absl_strerror
        absl_periodic_sampler
        absl_scoped_set_env
        absl_examine_stack
        absl_failure_signal_handler
        absl_leak_check
        absl_leak_check_disable
        absl_flags_program_name
        absl_flags_config
        absl_flags_commandlineflag_internal
        absl_flags_commandlineflag
        absl_flags_private_handle_accessor
        absl_flags_reflection
        absl_flags_marshalling
        absl_flags_internal
        absl_flags
        absl_flags_usage_internal
        absl_flags_usage
        absl_flags_parse
        absl_random_seed_gen_exception
        absl_random_internal_seed_material
        absl_random_internal_platform
        absl_random_internal_randen_slow
        absl_random_internal_randen_hwaes_impl
        absl_random_internal_randen_hwaes
        absl_random_internal_randen
        absl_random_internal_pool_urbg
        absl_random_distributions
        absl_random_seed_sequences
        absl_random_internal_distribution_test_util
        absl_bad_any_cast_impl
        acountry
        adig
        ahost
        libprotobuf-lite
        testing
        search_test
        regexp_test
        possible_match_test
        mimics_pcre_test
        parse_test
        required_prefix_test
        filtered_re2_test
        compile_test
        re2_arg_test
        charclass_test
        exhaustive1_test
        re2_test
        simplify_test
        string_generator_test
        dfa_test
        exhaustive3_test
        exhaustive2_test
        exhaustive_test
        regexp_benchmark
        random_test
        set_test
        bssl
        zlib
        example64
        minigzip
        example
        minigzip64
        grpc
        grpc++
        protoc
        grpc++_reflection
        PROPERTIES
        CXX_CLANG_TIDY ""
        CXX_INCLUDE_WHAT_YOU_USE ""
        EXCLUDE_FROM_ALL 1
      )
    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(_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()