1*cc02d7e2SAndroid Build Coastguard Worker%YAML 1.2 2*cc02d7e2SAndroid Build Coastguard Worker--- | 3*cc02d7e2SAndroid Build Coastguard Worker # GRPC global cmake file 4*cc02d7e2SAndroid Build Coastguard Worker # This currently builds C and C++ code. 5*cc02d7e2SAndroid Build Coastguard Worker # This file has been automatically generated from a template file. 6*cc02d7e2SAndroid Build Coastguard Worker # Please look at the templates directory instead. 7*cc02d7e2SAndroid Build Coastguard Worker # This file can be regenerated from the template by running 8*cc02d7e2SAndroid Build Coastguard Worker # tools/buildgen/generate_projects.sh 9*cc02d7e2SAndroid Build Coastguard Worker # 10*cc02d7e2SAndroid Build Coastguard Worker # Copyright 2015 gRPC authors. 11*cc02d7e2SAndroid Build Coastguard Worker # 12*cc02d7e2SAndroid Build Coastguard Worker # Licensed under the Apache License, Version 2.0 (the "License"); 13*cc02d7e2SAndroid Build Coastguard Worker # you may not use this file except in compliance with the License. 14*cc02d7e2SAndroid Build Coastguard Worker # You may obtain a copy of the License at 15*cc02d7e2SAndroid Build Coastguard Worker # 16*cc02d7e2SAndroid Build Coastguard Worker # http://www.apache.org/licenses/LICENSE-2.0 17*cc02d7e2SAndroid Build Coastguard Worker # 18*cc02d7e2SAndroid Build Coastguard Worker # Unless required by applicable law or agreed to in writing, software 19*cc02d7e2SAndroid Build Coastguard Worker # distributed under the License is distributed on an "AS IS" BASIS, 20*cc02d7e2SAndroid Build Coastguard Worker # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21*cc02d7e2SAndroid Build Coastguard Worker # See the License for the specific language governing permissions and 22*cc02d7e2SAndroid Build Coastguard Worker # limitations under the License. 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard Worker <% 25*cc02d7e2SAndroid Build Coastguard Worker import re 26*cc02d7e2SAndroid Build Coastguard Worker 27*cc02d7e2SAndroid Build Coastguard Worker proto_re = re.compile('(.*)\\.proto') 28*cc02d7e2SAndroid Build Coastguard Worker lib_map = {lib.name: lib for lib in libs} 29*cc02d7e2SAndroid Build Coastguard Worker 30*cc02d7e2SAndroid Build Coastguard Worker third_party_proto_prefixes = {lib.proto_prefix for lib in external_proto_libraries} 31*cc02d7e2SAndroid Build Coastguard Worker 32*cc02d7e2SAndroid Build Coastguard Worker gpr_libs = ['gpr'] 33*cc02d7e2SAndroid Build Coastguard Worker grpc_libs = ['grpc', 'grpc_unsecure'] 34*cc02d7e2SAndroid Build Coastguard Worker grpcxx_libs = ['grpc++', 'grpc++_unsecure'] 35*cc02d7e2SAndroid Build Coastguard Worker protoc_libs = ['benchmark_helpers', 'grpc++_reflection', 'grpcpp_channelz'] 36*cc02d7e2SAndroid Build Coastguard Worker 37*cc02d7e2SAndroid Build Coastguard Worker def third_party_proto_import_path(path): 38*cc02d7e2SAndroid Build Coastguard Worker """Removes third_party prefix to match ProtoBuf's relative import path.""" 39*cc02d7e2SAndroid Build Coastguard Worker for prefix in third_party_proto_prefixes: 40*cc02d7e2SAndroid Build Coastguard Worker if path.startswith(prefix): 41*cc02d7e2SAndroid Build Coastguard Worker return path[len(prefix):] 42*cc02d7e2SAndroid Build Coastguard Worker return path 43*cc02d7e2SAndroid Build Coastguard Worker 44*cc02d7e2SAndroid Build Coastguard Worker def proto_replace_ext(filename, ext): 45*cc02d7e2SAndroid Build Coastguard Worker """Replace the .proto extension with given extension.""" 46*cc02d7e2SAndroid Build Coastguard Worker m = proto_re.match(filename) 47*cc02d7e2SAndroid Build Coastguard Worker if not m: 48*cc02d7e2SAndroid Build Coastguard Worker return filename 49*cc02d7e2SAndroid Build Coastguard Worker return '${_gRPC_PROTO_GENS_DIR}/' + third_party_proto_import_path(m.group(1)) + ext 50*cc02d7e2SAndroid Build Coastguard Worker 51*cc02d7e2SAndroid Build Coastguard Worker def is_absl_lib(lib_name): 52*cc02d7e2SAndroid Build Coastguard Worker """Returns True if the library is one of the abseil libraries.""" 53*cc02d7e2SAndroid Build Coastguard Worker return lib_name.startswith("absl/") 54*cc02d7e2SAndroid Build Coastguard Worker 55*cc02d7e2SAndroid Build Coastguard Worker def get_absl_dep(lib_name): 56*cc02d7e2SAndroid Build Coastguard Worker """Gets the corresponding cmake target for given absl library.""" 57*cc02d7e2SAndroid Build Coastguard Worker # The "cmake_target" field originates from src/abseil-cpp/preprocessed_builds.yaml.gen.py 58*cc02d7e2SAndroid Build Coastguard Worker return lib_map[lib_name].cmake_target 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard Worker def get_transitive_deps(lib_name): 61*cc02d7e2SAndroid Build Coastguard Worker """Get list of transitive deps for given library.""" 62*cc02d7e2SAndroid Build Coastguard Worker transitive_deps = [] 63*cc02d7e2SAndroid Build Coastguard Worker lib_metadata = lib_map.get(lib_name, None) 64*cc02d7e2SAndroid Build Coastguard Worker if lib_metadata: 65*cc02d7e2SAndroid Build Coastguard Worker transitive_deps = lib_metadata.transitive_deps 66*cc02d7e2SAndroid Build Coastguard Worker return list(transitive_deps) 67*cc02d7e2SAndroid Build Coastguard Worker 68*cc02d7e2SAndroid Build Coastguard Worker def list_abseil_pkg_targets(lib): 69*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): this function is odd, try to eliminate it. 70*cc02d7e2SAndroid Build Coastguard Worker # This returns a list of abseil pkg targets which the given lib and 71*cc02d7e2SAndroid Build Coastguard Worker # its non-abseil transitive dependencies depend on. 72*cc02d7e2SAndroid Build Coastguard Worker # As a result, internal abseil libraries are excluded from the result. 73*cc02d7e2SAndroid Build Coastguard Worker absl_specs = set() 74*cc02d7e2SAndroid Build Coastguard Worker transitive_deps_and_self = [lib] + get_transitive_deps(lib) 75*cc02d7e2SAndroid Build Coastguard Worker for lib_name in transitive_deps_and_self: 76*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(lib_name): continue 77*cc02d7e2SAndroid Build Coastguard Worker lib_metadata = lib_map.get(lib_name, None) 78*cc02d7e2SAndroid Build Coastguard Worker if lib_metadata: 79*cc02d7e2SAndroid Build Coastguard Worker for dep in lib_metadata.deps: 80*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(dep): 81*cc02d7e2SAndroid Build Coastguard Worker absl_specs.add(get_absl_dep(dep).replace("::", "_")) 82*cc02d7e2SAndroid Build Coastguard Worker return list(sorted(absl_specs)) 83*cc02d7e2SAndroid Build Coastguard Worker 84*cc02d7e2SAndroid Build Coastguard Worker def lib_name_to_pkgconfig_requires_private_name(lib_name): 85*cc02d7e2SAndroid Build Coastguard Worker """If library belongs to pkgconfig Requires.private section, return the name under which to include it.""" 86*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): extract the metadata to a centralized location. 87*cc02d7e2SAndroid Build Coastguard Worker deps_to_pkgconfig_requires_private = { 88*cc02d7e2SAndroid Build Coastguard Worker "cares": "libcares", 89*cc02d7e2SAndroid Build Coastguard Worker "libssl": "openssl", 90*cc02d7e2SAndroid Build Coastguard Worker "re2": "re2", 91*cc02d7e2SAndroid Build Coastguard Worker "z": "zlib", 92*cc02d7e2SAndroid Build Coastguard Worker } 93*cc02d7e2SAndroid Build Coastguard Worker return deps_to_pkgconfig_requires_private.get(lib_name, None) 94*cc02d7e2SAndroid Build Coastguard Worker 95*cc02d7e2SAndroid Build Coastguard Worker def is_pkgconfig_package(lib_name): 96*cc02d7e2SAndroid Build Coastguard Worker """Returns True if a pkgconfig package exists for a given library.""" 97*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): extract the metadata to a centralized location. 98*cc02d7e2SAndroid Build Coastguard Worker if lib_name in ["address_sorting", "utf8_range_lib"]: 99*cc02d7e2SAndroid Build Coastguard Worker return False 100*cc02d7e2SAndroid Build Coastguard Worker if lib_name == "upb" or lib_name.startswith("upb_"): 101*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): Add better detection for what are the "upb" libs. 102*cc02d7e2SAndroid Build Coastguard Worker return False 103*cc02d7e2SAndroid Build Coastguard Worker return True 104*cc02d7e2SAndroid Build Coastguard Worker 105*cc02d7e2SAndroid Build Coastguard Worker def get_pkgconfig_requires(lib): 106*cc02d7e2SAndroid Build Coastguard Worker """Returns "Requires" list for generating the pkgconfig .pc file for given library.""" 107*cc02d7e2SAndroid Build Coastguard Worker requires = set() 108*cc02d7e2SAndroid Build Coastguard Worker requires.update(list_abseil_pkg_targets(lib)) 109*cc02d7e2SAndroid Build Coastguard Worker for lib_name in get_transitive_deps(lib): 110*cc02d7e2SAndroid Build Coastguard Worker if not is_pkgconfig_package(lib_name): 111*cc02d7e2SAndroid Build Coastguard Worker # these deps go into Libs or Libs.Private 112*cc02d7e2SAndroid Build Coastguard Worker continue 113*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(lib_name): 114*cc02d7e2SAndroid Build Coastguard Worker # absl libs have special handling 115*cc02d7e2SAndroid Build Coastguard Worker continue 116*cc02d7e2SAndroid Build Coastguard Worker if lib_name_to_pkgconfig_requires_private_name(lib_name) is not None: 117*cc02d7e2SAndroid Build Coastguard Worker # these deps go into Requires.private 118*cc02d7e2SAndroid Build Coastguard Worker continue 119*cc02d7e2SAndroid Build Coastguard Worker if lib_name == 'protobuf': 120*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): add better way of excluding explicit protobuf dependency. 121*cc02d7e2SAndroid Build Coastguard Worker continue 122*cc02d7e2SAndroid Build Coastguard Worker if lib_name == 'opentelemetry-cpp::api': 123*cc02d7e2SAndroid Build Coastguard Worker requires.add('opentelemetry_api') 124*cc02d7e2SAndroid Build Coastguard Worker else: 125*cc02d7e2SAndroid Build Coastguard Worker requires.add(lib_name) 126*cc02d7e2SAndroid Build Coastguard Worker return list(sorted(requires)) 127*cc02d7e2SAndroid Build Coastguard Worker 128*cc02d7e2SAndroid Build Coastguard Worker def get_pkgconfig_requires_private(lib): 129*cc02d7e2SAndroid Build Coastguard Worker """Returns the "Requires.private" list for generating the pkgconfig .pc file for given library.""" 130*cc02d7e2SAndroid Build Coastguard Worker private_requires = set() 131*cc02d7e2SAndroid Build Coastguard Worker for lib_name in get_transitive_deps(lib): 132*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(lib_name): 133*cc02d7e2SAndroid Build Coastguard Worker # absl deps to into Requires 134*cc02d7e2SAndroid Build Coastguard Worker continue 135*cc02d7e2SAndroid Build Coastguard Worker require_name = lib_name_to_pkgconfig_requires_private_name(lib_name) 136*cc02d7e2SAndroid Build Coastguard Worker if require_name: 137*cc02d7e2SAndroid Build Coastguard Worker private_requires.add(require_name) 138*cc02d7e2SAndroid Build Coastguard Worker return list(sorted(private_requires)) 139*cc02d7e2SAndroid Build Coastguard Worker 140*cc02d7e2SAndroid Build Coastguard Worker def get_pkgconfig_libs(lib): 141*cc02d7e2SAndroid Build Coastguard Worker """The "Libs" list for generating the pkgconfig .pc file for given library.""" 142*cc02d7e2SAndroid Build Coastguard Worker libs = set() 143*cc02d7e2SAndroid Build Coastguard Worker # add self 144*cc02d7e2SAndroid Build Coastguard Worker libs.add("-l" + lib) 145*cc02d7e2SAndroid Build Coastguard Worker return list(sorted(libs)) 146*cc02d7e2SAndroid Build Coastguard Worker 147*cc02d7e2SAndroid Build Coastguard Worker def get_pkgconfig_libs_private(lib): 148*cc02d7e2SAndroid Build Coastguard Worker """The "Libs.private" list for generating the pkgconfig .pc file for given library.""" 149*cc02d7e2SAndroid Build Coastguard Worker private_libs = [] 150*cc02d7e2SAndroid Build Coastguard Worker for lib_name in get_transitive_deps(lib): 151*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(lib_name): 152*cc02d7e2SAndroid Build Coastguard Worker # absl deps to into Requires 153*cc02d7e2SAndroid Build Coastguard Worker continue 154*cc02d7e2SAndroid Build Coastguard Worker if is_pkgconfig_package(lib_name): 155*cc02d7e2SAndroid Build Coastguard Worker continue 156*cc02d7e2SAndroid Build Coastguard Worker # Transitive deps are pre-sorted in topological order. 157*cc02d7e2SAndroid Build Coastguard Worker # We must maintain that order to prevent linkage errors. 158*cc02d7e2SAndroid Build Coastguard Worker private_libs.append("-l" + lib_name) 159*cc02d7e2SAndroid Build Coastguard Worker return private_libs 160*cc02d7e2SAndroid Build Coastguard Worker 161*cc02d7e2SAndroid Build Coastguard Worker def lib_type_for_lib(lib_name): 162*cc02d7e2SAndroid Build Coastguard Worker """Returns STATIC/SHARED to force a static or shared lib build depending on the library.""" 163*cc02d7e2SAndroid Build Coastguard Worker # grpc_csharp_ext is loaded by C# runtime and it 164*cc02d7e2SAndroid Build Coastguard Worker # only makes sense as a shared lib. 165*cc02d7e2SAndroid Build Coastguard Worker if lib_name in ['grpc_csharp_ext']: 166*cc02d7e2SAndroid Build Coastguard Worker return ' SHARED' 167*cc02d7e2SAndroid Build Coastguard Worker 168*cc02d7e2SAndroid Build Coastguard Worker # upb always compiles as a static library on Windows 169*cc02d7e2SAndroid Build Coastguard Worker elif lib_name in ['upb','upb_collections_lib','upb_json_lib','upb_textformat_lib'] + protoc_libs: 170*cc02d7e2SAndroid Build Coastguard Worker return ' ${_gRPC_STATIC_WIN32}' 171*cc02d7e2SAndroid Build Coastguard Worker 172*cc02d7e2SAndroid Build Coastguard Worker else: 173*cc02d7e2SAndroid Build Coastguard Worker return '' 174*cc02d7e2SAndroid Build Coastguard Worker 175*cc02d7e2SAndroid Build Coastguard Worker def get_deps(target_dict): 176*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): remove special cases based on target names 177*cc02d7e2SAndroid Build Coastguard Worker deps = [] 178*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_ALLTARGETS_LIBRARIES}") 179*cc02d7e2SAndroid Build Coastguard Worker for d in target_dict.get('deps', []): 180*cc02d7e2SAndroid Build Coastguard Worker if d == 'z': 181*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_ZLIB_LIBRARIES}") 182*cc02d7e2SAndroid Build Coastguard Worker elif d == 'address_sorting': 183*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_ADDRESS_SORTING_LIBRARIES}") 184*cc02d7e2SAndroid Build Coastguard Worker elif d == 'benchmark': 185*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_BENCHMARK_LIBRARIES}") 186*cc02d7e2SAndroid Build Coastguard Worker elif d == 'libssl': 187*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_SSL_LIBRARIES}") 188*cc02d7e2SAndroid Build Coastguard Worker elif d == 're2': 189*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_RE2_LIBRARIES}") 190*cc02d7e2SAndroid Build Coastguard Worker elif d == 'cares': 191*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_CARES_LIBRARIES}") 192*cc02d7e2SAndroid Build Coastguard Worker elif d == 'protobuf': 193*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_PROTOBUF_LIBRARIES}") 194*cc02d7e2SAndroid Build Coastguard Worker elif d == 'protoc': 195*cc02d7e2SAndroid Build Coastguard Worker deps.append("${_gRPC_PROTOBUF_PROTOC_LIBRARIES}") 196*cc02d7e2SAndroid Build Coastguard Worker elif is_absl_lib(d): 197*cc02d7e2SAndroid Build Coastguard Worker deps.append(get_absl_dep(d)) 198*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): add handling for upb libraries 199*cc02d7e2SAndroid Build Coastguard Worker else: 200*cc02d7e2SAndroid Build Coastguard Worker deps.append(d) 201*cc02d7e2SAndroid Build Coastguard Worker return deps 202*cc02d7e2SAndroid Build Coastguard Worker 203*cc02d7e2SAndroid Build Coastguard Worker def is_generate_cmake_target(lib_or_target): 204*cc02d7e2SAndroid Build Coastguard Worker """Returns True if a cmake target should be generated for given library/target.""" 205*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): extract the metadata to a centralized location. 206*cc02d7e2SAndroid Build Coastguard Worker if lib_or_target.build not in ["all", "plugin", "plugin_test", "protoc", "tool", "test", "private"]: 207*cc02d7e2SAndroid Build Coastguard Worker return False 208*cc02d7e2SAndroid Build Coastguard Worker if lib_or_target.boringssl: 209*cc02d7e2SAndroid Build Coastguard Worker # Don't generate target for boringssl libs or tests 210*cc02d7e2SAndroid Build Coastguard Worker return False 211*cc02d7e2SAndroid Build Coastguard Worker if lib_or_target.name in ['cares', 'benchmark', 're2', 'xxhash', 'z']: 212*cc02d7e2SAndroid Build Coastguard Worker # we rely on these target to be created by external cmake builds. 213*cc02d7e2SAndroid Build Coastguard Worker return False 214*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(lib_or_target.name): 215*cc02d7e2SAndroid Build Coastguard Worker # we rely on absl targets to be created by an external cmake build. 216*cc02d7e2SAndroid Build Coastguard Worker return False 217*cc02d7e2SAndroid Build Coastguard Worker return True 218*cc02d7e2SAndroid Build Coastguard Worker 219*cc02d7e2SAndroid Build Coastguard Worker def get_platforms_condition_begin(platforms): 220*cc02d7e2SAndroid Build Coastguard Worker if all(platform in platforms for platform in ['linux', 'mac', 'posix', 'windows']): 221*cc02d7e2SAndroid Build Coastguard Worker return '' 222*cc02d7e2SAndroid Build Coastguard Worker cond = ' OR '.join(['_gRPC_PLATFORM_%s' % platform.upper() for platform in platforms]) 223*cc02d7e2SAndroid Build Coastguard Worker return 'if(%s)' % cond 224*cc02d7e2SAndroid Build Coastguard Worker 225*cc02d7e2SAndroid Build Coastguard Worker def get_platforms_condition_end(platforms): 226*cc02d7e2SAndroid Build Coastguard Worker if not get_platforms_condition_begin(platforms): 227*cc02d7e2SAndroid Build Coastguard Worker return '' 228*cc02d7e2SAndroid Build Coastguard Worker return 'endif()' 229*cc02d7e2SAndroid Build Coastguard Worker 230*cc02d7e2SAndroid Build Coastguard Worker def platforms_condition_block(platforms): 231*cc02d7e2SAndroid Build Coastguard Worker def _func(text): 232*cc02d7e2SAndroid Build Coastguard Worker lines = text.split('\n') 233*cc02d7e2SAndroid Build Coastguard Worker cond = get_platforms_condition_begin(platforms) 234*cc02d7e2SAndroid Build Coastguard Worker if cond: 235*cc02d7e2SAndroid Build Coastguard Worker # Remove empty line following <%block> 236*cc02d7e2SAndroid Build Coastguard Worker del lines[0] 237*cc02d7e2SAndroid Build Coastguard Worker 238*cc02d7e2SAndroid Build Coastguard Worker # Indent each line after 239*cc02d7e2SAndroid Build Coastguard Worker for i, line in enumerate(lines[:-1]): 240*cc02d7e2SAndroid Build Coastguard Worker if line: 241*cc02d7e2SAndroid Build Coastguard Worker lines[i] = ' ' + line 242*cc02d7e2SAndroid Build Coastguard Worker 243*cc02d7e2SAndroid Build Coastguard Worker # Add the condition block 244*cc02d7e2SAndroid Build Coastguard Worker lines.insert(0, cond) 245*cc02d7e2SAndroid Build Coastguard Worker 246*cc02d7e2SAndroid Build Coastguard Worker # Add endif() to the last line 247*cc02d7e2SAndroid Build Coastguard Worker lines[-1] += 'endif()' 248*cc02d7e2SAndroid Build Coastguard Worker else: 249*cc02d7e2SAndroid Build Coastguard Worker # Remove empty line following <%block> 250*cc02d7e2SAndroid Build Coastguard Worker del lines[0] 251*cc02d7e2SAndroid Build Coastguard Worker 252*cc02d7e2SAndroid Build Coastguard Worker # Strip leading whitespace from first line 253*cc02d7e2SAndroid Build Coastguard Worker lines[0] = lines[0].lstrip(' ') 254*cc02d7e2SAndroid Build Coastguard Worker 255*cc02d7e2SAndroid Build Coastguard Worker # Remove empty line before </%block> 256*cc02d7e2SAndroid Build Coastguard Worker del lines[-1] 257*cc02d7e2SAndroid Build Coastguard Worker 258*cc02d7e2SAndroid Build Coastguard Worker return '\n'.join(lines) 259*cc02d7e2SAndroid Build Coastguard Worker return _func 260*cc02d7e2SAndroid Build Coastguard Worker 261*cc02d7e2SAndroid Build Coastguard Worker %> 262*cc02d7e2SAndroid Build Coastguard Worker <% 263*cc02d7e2SAndroid Build Coastguard Worker # These files are added to a set so that they are not duplicated if multiple 264*cc02d7e2SAndroid Build Coastguard Worker # targets use them. Generating the same file multiple times with 265*cc02d7e2SAndroid Build Coastguard Worker # add_custom_command() is not allowed in CMake. 266*cc02d7e2SAndroid Build Coastguard Worker 267*cc02d7e2SAndroid Build Coastguard Worker protobuf_gen_files = set() 268*cc02d7e2SAndroid Build Coastguard Worker for tgt in targets: 269*cc02d7e2SAndroid Build Coastguard Worker for src in tgt.src: 270*cc02d7e2SAndroid Build Coastguard Worker if proto_re.match(src): 271*cc02d7e2SAndroid Build Coastguard Worker protobuf_gen_files.add(src) 272*cc02d7e2SAndroid Build Coastguard Worker for lib in libs: 273*cc02d7e2SAndroid Build Coastguard Worker for src in lib.src: 274*cc02d7e2SAndroid Build Coastguard Worker if proto_re.match(src): 275*cc02d7e2SAndroid Build Coastguard Worker protobuf_gen_files.add(src) 276*cc02d7e2SAndroid Build Coastguard Worker %> 277*cc02d7e2SAndroid Build Coastguard Worker 278*cc02d7e2SAndroid Build Coastguard Worker cmake_minimum_required(VERSION 3.13) 279*cc02d7e2SAndroid Build Coastguard Worker 280*cc02d7e2SAndroid Build Coastguard Worker set(PACKAGE_NAME "grpc") 281*cc02d7e2SAndroid Build Coastguard Worker set(PACKAGE_VERSION "${settings.cpp_version}") 282*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_CORE_VERSION "${settings.core_version}") 283*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_CORE_SOVERSION "${settings.core_version.major}") 284*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_CPP_VERSION "${settings.cpp_version}") 285*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_CPP_SOVERSION "${settings.cpp_version.major}.${settings.cpp_version.minor}") 286*cc02d7e2SAndroid Build Coastguard Worker set(PACKAGE_STRING "<%text>${PACKAGE_NAME} ${PACKAGE_VERSION}</%text>") 287*cc02d7e2SAndroid Build Coastguard Worker set(PACKAGE_TARNAME "<%text>${PACKAGE_NAME}-${PACKAGE_VERSION}</%text>") 288*cc02d7e2SAndroid Build Coastguard Worker set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/") 289*cc02d7e2SAndroid Build Coastguard Worker project(<%text>${PACKAGE_NAME}</%text> LANGUAGES C CXX) 290*cc02d7e2SAndroid Build Coastguard Worker 291*cc02d7e2SAndroid Build Coastguard Worker if(BUILD_SHARED_LIBS AND MSVC) 292*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) 293*cc02d7e2SAndroid Build Coastguard Worker endif() 294*cc02d7e2SAndroid Build Coastguard Worker 295*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_BINDIR "bin" CACHE STRING "Installation directory for executables") 296*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_LIBDIR "lib" CACHE STRING "Installation directory for libraries") 297*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_INCLUDEDIR "include" CACHE STRING "Installation directory for headers") 298*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_CMAKEDIR "lib/cmake/<%text>${PACKAGE_NAME}</%text>" CACHE STRING "Installation directory for cmake config files") 299*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_SHAREDIR "share/grpc" CACHE STRING "Installation directory for root certificates") 300*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_BUILD_MSVC_MP_COUNT 0 CACHE STRING "The maximum number of processes for MSVC /MP option") 301*cc02d7e2SAndroid Build Coastguard Worker 302*cc02d7e2SAndroid Build Coastguard Worker # Options 303*cc02d7e2SAndroid Build Coastguard Worker option(gRPC_BUILD_TESTS "Build tests" OFF) 304*cc02d7e2SAndroid Build Coastguard Worker option(gRPC_BUILD_CODEGEN "Build codegen" ON) 305*cc02d7e2SAndroid Build Coastguard Worker option(gRPC_DOWNLOAD_ARCHIVES "Download archives for empty 3rd party directories" ON) 306*cc02d7e2SAndroid Build Coastguard Worker 307*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_default ON) 308*cc02d7e2SAndroid Build Coastguard Worker if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) 309*cc02d7e2SAndroid Build Coastguard Worker # Disable gRPC_INSTALL by default if building as a submodule 310*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL_default OFF) 311*cc02d7e2SAndroid Build Coastguard Worker endif() 312*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_INSTALL <%text>${gRPC_INSTALL_default}</%text> CACHE BOOL 313*cc02d7e2SAndroid Build Coastguard Worker "Generate installation target") 314*cc02d7e2SAndroid Build Coastguard Worker 315*cc02d7e2SAndroid Build Coastguard Worker # We can install dependencies from submodules if we're running 316*cc02d7e2SAndroid Build Coastguard Worker # CMake v3.13 or newer. 317*cc02d7e2SAndroid Build Coastguard Worker if(CMAKE_VERSION VERSION_LESS 3.13) 318*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_INSTALL_SUPPORTED_FROM_MODULE OFF) 319*cc02d7e2SAndroid Build Coastguard Worker else() 320*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_INSTALL_SUPPORTED_FROM_MODULE ON) 321*cc02d7e2SAndroid Build Coastguard Worker endif() 322*cc02d7e2SAndroid Build Coastguard Worker 323*cc02d7e2SAndroid Build Coastguard Worker # Providers for third-party dependencies (gRPC_*_PROVIDER properties): 324*cc02d7e2SAndroid Build Coastguard Worker # "module": build the dependency using sources from git submodule (under third_party) 325*cc02d7e2SAndroid Build Coastguard Worker # "package": use cmake's find_package functionality to locate a pre-installed dependency 326*cc02d7e2SAndroid Build Coastguard Worker 327*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_ZLIB_PROVIDER "module" CACHE STRING "Provider of zlib library") 328*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_ZLIB_PROVIDER PROPERTY STRINGS "module" "package") 329*cc02d7e2SAndroid Build Coastguard Worker 330*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_CARES_PROVIDER "module" CACHE STRING "Provider of c-ares library") 331*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_CARES_PROVIDER PROPERTY STRINGS "module" "package") 332*cc02d7e2SAndroid Build Coastguard Worker 333*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_RE2_PROVIDER "module" CACHE STRING "Provider of re2 library") 334*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_RE2_PROVIDER PROPERTY STRINGS "module" "package") 335*cc02d7e2SAndroid Build Coastguard Worker 336*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_SSL_PROVIDER "module" CACHE STRING "Provider of ssl library") 337*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_SSL_PROVIDER PROPERTY STRINGS "module" "package") 338*cc02d7e2SAndroid Build Coastguard Worker 339*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "Provider of protobuf library") 340*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_PROTOBUF_PROVIDER PROPERTY STRINGS "module" "package") 341*cc02d7e2SAndroid Build Coastguard Worker 342*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_TESTS) 343*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_BENCHMARK_PROVIDER "module" CACHE STRING "Provider of benchmark library") 344*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_BENCHMARK_PROVIDER PROPERTY STRINGS "module" "package") 345*cc02d7e2SAndroid Build Coastguard Worker else() 346*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_BENCHMARK_PROVIDER "none") 347*cc02d7e2SAndroid Build Coastguard Worker endif() 348*cc02d7e2SAndroid Build Coastguard Worker 349*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_ABSL_PROVIDER "module" CACHE STRING "Provider of absl library") 350*cc02d7e2SAndroid Build Coastguard Worker set_property(CACHE gRPC_ABSL_PROVIDER PROPERTY STRINGS "module" "package") 351*cc02d7e2SAndroid Build Coastguard Worker <% 352*cc02d7e2SAndroid Build Coastguard Worker # Collect all abseil rules used by gpr, grpc, so on. 353*cc02d7e2SAndroid Build Coastguard Worker used_abseil_rules = set() 354*cc02d7e2SAndroid Build Coastguard Worker for lib in libs: 355*cc02d7e2SAndroid Build Coastguard Worker if lib.get("baselib"): 356*cc02d7e2SAndroid Build Coastguard Worker for dep in lib.transitive_deps: 357*cc02d7e2SAndroid Build Coastguard Worker if is_absl_lib(dep): 358*cc02d7e2SAndroid Build Coastguard Worker used_abseil_rules.add(lib_map[dep].cmake_target.replace("::", "_")) 359*cc02d7e2SAndroid Build Coastguard Worker %> 360*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_ABSL_USED_TARGETS 361*cc02d7e2SAndroid Build Coastguard Worker % for rule in sorted(used_abseil_rules): 362*cc02d7e2SAndroid Build Coastguard Worker ${rule} 363*cc02d7e2SAndroid Build Coastguard Worker % endfor 364*cc02d7e2SAndroid Build Coastguard Worker absl_meta 365*cc02d7e2SAndroid Build Coastguard Worker ) 366*cc02d7e2SAndroid Build Coastguard Worker 367*cc02d7e2SAndroid Build Coastguard Worker # The OpenTelemetry plugin supports "package" build only at present. 368*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_OPENTELEMETRY_PROVIDER "package") 369*cc02d7e2SAndroid Build Coastguard Worker # set(gRPC_OPENTELEMETRY_PROVIDER "module" CACHE STRING "Provider of opentelemetry library") 370*cc02d7e2SAndroid Build Coastguard Worker # set_property(CACHE gRPC_OPENTELEMETRY_PROVIDER PROPERTY STRINGS "module" "package") 371*cc02d7e2SAndroid Build Coastguard Worker 372*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library") 373*cc02d7e2SAndroid Build Coastguard Worker 374*cc02d7e2SAndroid Build Coastguard Worker if(UNIX) 375*cc02d7e2SAndroid Build Coastguard Worker if(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "Linux") 376*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_LINUX ON) 377*cc02d7e2SAndroid Build Coastguard Worker if(NOT CMAKE_CROSSCOMPILING AND CMAKE_SIZEOF_VOID_P EQUAL 4) 378*cc02d7e2SAndroid Build Coastguard Worker message("+++ Enabling SSE2 for <%text>${CMAKE_SYSTEM_PROCESSOR}</%text>") 379*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> -msse2") 380*cc02d7e2SAndroid Build Coastguard Worker endif() 381*cc02d7e2SAndroid Build Coastguard Worker elseif(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "Darwin") 382*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_MAC ON) 383*cc02d7e2SAndroid Build Coastguard Worker elseif(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "iOS") 384*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_IOS ON) 385*cc02d7e2SAndroid Build Coastguard Worker elseif(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "Android") 386*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_ANDROID ON) 387*cc02d7e2SAndroid Build Coastguard Worker else() 388*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_POSIX ON) 389*cc02d7e2SAndroid Build Coastguard Worker endif() 390*cc02d7e2SAndroid Build Coastguard Worker endif() 391*cc02d7e2SAndroid Build Coastguard Worker if(WIN32) 392*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLATFORM_WINDOWS ON) 393*cc02d7e2SAndroid Build Coastguard Worker endif() 394*cc02d7e2SAndroid Build Coastguard Worker 395*cc02d7e2SAndroid Build Coastguard Worker if (APPLE AND NOT DEFINED CMAKE_CXX_STANDARD) 396*cc02d7e2SAndroid Build Coastguard Worker # AppleClang defaults to C++98, so we bump it to C++14. 397*cc02d7e2SAndroid Build Coastguard Worker message("CMAKE_CXX_STANDARD was undefined, defaulting to C++14.") 398*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_CXX_STANDARD 14) 399*cc02d7e2SAndroid Build Coastguard Worker endif () 400*cc02d7e2SAndroid Build Coastguard Worker 401*cc02d7e2SAndroid Build Coastguard Worker ## Some libraries are shared even with BUILD_SHARED_LIBRARIES=OFF 402*cc02d7e2SAndroid Build Coastguard Worker if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) 403*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) 404*cc02d7e2SAndroid Build Coastguard Worker endif() 405*cc02d7e2SAndroid Build Coastguard Worker list(APPEND CMAKE_MODULE_PATH "<%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/cmake/modules") 406*cc02d7e2SAndroid Build Coastguard Worker 407*cc02d7e2SAndroid Build Coastguard Worker if(MSVC) 408*cc02d7e2SAndroid Build Coastguard Worker include(cmake/msvc_static_runtime.cmake) 409*cc02d7e2SAndroid Build Coastguard Worker add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS) 410*cc02d7e2SAndroid Build Coastguard Worker # Set /MP option 411*cc02d7e2SAndroid Build Coastguard Worker if (gRPC_BUILD_MSVC_MP_COUNT GREATER 0) 412*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS} /MP${gRPC_BUILD_MSVC_MP_COUNT}</%text>") 413*cc02d7e2SAndroid Build Coastguard Worker elseif (gRPC_BUILD_MSVC_MP_COUNT LESS 0) 414*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /MP") 415*cc02d7e2SAndroid Build Coastguard Worker endif() 416*cc02d7e2SAndroid Build Coastguard Worker # needed to compile protobuf 417*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /wd4065 /wd4506") 418*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): revisit warnings that were silenced as part of upgrade to protobuf3.6.0 419*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /wd4200 /wd4291 /wd4244") 420*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): revisit C4267 occurrences throughout the code 421*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /wd4267") 422*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): needed to build boringssl with VS2017, revisit later 423*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /wd4987 /wd4774 /wd4819 /wd4996 /wd4619") 424*cc02d7e2SAndroid Build Coastguard Worker # Silences thousands of trucation warnings 425*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /wd4503") 426*cc02d7e2SAndroid Build Coastguard Worker # Tell MSVC to build grpc using utf-8 427*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /utf-8") 428*cc02d7e2SAndroid Build Coastguard Worker # Inconsistent object sizes can cause stack corruption and should be treated as an error 429*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_C_CXX_FLAGS "<%text>${_gRPC_C_CXX_FLAGS}</%text> /we4789") 430*cc02d7e2SAndroid Build Coastguard Worker # To decrease the size of PDB files 431*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_EXE_LINKER_FLAGS "/opt:ref /opt:icf /pdbcompress") 432*cc02d7e2SAndroid Build Coastguard Worker endif() 433*cc02d7e2SAndroid Build Coastguard Worker if (MINGW) 434*cc02d7e2SAndroid Build Coastguard Worker add_definitions(-D_WIN32_WINNT=0x600) 435*cc02d7e2SAndroid Build Coastguard Worker endif() 436*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "<%text>${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS}</%text>") 437*cc02d7e2SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS "<%text>${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS}</%text>") 438*cc02d7e2SAndroid Build Coastguard Worker 439*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_USE_PROTO_LITE) 440*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf-lite") 441*cc02d7e2SAndroid Build Coastguard Worker add_definitions("-DGRPC_USE_PROTO_LITE") 442*cc02d7e2SAndroid Build Coastguard Worker else() 443*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf") 444*cc02d7e2SAndroid Build Coastguard Worker endif() 445*cc02d7e2SAndroid Build Coastguard Worker 446*cc02d7e2SAndroid Build Coastguard Worker if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_IOS) 447*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_CORE_NOSTDCXX_FLAGS -fno-exceptions -fno-rtti) 448*cc02d7e2SAndroid Build Coastguard Worker else() 449*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_CORE_NOSTDCXX_FLAGS "") 450*cc02d7e2SAndroid Build Coastguard Worker endif() 451*cc02d7e2SAndroid Build Coastguard Worker 452*cc02d7e2SAndroid Build Coastguard Worker if(UNIX AND NOT HAIKU) 453*cc02d7e2SAndroid Build Coastguard Worker # -pthread does more than -lpthread 454*cc02d7e2SAndroid Build Coastguard Worker set(THREADS_PREFER_PTHREAD_FLAG ON) 455*cc02d7e2SAndroid Build Coastguard Worker find_package(Threads) 456*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_ALLTARGETS_LIBRARIES <%text>${CMAKE_DL_LIBS}</%text> m Threads::Threads) 457*cc02d7e2SAndroid Build Coastguard Worker if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) 458*cc02d7e2SAndroid Build Coastguard Worker find_library(LIBRT rt) 459*cc02d7e2SAndroid Build Coastguard Worker if(LIBRT) 460*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_ALLTARGETS_LIBRARIES <%text>${_gRPC_ALLTARGETS_LIBRARIES}</%text> rt) 461*cc02d7e2SAndroid Build Coastguard Worker endif() 462*cc02d7e2SAndroid Build Coastguard Worker endif() 463*cc02d7e2SAndroid Build Coastguard Worker endif() 464*cc02d7e2SAndroid Build Coastguard Worker 465*cc02d7e2SAndroid Build Coastguard Worker include(CheckCXXSourceCompiles) 466*cc02d7e2SAndroid Build Coastguard Worker 467*cc02d7e2SAndroid Build Coastguard Worker if(UNIX OR APPLE) 468*cc02d7e2SAndroid Build Coastguard Worker # Some systems require the __STDC_FORMAT_MACROS macro to be defined 469*cc02d7e2SAndroid Build Coastguard Worker # to get the fixed-width integer type formatter macros. 470*cc02d7e2SAndroid Build Coastguard Worker check_cxx_source_compiles("#include <inttypes.h> 471*cc02d7e2SAndroid Build Coastguard Worker #include <cstdio> 472*cc02d7e2SAndroid Build Coastguard Worker int main() 473*cc02d7e2SAndroid Build Coastguard Worker { 474*cc02d7e2SAndroid Build Coastguard Worker int64_t i64{}; 475*cc02d7e2SAndroid Build Coastguard Worker std::printf(\"%\" PRId64, i64); 476*cc02d7e2SAndroid Build Coastguard Worker }" 477*cc02d7e2SAndroid Build Coastguard Worker HAVE_STDC_FORMAT_MACROS) 478*cc02d7e2SAndroid Build Coastguard Worker if(NOT HAVE_STDC_FORMAT_MACROS) 479*cc02d7e2SAndroid Build Coastguard Worker add_definitions(-D__STDC_FORMAT_MACROS) 480*cc02d7e2SAndroid Build Coastguard Worker endif() 481*cc02d7e2SAndroid Build Coastguard Worker endif() 482*cc02d7e2SAndroid Build Coastguard Worker 483*cc02d7e2SAndroid Build Coastguard Worker # configure ccache if requested 484*cc02d7e2SAndroid Build Coastguard Worker include(cmake/ccache.cmake) 485*cc02d7e2SAndroid Build Coastguard Worker 486*cc02d7e2SAndroid Build Coastguard Worker include(cmake/abseil-cpp.cmake) 487*cc02d7e2SAndroid Build Coastguard Worker include(cmake/address_sorting.cmake) 488*cc02d7e2SAndroid Build Coastguard Worker include(cmake/benchmark.cmake) 489*cc02d7e2SAndroid Build Coastguard Worker include(cmake/cares.cmake) 490*cc02d7e2SAndroid Build Coastguard Worker include(cmake/protobuf.cmake) 491*cc02d7e2SAndroid Build Coastguard Worker include(cmake/re2.cmake) 492*cc02d7e2SAndroid Build Coastguard Worker include(cmake/ssl.cmake) 493*cc02d7e2SAndroid Build Coastguard Worker include(cmake/upb.cmake) 494*cc02d7e2SAndroid Build Coastguard Worker include(cmake/xxhash.cmake) 495*cc02d7e2SAndroid Build Coastguard Worker include(cmake/zlib.cmake) 496*cc02d7e2SAndroid Build Coastguard Worker include(cmake/download_archive.cmake) 497*cc02d7e2SAndroid Build Coastguard Worker 498*cc02d7e2SAndroid Build Coastguard Worker if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) 499*cc02d7e2SAndroid Build Coastguard Worker include(cmake/systemd.cmake) 500*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_ALLTARGETS_LIBRARIES <%text>${_gRPC_ALLTARGETS_LIBRARIES}</%text> <%text>${_gRPC_SYSTEMD_LIBRARIES}</%text>) 501*cc02d7e2SAndroid Build Coastguard Worker endif() 502*cc02d7e2SAndroid Build Coastguard Worker 503*cc02d7e2SAndroid Build Coastguard Worker option(gRPC_BUILD_GRPCPP_OTEL_PLUGIN "Build grpcpp_otel_plugin" OFF) 504*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_GRPCPP_OTEL_PLUGIN) 505*cc02d7e2SAndroid Build Coastguard Worker include(cmake/opentelemetry-cpp.cmake) 506*cc02d7e2SAndroid Build Coastguard Worker endif() 507*cc02d7e2SAndroid Build Coastguard Worker 508*cc02d7e2SAndroid Build Coastguard Worker % for external_proto_library in external_proto_libraries: 509*cc02d7e2SAndroid Build Coastguard Worker % if len(external_proto_library.urls) > 1: 510*cc02d7e2SAndroid Build Coastguard Worker # Setup external proto library at ${external_proto_library.destination} with ${len(external_proto_library.urls)} download URLs 511*cc02d7e2SAndroid Build Coastguard Worker % else: 512*cc02d7e2SAndroid Build Coastguard Worker # Setup external proto library at ${external_proto_library.destination} if it doesn't exist 513*cc02d7e2SAndroid Build Coastguard Worker % endif 514*cc02d7e2SAndroid Build Coastguard Worker % for download_url in external_proto_library.urls: 515*cc02d7e2SAndroid Build Coastguard Worker if (NOT EXISTS <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/${external_proto_library.destination} AND gRPC_DOWNLOAD_ARCHIVES) 516*cc02d7e2SAndroid Build Coastguard Worker # Download the archive via HTTP, validate the checksum, and extract to ${external_proto_library.destination}. 517*cc02d7e2SAndroid Build Coastguard Worker download_archive( 518*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/${external_proto_library.destination} 519*cc02d7e2SAndroid Build Coastguard Worker ${download_url} 520*cc02d7e2SAndroid Build Coastguard Worker ${external_proto_library.hash} 521*cc02d7e2SAndroid Build Coastguard Worker ${external_proto_library.strip_prefix} 522*cc02d7e2SAndroid Build Coastguard Worker ) 523*cc02d7e2SAndroid Build Coastguard Worker endif() 524*cc02d7e2SAndroid Build Coastguard Worker % endfor 525*cc02d7e2SAndroid Build Coastguard Worker % endfor 526*cc02d7e2SAndroid Build Coastguard Worker 527*cc02d7e2SAndroid Build Coastguard Worker if(WIN32) 528*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_ALLTARGETS_LIBRARIES <%text>${_gRPC_ALLTARGETS_LIBRARIES}</%text> ws2_32 crypt32) 529*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_STATIC_WIN32 STATIC) 530*cc02d7e2SAndroid Build Coastguard Worker endif() 531*cc02d7e2SAndroid Build Coastguard Worker 532*cc02d7e2SAndroid Build Coastguard Worker if(BUILD_SHARED_LIBS AND WIN32) 533*cc02d7e2SAndroid Build Coastguard Worker 534*cc02d7e2SAndroid Build Coastguard Worker # Currently for shared lib on Windows (i.e. a DLL) certain bits of source code 535*cc02d7e2SAndroid Build Coastguard Worker # are generated from protobuf definitions by upbc. This source code does not include 536*cc02d7e2SAndroid Build Coastguard Worker # annotations needed to export these functions from grpc.lib so we have to 537*cc02d7e2SAndroid Build Coastguard Worker # re-include a small subset of these. 538*cc02d7e2SAndroid Build Coastguard Worker # 539*cc02d7e2SAndroid Build Coastguard Worker # This is not an ideal situation because these functions will be unavailable 540*cc02d7e2SAndroid Build Coastguard Worker # to clients of grpc and the libraries that need this (e.g. grpc++) will 541*cc02d7e2SAndroid Build Coastguard Worker # include redundant duplicate code. Hence, the duplication is only activated 542*cc02d7e2SAndroid Build Coastguard Worker # for DLL builds - and should be completely removed when source files are 543*cc02d7e2SAndroid Build Coastguard Worker # generated with the necessary __declspec annotations. 544*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_UPB_GEN_DUPL_SRC 545*cc02d7e2SAndroid Build Coastguard Worker src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c 546*cc02d7e2SAndroid Build Coastguard Worker src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c 547*cc02d7e2SAndroid Build Coastguard Worker src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c 548*cc02d7e2SAndroid Build Coastguard Worker ) 549*cc02d7e2SAndroid Build Coastguard Worker 550*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_ADDITIONAL_DLL_SRC 551*cc02d7e2SAndroid Build Coastguard Worker src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc 552*cc02d7e2SAndroid Build Coastguard Worker src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc 553*cc02d7e2SAndroid Build Coastguard Worker src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc 554*cc02d7e2SAndroid Build Coastguard Worker src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc 555*cc02d7e2SAndroid Build Coastguard Worker ) 556*cc02d7e2SAndroid Build Coastguard Worker 557*cc02d7e2SAndroid Build Coastguard Worker set(gRPC_ADDITIONAL_DLL_CXX_SRC 558*cc02d7e2SAndroid Build Coastguard Worker src/cpp/common/tls_certificate_provider.cc 559*cc02d7e2SAndroid Build Coastguard Worker src/cpp/common/tls_certificate_verifier.cc 560*cc02d7e2SAndroid Build Coastguard Worker src/cpp/common/tls_credentials_options.cc 561*cc02d7e2SAndroid Build Coastguard Worker ) 562*cc02d7e2SAndroid Build Coastguard Worker 563*cc02d7e2SAndroid Build Coastguard Worker endif() # BUILD_SHARED_LIBS AND WIN32 564*cc02d7e2SAndroid Build Coastguard Worker 565*cc02d7e2SAndroid Build Coastguard Worker # Create directory for proto source files 566*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PROTO_SRCS_DIR <%text>${CMAKE_BINARY_DIR}/protos</%text>) 567*cc02d7e2SAndroid Build Coastguard Worker file(MAKE_DIRECTORY <%text>${_gRPC_PROTO_SRCS_DIR}</%text>) 568*cc02d7e2SAndroid Build Coastguard Worker # Create directory for generated .proto files 569*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PROTO_GENS_DIR <%text>${CMAKE_BINARY_DIR}/gens</%text>) 570*cc02d7e2SAndroid Build Coastguard Worker file(MAKE_DIRECTORY <%text>${_gRPC_PROTO_GENS_DIR}</%text>) 571*cc02d7e2SAndroid Build Coastguard Worker 572*cc02d7e2SAndroid Build Coastguard Worker # protobuf_generate_grpc_cpp 573*cc02d7e2SAndroid Build Coastguard Worker # -------------------------- 574*cc02d7e2SAndroid Build Coastguard Worker # 575*cc02d7e2SAndroid Build Coastguard Worker # This method is no longer used by gRPC's CMake build process. However, it 576*cc02d7e2SAndroid Build Coastguard Worker # is used by many open source dependencies, that we might want to keep 577*cc02d7e2SAndroid Build Coastguard Worker # backward compatibility here. 578*cc02d7e2SAndroid Build Coastguard Worker # 579*cc02d7e2SAndroid Build Coastguard Worker # Add custom commands to process ``.proto`` files to C++ using protoc and 580*cc02d7e2SAndroid Build Coastguard Worker # GRPC plugin:: 581*cc02d7e2SAndroid Build Coastguard Worker # 582*cc02d7e2SAndroid Build Coastguard Worker # protobuf_generate_grpc_cpp [<ARGN>...] 583*cc02d7e2SAndroid Build Coastguard Worker # 584*cc02d7e2SAndroid Build Coastguard Worker # ``ARGN`` 585*cc02d7e2SAndroid Build Coastguard Worker # ``.proto`` files 586*cc02d7e2SAndroid Build Coastguard Worker # 587*cc02d7e2SAndroid Build Coastguard Worker function(protobuf_generate_grpc_cpp) 588*cc02d7e2SAndroid Build Coastguard Worker if(NOT ARGN) 589*cc02d7e2SAndroid Build Coastguard Worker message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") 590*cc02d7e2SAndroid Build Coastguard Worker return() 591*cc02d7e2SAndroid Build Coastguard Worker endif() 592*cc02d7e2SAndroid Build Coastguard Worker 593*cc02d7e2SAndroid Build Coastguard Worker foreach(FIL <%text>${ARGN}</%text>) 594*cc02d7e2SAndroid Build Coastguard Worker protobuf_generate_grpc_cpp_with_import_path_correction(<%text>${FIL}</%text> <%text>${FIL}</%text>) 595*cc02d7e2SAndroid Build Coastguard Worker endforeach() 596*cc02d7e2SAndroid Build Coastguard Worker endfunction() 597*cc02d7e2SAndroid Build Coastguard Worker 598*cc02d7e2SAndroid Build Coastguard Worker # protobuf_generate_grpc_cpp_with_import_path_correction 599*cc02d7e2SAndroid Build Coastguard Worker # -------------------------- 600*cc02d7e2SAndroid Build Coastguard Worker # 601*cc02d7e2SAndroid Build Coastguard Worker # Add custom commands to process ``.proto`` files to C++ using protoc and 602*cc02d7e2SAndroid Build Coastguard Worker # GRPC plugin:: 603*cc02d7e2SAndroid Build Coastguard Worker # 604*cc02d7e2SAndroid Build Coastguard Worker # protobuf_generate_grpc_cpp_with_import_path_correction <FILE_LOCATION> <IMPORT_PATH> 605*cc02d7e2SAndroid Build Coastguard Worker # 606*cc02d7e2SAndroid Build Coastguard Worker # ``FILE_LOCATION`` 607*cc02d7e2SAndroid Build Coastguard Worker # The relative path of the ``.proto`` file to the project root 608*cc02d7e2SAndroid Build Coastguard Worker # ``IMPORT_PATH`` 609*cc02d7e2SAndroid Build Coastguard Worker # The proto import path that itself expected to be placed in. For 610*cc02d7e2SAndroid Build Coastguard Worker # example, a "bar.proto" file wants to be imported as 611*cc02d7e2SAndroid Build Coastguard Worker # `import "foo/bar.proto"`. Then we should place it under 612*cc02d7e2SAndroid Build Coastguard Worker # "<ProtoBuf_Include_Path>/foo/bar.proto" instead of 613*cc02d7e2SAndroid Build Coastguard Worker # "<ProtoBuf_Include_Path>/third_party/foo/bar.proto". This ensures 614*cc02d7e2SAndroid Build Coastguard Worker # correct symbol being generated and C++ include path being correct. 615*cc02d7e2SAndroid Build Coastguard Worker # More info can be found at https://github.com/grpc/grpc/pull/25272. 616*cc02d7e2SAndroid Build Coastguard Worker # 617*cc02d7e2SAndroid Build Coastguard Worker function(protobuf_generate_grpc_cpp_with_import_path_correction FILE_LOCATION IMPORT_PATH) 618*cc02d7e2SAndroid Build Coastguard Worker if(NOT FILE_LOCATION) 619*cc02d7e2SAndroid Build Coastguard Worker message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") 620*cc02d7e2SAndroid Build Coastguard Worker return() 621*cc02d7e2SAndroid Build Coastguard Worker endif() 622*cc02d7e2SAndroid Build Coastguard Worker 623*cc02d7e2SAndroid Build Coastguard Worker # Sets the include path for ProtoBuf files 624*cc02d7e2SAndroid Build Coastguard Worker set(_protobuf_include_path -I . -I <%text>${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}</%text>) 625*cc02d7e2SAndroid Build Coastguard Worker # The absolute path of the expected place for the input proto file 626*cc02d7e2SAndroid Build Coastguard Worker # For example, health proto has package name grpc.health.v1, it's expected to be: 627*cc02d7e2SAndroid Build Coastguard Worker # <%text>${_gRPC_PROTO_SRCS_DIR}/grpc/health/v1/health.proto</%text> 628*cc02d7e2SAndroid Build Coastguard Worker get_filename_component(ABS_FIL <%text>${_gRPC_PROTO_SRCS_DIR}/${IMPORT_PATH}</%text> ABSOLUTE) 629*cc02d7e2SAndroid Build Coastguard Worker # Get the name of the file, which used to generate output file names for 630*cc02d7e2SAndroid Build Coastguard Worker # this command. 631*cc02d7e2SAndroid Build Coastguard Worker # Example: "health" for "health.proto" 632*cc02d7e2SAndroid Build Coastguard Worker get_filename_component(FIL_WE <%text>${_gRPC_PROTO_SRCS_DIR}/${IMPORT_PATH}</%text> NAME_WE) 633*cc02d7e2SAndroid Build Coastguard Worker # Get the relative path between the expected place for the proto and the 634*cc02d7e2SAndroid Build Coastguard Worker # working directory. In normal cases, it would be equal IMPORT_PATH, but 635*cc02d7e2SAndroid Build Coastguard Worker # it's better to be agnostic to all the global folder locations (like the 636*cc02d7e2SAndroid Build Coastguard Worker # centralized location <%text>${_gRPC_PROTO_SRCS_DIR})</%text>. 637*cc02d7e2SAndroid Build Coastguard Worker # Example: grpc/health/v1/health.proto 638*cc02d7e2SAndroid Build Coastguard Worker file(RELATIVE_PATH REL_FIL <%text>${_gRPC_PROTO_SRCS_DIR}</%text> <%text>${ABS_FIL}</%text>) 639*cc02d7e2SAndroid Build Coastguard Worker # Get the directory of the relative path. 640*cc02d7e2SAndroid Build Coastguard Worker # Example: grpc/health/v1 641*cc02d7e2SAndroid Build Coastguard Worker get_filename_component(REL_DIR <%text>${REL_FIL}</%text> DIRECTORY) 642*cc02d7e2SAndroid Build Coastguard Worker # Get the directory and name for output filenames generation. 643*cc02d7e2SAndroid Build Coastguard Worker # Example: "grpc/health/v1/health", the file name extension is omitted. 644*cc02d7e2SAndroid Build Coastguard Worker set(RELFIL_WE "<%text>${REL_DIR}/${FIL_WE}</%text>") 645*cc02d7e2SAndroid Build Coastguard Worker # Copy the proto file to a centralized location, with the correct import 646*cc02d7e2SAndroid Build Coastguard Worker # path. For example, health proto has package name grpc.health.v1, the bash 647*cc02d7e2SAndroid Build Coastguard Worker # equivalent would be: 648*cc02d7e2SAndroid Build Coastguard Worker # cp src/proto/grpc/health/v1/health.proto <%text>${_gRPC_PROTO_SRCS_DIR}/grpc/health/v1</%text> 649*cc02d7e2SAndroid Build Coastguard Worker file(MAKE_DIRECTORY <%text>${_gRPC_PROTO_SRCS_DIR}/${REL_DIR}</%text>) 650*cc02d7e2SAndroid Build Coastguard Worker file(COPY <%text>${CMAKE_CURRENT_SOURCE_DIR}/${FILE_LOCATION}</%text> DESTINATION <%text>${_gRPC_PROTO_SRCS_DIR}/${REL_DIR}</%text>) 651*cc02d7e2SAndroid Build Coastguard Worker 652*cc02d7e2SAndroid Build Coastguard Worker #if cross-compiling, find host plugin 653*cc02d7e2SAndroid Build Coastguard Worker if(CMAKE_CROSSCOMPILING) 654*cc02d7e2SAndroid Build Coastguard Worker find_program(_gRPC_CPP_PLUGIN grpc_cpp_plugin) 655*cc02d7e2SAndroid Build Coastguard Worker else() 656*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>) 657*cc02d7e2SAndroid Build Coastguard Worker endif() 658*cc02d7e2SAndroid Build Coastguard Worker 659*cc02d7e2SAndroid Build Coastguard Worker add_custom_command( 660*cc02d7e2SAndroid Build Coastguard Worker OUTPUT <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc"</%text> 661*cc02d7e2SAndroid Build Coastguard Worker <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h"</%text> 662*cc02d7e2SAndroid Build Coastguard Worker <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}_mock.grpc.pb.h"</%text> 663*cc02d7e2SAndroid Build Coastguard Worker <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc"</%text> 664*cc02d7e2SAndroid Build Coastguard Worker <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h"</%text> 665*cc02d7e2SAndroid Build Coastguard Worker COMMAND <%text>${_gRPC_PROTOBUF_PROTOC_EXECUTABLE}</%text> 666*cc02d7e2SAndroid Build Coastguard Worker ARGS --grpc_out=<%text>generate_mock_code=true:${_gRPC_PROTO_GENS_DIR}</%text> 667*cc02d7e2SAndroid Build Coastguard Worker --cpp_out=<%text>${_gRPC_PROTO_GENS_DIR}</%text> 668*cc02d7e2SAndroid Build Coastguard Worker --plugin=protoc-gen-grpc=<%text>${_gRPC_CPP_PLUGIN}</%text> 669*cc02d7e2SAndroid Build Coastguard Worker <%text>${_protobuf_include_path}</%text> 670*cc02d7e2SAndroid Build Coastguard Worker <%text>${REL_FIL}</%text> 671*cc02d7e2SAndroid Build Coastguard Worker DEPENDS <%text>${CMAKE_CURRENT_SOURCE_DIR}/${FILE_LOCATION}</%text> <%text>${ABS_FIL}</%text> <%text>${_gRPC_PROTOBUF_PROTOC}</%text> <%text>${_gRPC_CPP_PLUGIN}</%text> 672*cc02d7e2SAndroid Build Coastguard Worker WORKING_DIRECTORY <%text>${_gRPC_PROTO_SRCS_DIR}</%text> 673*cc02d7e2SAndroid Build Coastguard Worker COMMENT "Running gRPC C++ protocol buffer compiler for <%text>${IMPORT_PATH}</%text>" 674*cc02d7e2SAndroid Build Coastguard Worker VERBATIM) 675*cc02d7e2SAndroid Build Coastguard Worker endfunction() 676*cc02d7e2SAndroid Build Coastguard Worker 677*cc02d7e2SAndroid Build Coastguard Worker # These options allow users to enable or disable the building of the various 678*cc02d7e2SAndroid Build Coastguard Worker # protoc plugins. For example, running CMake with 679*cc02d7e2SAndroid Build Coastguard Worker # -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF will disable building the C# plugin. 680*cc02d7e2SAndroid Build Coastguard Worker set(_gRPC_PLUGIN_LIST) 681*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 682*cc02d7e2SAndroid Build Coastguard Worker % if tgt.build == 'protoc': 683*cc02d7e2SAndroid Build Coastguard Worker option(gRPC_BUILD_${tgt.name.upper()} "Build ${tgt.name}" ON) 684*cc02d7e2SAndroid Build Coastguard Worker if (gRPC_BUILD_${tgt.name.upper()}) 685*cc02d7e2SAndroid Build Coastguard Worker list(APPEND _gRPC_PLUGIN_LIST ${tgt.name}) 686*cc02d7e2SAndroid Build Coastguard Worker endif () 687*cc02d7e2SAndroid Build Coastguard Worker % endif 688*cc02d7e2SAndroid Build Coastguard Worker % endfor 689*cc02d7e2SAndroid Build Coastguard Worker 690*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(plugins 691*cc02d7e2SAndroid Build Coastguard Worker DEPENDS <%text>${_gRPC_PLUGIN_LIST}</%text> 692*cc02d7e2SAndroid Build Coastguard Worker ) 693*cc02d7e2SAndroid Build Coastguard Worker 694*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(tools_c 695*cc02d7e2SAndroid Build Coastguard Worker DEPENDS 696*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 697*cc02d7e2SAndroid Build Coastguard Worker % if tgt.build == 'tool' and not tgt.language == 'c++': 698*cc02d7e2SAndroid Build Coastguard Worker ${tgt.name} 699*cc02d7e2SAndroid Build Coastguard Worker % endif 700*cc02d7e2SAndroid Build Coastguard Worker % endfor 701*cc02d7e2SAndroid Build Coastguard Worker ) 702*cc02d7e2SAndroid Build Coastguard Worker 703*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(tools_cxx 704*cc02d7e2SAndroid Build Coastguard Worker DEPENDS 705*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 706*cc02d7e2SAndroid Build Coastguard Worker % if tgt.build == 'tool' and tgt.language == 'c++': 707*cc02d7e2SAndroid Build Coastguard Worker ${tgt.name} 708*cc02d7e2SAndroid Build Coastguard Worker % endif 709*cc02d7e2SAndroid Build Coastguard Worker % endfor 710*cc02d7e2SAndroid Build Coastguard Worker ) 711*cc02d7e2SAndroid Build Coastguard Worker 712*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(tools 713*cc02d7e2SAndroid Build Coastguard Worker DEPENDS tools_c tools_cxx) 714*cc02d7e2SAndroid Build Coastguard Worker 715*cc02d7e2SAndroid Build Coastguard Worker % for src in sorted(protobuf_gen_files): 716*cc02d7e2SAndroid Build Coastguard Worker protobuf_generate_grpc_cpp_with_import_path_correction( 717*cc02d7e2SAndroid Build Coastguard Worker ${src} ${third_party_proto_import_path(src)} 718*cc02d7e2SAndroid Build Coastguard Worker ) 719*cc02d7e2SAndroid Build Coastguard Worker % endfor 720*cc02d7e2SAndroid Build Coastguard Worker 721*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_TESTS) 722*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(buildtests_c) 723*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 724*cc02d7e2SAndroid Build Coastguard Worker % if is_generate_cmake_target(tgt) and tgt.build == 'test' and not tgt.language == 'c++': 725*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 726*cc02d7e2SAndroid Build Coastguard Worker add_dependencies(buildtests_c ${tgt.name}) 727*cc02d7e2SAndroid Build Coastguard Worker </%block> 728*cc02d7e2SAndroid Build Coastguard Worker % endif 729*cc02d7e2SAndroid Build Coastguard Worker % endfor 730*cc02d7e2SAndroid Build Coastguard Worker 731*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(buildtests_cxx) 732*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 733*cc02d7e2SAndroid Build Coastguard Worker % if is_generate_cmake_target(tgt) and tgt.build == 'test' and tgt.language == 'c++': 734*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 735*cc02d7e2SAndroid Build Coastguard Worker add_dependencies(buildtests_cxx ${tgt.name}) 736*cc02d7e2SAndroid Build Coastguard Worker </%block> 737*cc02d7e2SAndroid Build Coastguard Worker % endif 738*cc02d7e2SAndroid Build Coastguard Worker % endfor 739*cc02d7e2SAndroid Build Coastguard Worker 740*cc02d7e2SAndroid Build Coastguard Worker add_custom_target(buildtests 741*cc02d7e2SAndroid Build Coastguard Worker DEPENDS buildtests_c buildtests_cxx) 742*cc02d7e2SAndroid Build Coastguard Worker endif() 743*cc02d7e2SAndroid Build Coastguard Worker <% 744*cc02d7e2SAndroid Build Coastguard Worker cmake_libs = [] 745*cc02d7e2SAndroid Build Coastguard Worker for lib in libs: 746*cc02d7e2SAndroid Build Coastguard Worker if not is_generate_cmake_target(lib): continue 747*cc02d7e2SAndroid Build Coastguard Worker cmake_libs.append(lib) 748*cc02d7e2SAndroid Build Coastguard Worker %> 749*cc02d7e2SAndroid Build Coastguard Worker 750*cc02d7e2SAndroid Build Coastguard Worker % for lib in cmake_libs: 751*cc02d7e2SAndroid Build Coastguard Worker % if lib.build in ["test", "private"]: 752*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_TESTS) 753*cc02d7e2SAndroid Build Coastguard Worker ${cc_library(lib)} 754*cc02d7e2SAndroid Build Coastguard Worker endif() 755*cc02d7e2SAndroid Build Coastguard Worker % else: 756*cc02d7e2SAndroid Build Coastguard Worker % if lib.build in ["plugin"]: 757*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_${lib.name.upper()}) 758*cc02d7e2SAndroid Build Coastguard Worker % endif 759*cc02d7e2SAndroid Build Coastguard Worker ${cc_library(lib)} 760*cc02d7e2SAndroid Build Coastguard Worker % if not lib.build in ["tool"]: 761*cc02d7e2SAndroid Build Coastguard Worker % if any(proto_re.match(src) for src in lib.src): 762*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_CODEGEN) 763*cc02d7e2SAndroid Build Coastguard Worker % endif 764*cc02d7e2SAndroid Build Coastguard Worker ${cc_install(lib)} 765*cc02d7e2SAndroid Build Coastguard Worker % if any(proto_re.match(src) for src in lib.src): 766*cc02d7e2SAndroid Build Coastguard Worker endif() 767*cc02d7e2SAndroid Build Coastguard Worker % endif 768*cc02d7e2SAndroid Build Coastguard Worker % endif 769*cc02d7e2SAndroid Build Coastguard Worker % if lib.build in ["plugin"]: 770*cc02d7e2SAndroid Build Coastguard Worker endif() 771*cc02d7e2SAndroid Build Coastguard Worker % endif 772*cc02d7e2SAndroid Build Coastguard Worker % endif 773*cc02d7e2SAndroid Build Coastguard Worker % endfor 774*cc02d7e2SAndroid Build Coastguard Worker 775*cc02d7e2SAndroid Build Coastguard Worker % for tgt in targets: 776*cc02d7e2SAndroid Build Coastguard Worker % if is_generate_cmake_target(tgt): 777*cc02d7e2SAndroid Build Coastguard Worker % if tgt.build in ["test", "private"]: 778*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_TESTS) 779*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 780*cc02d7e2SAndroid Build Coastguard Worker ${cc_binary(tgt)} 781*cc02d7e2SAndroid Build Coastguard Worker </%block> 782*cc02d7e2SAndroid Build Coastguard Worker endif() 783*cc02d7e2SAndroid Build Coastguard Worker % elif tgt.build in ["plugin_test"]: 784*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_TESTS AND ${tgt.plugin_option}) 785*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 786*cc02d7e2SAndroid Build Coastguard Worker ${cc_binary(tgt)} 787*cc02d7e2SAndroid Build Coastguard Worker </%block> 788*cc02d7e2SAndroid Build Coastguard Worker endif() 789*cc02d7e2SAndroid Build Coastguard Worker % elif tgt.build in ["protoc"]: 790*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_${tgt.name.upper()}) 791*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 792*cc02d7e2SAndroid Build Coastguard Worker ${cc_binary(tgt)} 793*cc02d7e2SAndroid Build Coastguard Worker ${cc_install(tgt)} 794*cc02d7e2SAndroid Build Coastguard Worker </%block> 795*cc02d7e2SAndroid Build Coastguard Worker endif() 796*cc02d7e2SAndroid Build Coastguard Worker % else: 797*cc02d7e2SAndroid Build Coastguard Worker <%block filter='platforms_condition_block(tgt.platforms)'> 798*cc02d7e2SAndroid Build Coastguard Worker ${cc_binary(tgt)} 799*cc02d7e2SAndroid Build Coastguard Worker % if not tgt.build in ["tool"]: 800*cc02d7e2SAndroid Build Coastguard Worker ${cc_install(tgt)} 801*cc02d7e2SAndroid Build Coastguard Worker % endif 802*cc02d7e2SAndroid Build Coastguard Worker </%block> 803*cc02d7e2SAndroid Build Coastguard Worker % endif 804*cc02d7e2SAndroid Build Coastguard Worker % endif 805*cc02d7e2SAndroid Build Coastguard Worker % endfor 806*cc02d7e2SAndroid Build Coastguard Worker 807*cc02d7e2SAndroid Build Coastguard Worker <%def name="cc_library(lib)"> 808*cc02d7e2SAndroid Build Coastguard Worker % if any(proto_re.match(src) for src in lib.src): 809*cc02d7e2SAndroid Build Coastguard Worker % if lib.name == 'grpcpp_channelz': # TODO(jtattermusch): remove special case based on target name 810*cc02d7e2SAndroid Build Coastguard Worker # grpcpp_channelz doesn't build with protobuf-lite 811*cc02d7e2SAndroid Build Coastguard Worker # See https://github.com/grpc/grpc/issues/19473 812*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_CODEGEN AND NOT gRPC_USE_PROTO_LITE) 813*cc02d7e2SAndroid Build Coastguard Worker % else: 814*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_CODEGEN) 815*cc02d7e2SAndroid Build Coastguard Worker % endif 816*cc02d7e2SAndroid Build Coastguard Worker % endif 817*cc02d7e2SAndroid Build Coastguard Worker add_library(${lib.name}${lib_type_for_lib(lib.name)} 818*cc02d7e2SAndroid Build Coastguard Worker % for src in lib.src: 819*cc02d7e2SAndroid Build Coastguard Worker % if not proto_re.match(src): 820*cc02d7e2SAndroid Build Coastguard Worker ${src} 821*cc02d7e2SAndroid Build Coastguard Worker % else: 822*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.pb.cc')} 823*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.grpc.pb.cc')} 824*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.pb.h')} 825*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.grpc.pb.h')} 826*cc02d7e2SAndroid Build Coastguard Worker % if src in ["src/proto/grpc/testing/compiler_test.proto", "src/proto/grpc/testing/echo.proto"]: 827*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '_mock.grpc.pb.h')} 828*cc02d7e2SAndroid Build Coastguard Worker % endif 829*cc02d7e2SAndroid Build Coastguard Worker % endif 830*cc02d7e2SAndroid Build Coastguard Worker % endfor 831*cc02d7e2SAndroid Build Coastguard Worker % if lib.name in ['grpc++_alts', 'grpc++_unsecure', 'grpc++']: 832*cc02d7e2SAndroid Build Coastguard Worker <%text>${gRPC_UPB_GEN_DUPL_SRC}</%text> 833*cc02d7e2SAndroid Build Coastguard Worker % endif 834*cc02d7e2SAndroid Build Coastguard Worker % if lib.name in ['grpc_unsecure']: 835*cc02d7e2SAndroid Build Coastguard Worker <%text>${gRPC_ADDITIONAL_DLL_SRC}</%text> 836*cc02d7e2SAndroid Build Coastguard Worker % endif 837*cc02d7e2SAndroid Build Coastguard Worker % if lib.name in ['grpc++_unsecure']: 838*cc02d7e2SAndroid Build Coastguard Worker <%text>${gRPC_ADDITIONAL_DLL_CXX_SRC}</%text> 839*cc02d7e2SAndroid Build Coastguard Worker % endif 840*cc02d7e2SAndroid Build Coastguard Worker ) 841*cc02d7e2SAndroid Build Coastguard Worker 842*cc02d7e2SAndroid Build Coastguard Worker target_compile_features(${lib.name} PUBLIC cxx_std_14) 843*cc02d7e2SAndroid Build Coastguard Worker 844*cc02d7e2SAndroid Build Coastguard Worker set_target_properties(${lib.name} PROPERTIES 845*cc02d7e2SAndroid Build Coastguard Worker % if lib.language == 'c++': 846*cc02d7e2SAndroid Build Coastguard Worker VERSION <%text>${gRPC_CPP_VERSION}</%text> 847*cc02d7e2SAndroid Build Coastguard Worker SOVERSION <%text>${gRPC_CPP_SOVERSION}</%text> 848*cc02d7e2SAndroid Build Coastguard Worker % else: 849*cc02d7e2SAndroid Build Coastguard Worker VERSION <%text>${gRPC_CORE_VERSION}</%text> 850*cc02d7e2SAndroid Build Coastguard Worker SOVERSION <%text>${gRPC_CORE_SOVERSION}</%text> 851*cc02d7e2SAndroid Build Coastguard Worker % endif 852*cc02d7e2SAndroid Build Coastguard Worker ) 853*cc02d7e2SAndroid Build Coastguard Worker 854*cc02d7e2SAndroid Build Coastguard Worker if(WIN32 AND MSVC) 855*cc02d7e2SAndroid Build Coastguard Worker set_target_properties(${lib.name} PROPERTIES COMPILE_PDB_NAME "${lib.name}" 856*cc02d7e2SAndroid Build Coastguard Worker COMPILE_PDB_OUTPUT_DIRECTORY <%text>"${CMAKE_BINARY_DIR}</%text>" 857*cc02d7e2SAndroid Build Coastguard Worker )<% 858*cc02d7e2SAndroid Build Coastguard Worker dll_annotations = [] 859*cc02d7e2SAndroid Build Coastguard Worker if lib.name in gpr_libs: 860*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GPR_DLL_EXPORTS") 861*cc02d7e2SAndroid Build Coastguard Worker if lib.name in grpc_libs: 862*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPC_DLL_EXPORTS") 863*cc02d7e2SAndroid Build Coastguard Worker if lib.name in grpcxx_libs: 864*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPCXX_DLL_EXPORTS") 865*cc02d7e2SAndroid Build Coastguard Worker if set(gpr_libs) & set(lib.transitive_deps): 866*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GPR_DLL_IMPORTS") 867*cc02d7e2SAndroid Build Coastguard Worker if set(grpc_libs) & set(lib.transitive_deps): 868*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPC_DLL_IMPORTS") 869*cc02d7e2SAndroid Build Coastguard Worker if set(grpcxx_libs) & set(lib.transitive_deps): 870*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPCXX_DLL_IMPORTS") 871*cc02d7e2SAndroid Build Coastguard Worker %> 872*cc02d7e2SAndroid Build Coastguard Worker % if dll_annotations: 873*cc02d7e2SAndroid Build Coastguard Worker if(BUILD_SHARED_LIBS) 874*cc02d7e2SAndroid Build Coastguard Worker target_compile_definitions(${lib.name} 875*cc02d7e2SAndroid Build Coastguard Worker PRIVATE 876*cc02d7e2SAndroid Build Coastguard Worker % for definition in dll_annotations: 877*cc02d7e2SAndroid Build Coastguard Worker "${definition}" 878*cc02d7e2SAndroid Build Coastguard Worker % endfor 879*cc02d7e2SAndroid Build Coastguard Worker ) 880*cc02d7e2SAndroid Build Coastguard Worker endif() 881*cc02d7e2SAndroid Build Coastguard Worker % endif 882*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_INSTALL) 883*cc02d7e2SAndroid Build Coastguard Worker install(FILES <%text>${CMAKE_CURRENT_BINARY_DIR}/</%text>${lib.name}.pdb 884*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_LIBDIR}</%text> OPTIONAL 885*cc02d7e2SAndroid Build Coastguard Worker ) 886*cc02d7e2SAndroid Build Coastguard Worker endif() 887*cc02d7e2SAndroid Build Coastguard Worker endif() 888*cc02d7e2SAndroid Build Coastguard Worker 889*cc02d7e2SAndroid Build Coastguard Worker target_include_directories(${lib.name} 890*cc02d7e2SAndroid Build Coastguard Worker PUBLIC <%text>$<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include></%text> 891*cc02d7e2SAndroid Build Coastguard Worker PRIVATE 892*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text> 893*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}</%text> 894*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_RE2_INCLUDE_DIR}</%text> 895*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_SSL_INCLUDE_DIR}</%text> 896*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_GENERATED_DIR}</%text> 897*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_GRPC_GENERATED_DIR}</%text> 898*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_INCLUDE_DIR}</%text> 899*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_XXHASH_INCLUDE_DIR}</%text> 900*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_ZLIB_INCLUDE_DIR}</%text> 901*cc02d7e2SAndroid Build Coastguard Worker % if 'gtest' in lib.transitive_deps or lib.name == 'gtest': # TODO(jtattermusch): avoid special case based on target name 902*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googletest/include 903*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googletest 904*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googlemock/include 905*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googlemock 906*cc02d7e2SAndroid Build Coastguard Worker % endif 907*cc02d7e2SAndroid Build Coastguard Worker % if lib.language == 'c++': 908*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_PROTO_GENS_DIR}</%text> 909*cc02d7e2SAndroid Build Coastguard Worker % endif 910*cc02d7e2SAndroid Build Coastguard Worker ) 911*cc02d7e2SAndroid Build Coastguard Worker % if len(get_deps(lib)) > 0: 912*cc02d7e2SAndroid Build Coastguard Worker target_link_libraries(${lib.name} 913*cc02d7e2SAndroid Build Coastguard Worker % for dep in get_deps(lib): 914*cc02d7e2SAndroid Build Coastguard Worker ${dep} 915*cc02d7e2SAndroid Build Coastguard Worker % endfor 916*cc02d7e2SAndroid Build Coastguard Worker ) 917*cc02d7e2SAndroid Build Coastguard Worker % endif 918*cc02d7e2SAndroid Build Coastguard Worker % if lib.name in ["gpr"]: # TODO(jtattermusch): avoid special case based on target name 919*cc02d7e2SAndroid Build Coastguard Worker if(_gRPC_PLATFORM_ANDROID) 920*cc02d7e2SAndroid Build Coastguard Worker target_link_libraries(gpr 921*cc02d7e2SAndroid Build Coastguard Worker android 922*cc02d7e2SAndroid Build Coastguard Worker log 923*cc02d7e2SAndroid Build Coastguard Worker ) 924*cc02d7e2SAndroid Build Coastguard Worker endif() 925*cc02d7e2SAndroid Build Coastguard Worker % endif 926*cc02d7e2SAndroid Build Coastguard Worker % if lib.name in ["grpc", "grpc_cronet", "grpc_test_util", \ 927*cc02d7e2SAndroid Build Coastguard Worker "grpc_test_util_unsecure", "grpc_unsecure", \ 928*cc02d7e2SAndroid Build Coastguard Worker "grpc++_cronet"]: # TODO(jtattermusch): remove special cases based on target names 929*cc02d7e2SAndroid Build Coastguard Worker if(_gRPC_PLATFORM_IOS OR _gRPC_PLATFORM_MAC) 930*cc02d7e2SAndroid Build Coastguard Worker target_link_libraries(${lib.name} "-framework CoreFoundation") 931*cc02d7e2SAndroid Build Coastguard Worker endif() 932*cc02d7e2SAndroid Build Coastguard Worker %endif 933*cc02d7e2SAndroid Build Coastguard Worker 934*cc02d7e2SAndroid Build Coastguard Worker % if len(lib.get('public_headers', [])) > 0: 935*cc02d7e2SAndroid Build Coastguard Worker foreach(_hdr 936*cc02d7e2SAndroid Build Coastguard Worker % for hdr in lib.get('public_headers', []): 937*cc02d7e2SAndroid Build Coastguard Worker ${hdr} 938*cc02d7e2SAndroid Build Coastguard Worker % endfor 939*cc02d7e2SAndroid Build Coastguard Worker ) 940*cc02d7e2SAndroid Build Coastguard Worker string(REPLACE "include/" "" _path <%text>${_hdr}</%text>) 941*cc02d7e2SAndroid Build Coastguard Worker get_filename_component(_path <%text>${_path}</%text> PATH) 942*cc02d7e2SAndroid Build Coastguard Worker install(FILES <%text>${_hdr}</%text> 943*cc02d7e2SAndroid Build Coastguard Worker DESTINATION "<%text>${gRPC_INSTALL_INCLUDEDIR}/${_path}</%text>" 944*cc02d7e2SAndroid Build Coastguard Worker ) 945*cc02d7e2SAndroid Build Coastguard Worker endforeach() 946*cc02d7e2SAndroid Build Coastguard Worker % endif 947*cc02d7e2SAndroid Build Coastguard Worker % if any(proto_re.match(src) for src in lib.src): 948*cc02d7e2SAndroid Build Coastguard Worker endif() 949*cc02d7e2SAndroid Build Coastguard Worker % endif 950*cc02d7e2SAndroid Build Coastguard Worker </%def> 951*cc02d7e2SAndroid Build Coastguard Worker 952*cc02d7e2SAndroid Build Coastguard Worker <%def name="cc_binary(tgt)"> 953*cc02d7e2SAndroid Build Coastguard Worker add_executable(${tgt.name} 954*cc02d7e2SAndroid Build Coastguard Worker % for src in tgt.src: 955*cc02d7e2SAndroid Build Coastguard Worker % if not proto_re.match(src): 956*cc02d7e2SAndroid Build Coastguard Worker ${src} 957*cc02d7e2SAndroid Build Coastguard Worker % else: 958*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.pb.cc')} 959*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.grpc.pb.cc')} 960*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.pb.h')} 961*cc02d7e2SAndroid Build Coastguard Worker ${proto_replace_ext(src, '.grpc.pb.h')} 962*cc02d7e2SAndroid Build Coastguard Worker % endif 963*cc02d7e2SAndroid Build Coastguard Worker % endfor 964*cc02d7e2SAndroid Build Coastguard Worker )<% 965*cc02d7e2SAndroid Build Coastguard Worker dll_annotations = [] 966*cc02d7e2SAndroid Build Coastguard Worker if set(gpr_libs) & set(tgt.transitive_deps): 967*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GPR_DLL_IMPORTS") 968*cc02d7e2SAndroid Build Coastguard Worker if set(grpc_libs) & set(tgt.transitive_deps): 969*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPC_DLL_IMPORTS") 970*cc02d7e2SAndroid Build Coastguard Worker if set(grpcxx_libs) & set(tgt.transitive_deps): 971*cc02d7e2SAndroid Build Coastguard Worker dll_annotations.append("GRPCXX_DLL_IMPORTS") 972*cc02d7e2SAndroid Build Coastguard Worker %> 973*cc02d7e2SAndroid Build Coastguard Worker % if dll_annotations: 974*cc02d7e2SAndroid Build Coastguard Worker if(WIN32 AND MSVC) 975*cc02d7e2SAndroid Build Coastguard Worker if(BUILD_SHARED_LIBS) 976*cc02d7e2SAndroid Build Coastguard Worker target_compile_definitions(${tgt.name} 977*cc02d7e2SAndroid Build Coastguard Worker PRIVATE 978*cc02d7e2SAndroid Build Coastguard Worker % for definition in dll_annotations: 979*cc02d7e2SAndroid Build Coastguard Worker "${definition}" 980*cc02d7e2SAndroid Build Coastguard Worker % endfor 981*cc02d7e2SAndroid Build Coastguard Worker ) 982*cc02d7e2SAndroid Build Coastguard Worker endif() 983*cc02d7e2SAndroid Build Coastguard Worker endif() 984*cc02d7e2SAndroid Build Coastguard Worker % endif 985*cc02d7e2SAndroid Build Coastguard Worker target_compile_features(${tgt.name} PUBLIC cxx_std_14) 986*cc02d7e2SAndroid Build Coastguard Worker target_include_directories(${tgt.name} 987*cc02d7e2SAndroid Build Coastguard Worker PRIVATE 988*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text> 989*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include 990*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}</%text> 991*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_RE2_INCLUDE_DIR}</%text> 992*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_SSL_INCLUDE_DIR}</%text> 993*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_GENERATED_DIR}</%text> 994*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_GRPC_GENERATED_DIR}</%text> 995*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_UPB_INCLUDE_DIR}</%text> 996*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_XXHASH_INCLUDE_DIR}</%text> 997*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_ZLIB_INCLUDE_DIR}</%text> 998*cc02d7e2SAndroid Build Coastguard Worker % if 'gtest' in tgt.transitive_deps: 999*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googletest/include 1000*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googletest 1001*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googlemock/include 1002*cc02d7e2SAndroid Build Coastguard Worker third_party/googletest/googlemock 1003*cc02d7e2SAndroid Build Coastguard Worker % endif 1004*cc02d7e2SAndroid Build Coastguard Worker % if tgt.language == 'c++': 1005*cc02d7e2SAndroid Build Coastguard Worker <%text>${_gRPC_PROTO_GENS_DIR}</%text> 1006*cc02d7e2SAndroid Build Coastguard Worker % endif 1007*cc02d7e2SAndroid Build Coastguard Worker ) 1008*cc02d7e2SAndroid Build Coastguard Worker 1009*cc02d7e2SAndroid Build Coastguard Worker % if len(get_deps(tgt)) > 0: 1010*cc02d7e2SAndroid Build Coastguard Worker target_link_libraries(${tgt.name} 1011*cc02d7e2SAndroid Build Coastguard Worker % for dep in get_deps(tgt): 1012*cc02d7e2SAndroid Build Coastguard Worker ${dep} 1013*cc02d7e2SAndroid Build Coastguard Worker % endfor 1014*cc02d7e2SAndroid Build Coastguard Worker ) 1015*cc02d7e2SAndroid Build Coastguard Worker 1016*cc02d7e2SAndroid Build Coastguard Worker % endif 1017*cc02d7e2SAndroid Build Coastguard Worker </%def> 1018*cc02d7e2SAndroid Build Coastguard Worker 1019*cc02d7e2SAndroid Build Coastguard Worker <%def name="cc_install(tgt)"> 1020*cc02d7e2SAndroid Build Coastguard Worker % if tgt.name == 'grpcpp_channelz': 1021*cc02d7e2SAndroid Build Coastguard Worker # grpcpp_channelz doesn't build with protobuf-lite, so no install required 1022*cc02d7e2SAndroid Build Coastguard Worker # See https://github.com/grpc/grpc/issues/22826 1023*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_INSTALL AND NOT gRPC_USE_PROTO_LITE) 1024*cc02d7e2SAndroid Build Coastguard Worker % else: 1025*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_INSTALL) 1026*cc02d7e2SAndroid Build Coastguard Worker % endif 1027*cc02d7e2SAndroid Build Coastguard Worker % if tgt.build == 'protoc' and 'grpc_plugin_support' in tgt.get('deps', []): 1028*cc02d7e2SAndroid Build Coastguard Worker install(TARGETS ${tgt.name} EXPORT gRPCPluginTargets 1029*cc02d7e2SAndroid Build Coastguard Worker % else: 1030*cc02d7e2SAndroid Build Coastguard Worker install(TARGETS ${tgt.name} EXPORT gRPCTargets 1031*cc02d7e2SAndroid Build Coastguard Worker % endif 1032*cc02d7e2SAndroid Build Coastguard Worker RUNTIME DESTINATION <%text>${gRPC_INSTALL_BINDIR}</%text> 1033*cc02d7e2SAndroid Build Coastguard Worker BUNDLE DESTINATION <%text>${gRPC_INSTALL_BINDIR}</%text> 1034*cc02d7e2SAndroid Build Coastguard Worker LIBRARY DESTINATION <%text>${gRPC_INSTALL_LIBDIR}</%text> 1035*cc02d7e2SAndroid Build Coastguard Worker ARCHIVE DESTINATION <%text>${gRPC_INSTALL_LIBDIR}</%text> 1036*cc02d7e2SAndroid Build Coastguard Worker ) 1037*cc02d7e2SAndroid Build Coastguard Worker endif() 1038*cc02d7e2SAndroid Build Coastguard Worker </%def> 1039*cc02d7e2SAndroid Build Coastguard Worker 1040*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_INSTALL) 1041*cc02d7e2SAndroid Build Coastguard Worker install(EXPORT gRPCTargets 1042*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_CMAKEDIR}</%text> 1043*cc02d7e2SAndroid Build Coastguard Worker NAMESPACE gRPC:: 1044*cc02d7e2SAndroid Build Coastguard Worker ) 1045*cc02d7e2SAndroid Build Coastguard Worker if(gRPC_BUILD_CODEGEN) 1046*cc02d7e2SAndroid Build Coastguard Worker install(EXPORT gRPCPluginTargets 1047*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_CMAKEDIR}</%text> 1048*cc02d7e2SAndroid Build Coastguard Worker NAMESPACE gRPC:: 1049*cc02d7e2SAndroid Build Coastguard Worker ) 1050*cc02d7e2SAndroid Build Coastguard Worker endif() 1051*cc02d7e2SAndroid Build Coastguard Worker endif() 1052*cc02d7e2SAndroid Build Coastguard Worker 1053*cc02d7e2SAndroid Build Coastguard Worker include(CMakePackageConfigHelpers) 1054*cc02d7e2SAndroid Build Coastguard Worker 1055*cc02d7e2SAndroid Build Coastguard Worker configure_file(cmake/gRPCConfig.cmake.in 1056*cc02d7e2SAndroid Build Coastguard Worker gRPCConfig.cmake @ONLY) 1057*cc02d7e2SAndroid Build Coastguard Worker write_basic_package_version_file(<%text>${CMAKE_CURRENT_BINARY_DIR}/</%text>gRPCConfigVersion.cmake 1058*cc02d7e2SAndroid Build Coastguard Worker VERSION <%text>${gRPC_CPP_VERSION}</%text> 1059*cc02d7e2SAndroid Build Coastguard Worker COMPATIBILITY AnyNewerVersion) 1060*cc02d7e2SAndroid Build Coastguard Worker install(FILES 1061*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_BINARY_DIR}/</%text>gRPCConfig.cmake 1062*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_BINARY_DIR}/</%text>gRPCConfigVersion.cmake 1063*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_CMAKEDIR}</%text> 1064*cc02d7e2SAndroid Build Coastguard Worker ) 1065*cc02d7e2SAndroid Build Coastguard Worker install(FILES 1066*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/cmake/modules/Findc-ares.cmake 1067*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/cmake/modules/Findre2.cmake 1068*cc02d7e2SAndroid Build Coastguard Worker <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/cmake/modules/Findsystemd.cmake 1069*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_CMAKEDIR}</%text>/modules 1070*cc02d7e2SAndroid Build Coastguard Worker ) 1071*cc02d7e2SAndroid Build Coastguard Worker 1072*cc02d7e2SAndroid Build Coastguard Worker install(FILES <%text>${CMAKE_CURRENT_SOURCE_DIR}/etc/roots.pem</%text> 1073*cc02d7e2SAndroid Build Coastguard Worker DESTINATION <%text>${gRPC_INSTALL_SHAREDIR}</%text>) 1074*cc02d7e2SAndroid Build Coastguard Worker 1075*cc02d7e2SAndroid Build Coastguard Worker # Function to generate pkg-config files. 1076*cc02d7e2SAndroid Build Coastguard Worker function(generate_pkgconfig name description version requires requires_private 1077*cc02d7e2SAndroid Build Coastguard Worker libs libs_private output_filename) 1078*cc02d7e2SAndroid Build Coastguard Worker set(PC_NAME "<%text>${name}</%text>") 1079*cc02d7e2SAndroid Build Coastguard Worker set(PC_DESCRIPTION "<%text>${description}</%text>") 1080*cc02d7e2SAndroid Build Coastguard Worker set(PC_VERSION "<%text>${version}</%text>") 1081*cc02d7e2SAndroid Build Coastguard Worker set(PC_REQUIRES "<%text>${requires}</%text>") 1082*cc02d7e2SAndroid Build Coastguard Worker set(PC_REQUIRES_PRIVATE "<%text>${requires_private}</%text>") 1083*cc02d7e2SAndroid Build Coastguard Worker set(PC_LIB "<%text>${libs}</%text>") 1084*cc02d7e2SAndroid Build Coastguard Worker set(PC_LIBS_PRIVATE "<%text>${libs_private}</%text>") 1085*cc02d7e2SAndroid Build Coastguard Worker set(output_filepath "<%text>${grpc_BINARY_DIR}/libs/opt/pkgconfig/${output_filename}</%text>") 1086*cc02d7e2SAndroid Build Coastguard Worker configure_file( 1087*cc02d7e2SAndroid Build Coastguard Worker "<%text>${grpc_SOURCE_DIR}/cmake/pkg-config-template.pc.in</%text>" 1088*cc02d7e2SAndroid Build Coastguard Worker "<%text>${output_filepath}</%text>" 1089*cc02d7e2SAndroid Build Coastguard Worker @ONLY) 1090*cc02d7e2SAndroid Build Coastguard Worker install(FILES "<%text>${output_filepath}</%text>" 1091*cc02d7e2SAndroid Build Coastguard Worker DESTINATION "<%text>${gRPC_INSTALL_LIBDIR}/pkgconfig</%text>") 1092*cc02d7e2SAndroid Build Coastguard Worker endfunction() 1093*cc02d7e2SAndroid Build Coastguard Worker 1094*cc02d7e2SAndroid Build Coastguard Worker # gpr .pc file 1095*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1096*cc02d7e2SAndroid Build Coastguard Worker "gpr" 1097*cc02d7e2SAndroid Build Coastguard Worker "gRPC platform support library" 1098*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CORE_VERSION}</%text>" 1099*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("gpr"))}" 1100*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("gpr"))}" 1101*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("gpr"))}" 1102*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("gpr"))}" 1103*cc02d7e2SAndroid Build Coastguard Worker "gpr.pc") 1104*cc02d7e2SAndroid Build Coastguard Worker 1105*cc02d7e2SAndroid Build Coastguard Worker # grpc .pc file 1106*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1107*cc02d7e2SAndroid Build Coastguard Worker "gRPC" 1108*cc02d7e2SAndroid Build Coastguard Worker "high performance general RPC framework" 1109*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CORE_VERSION}</%text>" 1110*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("grpc"))}" 1111*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("grpc"))}" 1112*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("grpc"))}" 1113*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("grpc"))}" 1114*cc02d7e2SAndroid Build Coastguard Worker "grpc.pc") 1115*cc02d7e2SAndroid Build Coastguard Worker 1116*cc02d7e2SAndroid Build Coastguard Worker # grpc_unsecure .pc file 1117*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1118*cc02d7e2SAndroid Build Coastguard Worker "gRPC unsecure" 1119*cc02d7e2SAndroid Build Coastguard Worker "high performance general RPC framework without SSL" 1120*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CORE_VERSION}</%text>" 1121*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("grpc_unsecure"))}" 1122*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("grpc_unsecure"))}" 1123*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("grpc_unsecure"))}" 1124*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("grpc_unsecure"))}" 1125*cc02d7e2SAndroid Build Coastguard Worker "grpc_unsecure.pc") 1126*cc02d7e2SAndroid Build Coastguard Worker 1127*cc02d7e2SAndroid Build Coastguard Worker # grpc++ .pc file 1128*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1129*cc02d7e2SAndroid Build Coastguard Worker "gRPC++" 1130*cc02d7e2SAndroid Build Coastguard Worker "C++ wrapper for gRPC" 1131*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CPP_VERSION}</%text>" 1132*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("grpc++"))}" 1133*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("grpc++"))}" 1134*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("grpc++"))}" 1135*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("grpc++"))}" 1136*cc02d7e2SAndroid Build Coastguard Worker "grpc++.pc") 1137*cc02d7e2SAndroid Build Coastguard Worker 1138*cc02d7e2SAndroid Build Coastguard Worker # grpc++_unsecure .pc file 1139*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1140*cc02d7e2SAndroid Build Coastguard Worker "gRPC++ unsecure" 1141*cc02d7e2SAndroid Build Coastguard Worker "C++ wrapper for gRPC without SSL" 1142*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CPP_VERSION}</%text>" 1143*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("grpc++_unsecure"))}" 1144*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("grpc++_unsecure"))}" 1145*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("grpc++_unsecure"))}" 1146*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("grpc++_unsecure"))}" 1147*cc02d7e2SAndroid Build Coastguard Worker "grpc++_unsecure.pc") 1148*cc02d7e2SAndroid Build Coastguard Worker 1149*cc02d7e2SAndroid Build Coastguard Worker # grpcpp_otel_plugin .pc file 1150*cc02d7e2SAndroid Build Coastguard Worker generate_pkgconfig( 1151*cc02d7e2SAndroid Build Coastguard Worker "gRPC++ OpenTelemetry Plugin" 1152*cc02d7e2SAndroid Build Coastguard Worker "OpenTelemetry Plugin for gRPC C++" 1153*cc02d7e2SAndroid Build Coastguard Worker "<%text>${gRPC_CPP_VERSION}</%text>" 1154*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires("grpcpp_otel_plugin"))}" 1155*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_requires_private("grpcpp_otel_plugin"))}" 1156*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs("grpcpp_otel_plugin"))}" 1157*cc02d7e2SAndroid Build Coastguard Worker "${" ".join(get_pkgconfig_libs_private("grpcpp_otel_plugin"))}" 1158*cc02d7e2SAndroid Build Coastguard Worker "grpcpp_otel_plugin.pc") 1159