blob: a326f36fe939068a3f025b05aaf535656ca1ed88 [file] [log] [blame]
Tamas Berghammerd798a7d2016-06-21 13:58:18 +01001%YAML 1.2
2--- |
3 # GRPC global cmake file
4 # This currently builds C and C++ code.
5 # This file has been automatically generated from a template file.
6 # Please look at the templates directory instead.
7 # This file can be regenerated from the template by running
8 # tools/buildgen/generate_projects.sh
Nicolas "Pixel" Nobleb360c8a2016-07-02 00:54:28 +02009 #
10 # Additionally, this is currently very experimental, and unsupported.
11 # Further work will happen on that file.
12 #
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010013 # Copyright 2015, Google Inc.
14 # All rights reserved.
15 #
16 # Redistribution and use in source and binary forms, with or without
17 # modification, are permitted provided that the following conditions are
18 # met:
19 #
20 # * Redistributions of source code must retain the above copyright
21 # notice, this list of conditions and the following disclaimer.
22 # * Redistributions in binary form must reproduce the above
23 # copyright notice, this list of conditions and the following disclaimer
24 # in the documentation and/or other materials provided with the
25 # distribution.
26 # * Neither the name of Google Inc. nor the names of its
27 # contributors may be used to endorse or promote products derived from
28 # this software without specific prior written permission.
29 #
30 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41
42 <%!
Jan Tattermuschcc641682017-01-17 11:59:31 +010043
44 import re
45
46 proto_re = re.compile('(.*)\\.proto')
47
48 def proto_replace_ext(filename, ext):
49 m = proto_re.match(filename)
50 if not m:
51 return filename
52 return '${_gRPC_PROTO_GENS_DIR}/' + m.group(1) + ext
53
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010054 def get_deps(target_dict):
55 deps = []
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030056 if target_dict.get('baselib', False):
57 deps.append("${_gRPC_BASELIB_LIBRARIES}")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010058 if target_dict.get('build', None) in ['protoc']:
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030059 deps.append("${_gRPC_PROTOBUF_PROTOC_LIBRARIES}")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010060 if target_dict.get('secure', False):
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030061 deps.append("${_gRPC_SSL_LIBRARIES}")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010062 if target_dict['name'] in ['grpc++', 'grpc++_unsecure', 'grpc++_codegen_lib']:
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030063 deps.append("${_gRPC_PROTOBUF_LIBRARIES}")
Tamas Berghammerdf6a44c2016-06-22 13:38:55 +010064 elif target_dict['name'] in ['grpc']:
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030065 deps.append("${_gRPC_ZLIB_LIBRARIES}")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010066 for d in target_dict.get('deps', []):
67 deps.append(d)
Jan Tattermusch0a1701f2017-01-17 19:44:08 +010068 if target_dict.build == 'test' and target_dict.language == 'c++':
69 deps.append("${_gRPC_GFLAGS_LIBRARIES}")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010070 return deps
71 %>
72
73 cmake_minimum_required(VERSION 2.8)
74
Tamas Berghammerdf6a44c2016-06-22 13:38:55 +010075 set(PACKAGE_NAME "grpc")
Craig Tiller83c47892016-09-13 11:14:43 -070076 set(PACKAGE_VERSION "${settings.cpp_version}")
Tamas Berghammerdf6a44c2016-06-22 13:38:55 +010077 set(PACKAGE_STRING "<%text>${PACKAGE_NAME} ${PACKAGE_VERSION}</%text>")
78 set(PACKAGE_TARNAME "<%text>${PACKAGE_NAME}-${PACKAGE_VERSION}</%text>")
79 set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
80 project(<%text>${PACKAGE_NAME}</%text> C CXX)
Jan Tattermusch0a1701f2017-01-17 19:44:08 +010081
82 # Options
83 option(gRPC_BUILD_TESTS "Build tests" OFF)
Tamas Berghammerdf6a44c2016-06-22 13:38:55 +010084
Arkadiy Shapkin40beb372016-08-17 14:42:36 +030085 if (NOT MSVC)
86 set(gRPC_INSTALL ON CACHE BOOL "Generate installation target")
87 else()
88 set(gRPC_INSTALL OFF CACHE BOOL "Generate installation target")
89 endif()
90
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030091 set(gRPC_ZLIB_PROVIDER "module" CACHE STRING "Provider of zlib library")
92 set_property(CACHE gRPC_ZLIB_PROVIDER PROPERTY STRINGS "module" "package")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +010093
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030094 set(gRPC_SSL_PROVIDER "module" CACHE STRING "Provider of ssl library")
95 set_property(CACHE gRPC_SSL_PROVIDER PROPERTY STRINGS "module" "package")
Tamas Berghammera72712e2016-07-06 10:30:25 +010096
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +030097 set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "Provider of protobuf library")
98 set_property(CACHE gRPC_PROTOBUF_PROVIDER PROPERTY STRINGS "module" "package")
Jan Tattermusch0a1701f2017-01-17 19:44:08 +010099
100 set(gRPC_GFLAGS_PROVIDER "module" CACHE STRING "Provider of gflags library")
101 set_property(CACHE gRPC_GFLAGS_PROVIDER PROPERTY STRINGS "module" "package")
102
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300103 set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library")
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100104
Arkadiy Shapkin40beb372016-08-17 14:42:36 +0300105 if (MSVC)
Jan Tattermusch3aab96f2017-01-11 16:12:46 +0100106 add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS)
107 # needed to compile boringssl
108 add_definitions(/wd4464 /wd4623 /wd4668 /wd4701 /wd4702 /wd4777 /wd5027)
109 # needed to compile protobuf
110 add_definitions(/wd4065 /wd4506)
111 # TODO(jtattermusch): revisit C4267 occurrences throughout the code
112 add_definitions(/wd4267)
Arkadiy Shapkin40beb372016-08-17 14:42:36 +0300113 endif()
114
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300115 if (gRPC_USE_PROTO_LITE)
116 set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf-lite")
Tamas Berghammer23911562016-07-27 15:24:05 +0100117 add_definitions("-DGRPC_USE_PROTO_LITE")
118 else()
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300119 set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf")
120 endif()
121
122 if("<%text>${gRPC_ZLIB_PROVIDER}</%text>" STREQUAL "module")
123 if(NOT ZLIB_ROOT_DIR)
124 set(ZLIB_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/zlib)
125 endif()
126 set(ZLIB_INCLUDE_DIR "<%text>${ZLIB_ROOT_DIR}</%text>")
127 if(EXISTS "<%text>${ZLIB_ROOT_DIR}</%text>/CMakeLists.txt")
128 add_subdirectory(<%text>${ZLIB_ROOT_DIR}</%text> third_party/zlib)
129 if(TARGET zlibstatic)
130 set(_gRPC_ZLIB_LIBRARIES zlibstatic)
131 endif()
132 else()
133 message(WARNING "gRPC_ZLIB_PROVIDER is \"module\" but ZLIB_ROOT_DIR is wrong")
134 endif()
135 elseif("<%text>${gRPC_ZLIB_PROVIDER}</%text>" STREQUAL "package")
136 find_package(ZLIB)
137 if(TARGET ZLIB::ZLIB)
138 set(_gRPC_ZLIB_LIBRARIES ZLIB::ZLIB)
139 endif()
Konstantin Podsvirovdd331482016-07-28 00:00:25 +0300140 set(_gRPC_FIND_ZLIB "if(NOT ZLIB_FOUND)\n find_package(ZLIB)\nendif()")
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300141 endif()
142
143 if("<%text>${gRPC_PROTOBUF_PROVIDER}</%text>" STREQUAL "module")
144 # Building the protobuf tests require gmock what is not part of a standard protobuf checkout.
145 # Disable them unless they are explicitly requested from the cmake command line (when we assume
146 # gmock is downloaded to the right location inside protobuf).
147 if(NOT protobuf_BUILD_TESTS)
148 set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
149 endif()
150 if(NOT PROTOBUF_ROOT_DIR)
151 set(PROTOBUF_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/protobuf)
152 endif()
153 if(EXISTS "<%text>${PROTOBUF_ROOT_DIR}</%text>/cmake/CMakeLists.txt")
Arkadiy Shapkin40beb372016-08-17 14:42:36 +0300154 set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries")
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300155 add_subdirectory(<%text>${PROTOBUF_ROOT_DIR}</%text>/cmake third_party/protobuf)
156 if(TARGET <%text>${_gRPC_PROTOBUF_LIBRARY_NAME}</%text>)
157 set(_gRPC_PROTOBUF_LIBRARIES <%text>${_gRPC_PROTOBUF_LIBRARY_NAME}</%text>)
158 endif()
159 if(TARGET libprotoc)
160 set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc)
161 endif()
Jan Tattermuschcc641682017-01-17 11:59:31 +0100162 if(TARGET protoc)
163 set(_gRPC_PROTOBUF_PROTOC protoc)
164 endif()
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300165 else()
166 message(WARNING "gRPC_PROTOBUF_PROVIDER is \"module\" but PROTOBUF_ROOT_DIR is wrong")
167 endif()
168 elseif("<%text>${gRPC_PROTOBUF_PROVIDER}</%text>" STREQUAL "package")
169 find_package(protobuf CONFIG)
170 if(protobuf_FOUND)
171 if(TARGET protobuf::<%text>${_gRPC_PROTOBUF_LIBRARY_NAME}</%text>)
172 set(_gRPC_PROTOBUF_LIBRARIES protobuf::<%text>${_gRPC_PROTOBUF_LIBRARY_NAME}</%text>)
173 endif()
174 if(TARGET protobuf::libprotoc)
175 set(_gRPC_PROTOBUF_PROTOC_LIBRARIES protobuf::libprotoc)
176 endif()
Jan Tattermuschcc641682017-01-17 11:59:31 +0100177 if(TARGET protobuf::protoc)
178 set(_gRPC_PROTOBUF_PROTOC protobuf::protoc)
179 endif()
Konstantin Podsvirovdd331482016-07-28 00:00:25 +0300180 set(_gRPC_FIND_PROTOBUF "if(NOT protobuf_FOUND)\n find_package(protobuf CONFIG)\nendif()")
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300181 else()
182 find_package(Protobuf MODULE)
Konstantin Podsvirovdd331482016-07-28 00:00:25 +0300183 set(_gRPC_FIND_PROTOBUF "if(NOT Protobuf_FOUND)\n find_package(Protobuf)\nendif()")
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300184 endif()
185 endif()
186
187 if("<%text>${gRPC_SSL_PROVIDER}</%text>" STREQUAL "module")
188 if(NOT BORINGSSL_ROOT_DIR)
189 set(BORINGSSL_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/boringssl)
190 endif()
191 if(EXISTS "<%text>${BORINGSSL_ROOT_DIR}</%text>/CMakeLists.txt")
192 add_subdirectory(<%text>${BORINGSSL_ROOT_DIR}</%text> third_party/boringssl)
193 if(TARGET ssl)
194 set(_gRPC_SSL_LIBRARIES ssl)
195 endif()
196 else()
197 message(WARNING "gRPC_SSL_PROVIDER is \"module\" but BORINGSSL_ROOT_DIR is wrong")
198 endif()
199 elseif("<%text>${gRPC_SSL_PROVIDER}</%text>" STREQUAL "package")
200 find_package(OpenSSL)
201 if(TARGET OpenSSL::SSL)
202 set(_gRPC_SSL_LIBRARIES OpenSSL::SSL)
203 endif()
Konstantin Podsvirovdd331482016-07-28 00:00:25 +0300204 set(_gRPC_FIND_SSL "if(NOT OpenSSL_FOUND)\n find_package(OpenSSL)\nendif()")
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300205 endif()
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100206
207 if("<%text>${gRPC_GFLAGS_PROVIDER}</%text>" STREQUAL "module")
208 if(NOT GFLAGS_ROOT_DIR)
209 set(GFLAGS_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/gflags)
210 endif()
211 if(EXISTS "<%text>${GFLAGS_ROOT_DIR}</%text>/CMakeLists.txt")
212 add_subdirectory(<%text>${GFLAGS_ROOT_DIR}</%text> third_party/gflags)
Jan Tattermusch87a5d652017-01-18 16:22:40 +0100213 if(TARGET gflags_static)
214 set(_gRPC_GFLAGS_LIBRARIES gflags_static)
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100215 endif()
216 else()
217 message(WARNING "gRPC_GFLAGS_PROVIDER is \"module\" but GFLAGS_ROOT_DIR is wrong")
218 endif()
219 elseif("<%text>${gRPC_GFLAGS_PROVIDER}</%text>" STREQUAL "package")
220 find_package(gflags)
221 if(TARGET gflags::gflags)
222 set(_gRPC_GFLAGS_LIBRARIES gflags::gflags)
223 endif()
224 set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n find_package(gflags)\nendif()")
225 endif()
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300226
227 if(NOT MSVC)
228 set(CMAKE_C_FLAGS "<%text>${CMAKE_C_FLAGS}</%text> -std=c11")
229 set(CMAKE_CXX_FLAGS "<%text>${CMAKE_CXX_FLAGS}</%text> -std=c++11")
230 endif()
231
232 if(WIN32 AND MSVC)
233 set(_gRPC_BASELIB_LIBRARIES wsock32 ws2_32)
Tamas Berghammer23911562016-07-27 15:24:05 +0100234 endif()
235
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300236 include(GNUInstallDirs)
237 if(NOT DEFINED CMAKE_INSTALL_CMAKEDIR)
238 set(CMAKE_INSTALL_CMAKEDIR "<%text>${CMAKE_INSTALL_LIBDIR}</%text>/cmake/gRPC")
239 endif()
Jan Tattermuschcc641682017-01-17 11:59:31 +0100240
241 # Create directory for generated .proto files
242 set(_gRPC_PROTO_GENS_DIR <%text>${CMAKE_BINARY_DIR}/gens</%text>)
243 file(MAKE_DIRECTORY <%text>${_gRPC_PROTO_GENS_DIR}</%text>)
244
245 # protobuf_generate_grpc_cpp
246 # --------------------------
247 #
248 # Add custom commands to process ``.proto`` files to C++ using protoc and
249 # GRPC plugin::
250 #
251 # protobuf_generate_grpc_cpp [<ARGN>...]
252 #
253 # ``ARGN``
254 # ``.proto`` files
255 #
256 function(protobuf_generate_grpc_cpp)
257 if(NOT ARGN)
258 message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files")
259 return()
260 endif()
261
262 set(_protobuf_include_path -I .)
263 foreach(FIL <%text>${ARGN}</%text>)
264 get_filename_component(ABS_FIL <%text>${FIL}</%text> ABSOLUTE)
265 get_filename_component(FIL_WE <%text>${FIL}</%text> NAME_WE)
266 file(RELATIVE_PATH REL_FIL <%text>${CMAKE_SOURCE_DIR}</%text> <%text>${ABS_FIL}</%text>)
267 get_filename_component(REL_DIR <%text>${REL_FIL}</%text> DIRECTORY)
268 set(RELFIL_WE "<%text>${REL_DIR}/${FIL_WE}</%text>")
269
270 add_custom_command(
271 OUTPUT <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc"</%text>
272 <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h"</%text>
273 <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc"</%text>
274 <%text>"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h"</%text>
275 COMMAND <%text>${_gRPC_PROTOBUF_PROTOC}</%text>
276 ARGS --grpc_out=<%text>${_gRPC_PROTO_GENS_DIR}</%text>
277 --cpp_out=<%text>${_gRPC_PROTO_GENS_DIR}</%text>
278 --plugin=protoc-gen-grpc=$<TARGET_FILE:grpc_cpp_plugin>
279 <%text>${_protobuf_include_path}</%text>
280 <%text>${REL_FIL}</%text>
281 DEPENDS <%text>${ABS_FIL}</%text> <%text>${_gRPC_PROTOBUF_PROTOC}</%text> grpc_cpp_plugin
282 WORKING_DIRECTORY <%text>${CMAKE_SOURCE_DIR}</%text>
283 COMMENT "Running gRPC C++ protocol buffer compiler on <%text>${FIL}</%text>"
284 VERBATIM)
285
286 <%text>set_source_files_properties("${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.cc" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.grpc.pb.h" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc" "${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h" PROPERTIES GENERATED TRUE)</%text>
287 endforeach()
288 endfunction()
289
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100290 % for lib in libs:
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100291 % if lib.build in ["all", "protoc", "tool", "test", "private"] and lib.language in ['c', 'c++']:
292 % if not lib.get('build_system', []) or 'cmake' in lib.get('build_system', []):
293 % if lib.build in ["test", "private"]:
294 if (gRPC_BUILD_TESTS)
295 ${cc_library(lib)}
296 endif (gRPC_BUILD_TESTS)
297 % else:
Jan Tattermuschcc641682017-01-17 11:59:31 +0100298 ${cc_library(lib)}
299 ${cc_install(lib)}
Jan Tattermuschaf7b87f2017-01-12 09:41:03 +0100300 % endif
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100301 % endif
302 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100303 % endfor
304
305 % for tgt in targets:
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100306 % if tgt.build in ["all", "protoc", "tool", "test", "private"] and tgt.language in ['c', 'c++']:
307 % if tgt.build in ["test", "private"]:
308 if (gRPC_BUILD_TESTS)
309 ${cc_binary(tgt)}
310 endif (gRPC_BUILD_TESTS)
311 % else:
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100312 ${cc_binary(tgt)}
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300313 ${cc_install(tgt)}
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100314 % endif
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100315 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100316 % endfor
317
318 <%def name="cc_library(lib)">
319 add_library(${lib.name}
320 % for src in lib.src:
Jan Tattermuschcc641682017-01-17 11:59:31 +0100321 % if not proto_re.match(src):
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100322 ${src}
Jan Tattermuschcc641682017-01-17 11:59:31 +0100323 % else:
324 ${proto_replace_ext(src, '.pb.cc')}
325 ${proto_replace_ext(src, '.grpc.pb.cc')}
326 ${proto_replace_ext(src, '.pb.h')}
327 ${proto_replace_ext(src, '.grpc.pb.h')}
328 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100329 % endfor
330 )
Jan Tattermuschcc641682017-01-17 11:59:31 +0100331
332 % for src in lib.src:
333 % if proto_re.match(src):
334 protobuf_generate_grpc_cpp(
335 ${src}
336 )
337 % endif
338 % endfor
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100339
340 target_include_directories(${lib.name}
341 PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>
342 PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include
343 PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include
344 PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
Konstantin Podsvirov5baf7252016-07-27 16:25:37 +0300345 PRIVATE <%text>${ZLIB_INCLUDE_DIR}</%text>
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100346 PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100347 PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
348 % if lib.build in ['test', 'private'] and lib.language == 'c++':
349 PRIVATE third_party/googletest/include
350 PRIVATE third_party/googletest
351 % endif
Jan Tattermuschcc641682017-01-17 11:59:31 +0100352 % if any(proto_re.match(src) for src in lib.src):
353 PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text>
354 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100355 )
356
357 % if len(get_deps(lib)) > 0:
358 target_link_libraries(${lib.name}
359 % for dep in get_deps(lib):
360 ${dep}
361 % endfor
362 )
363 % endif
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300364
365 % if len(lib.get('public_headers', [])) > 0:
366 foreach(_hdr
367 % for hdr in lib.get('public_headers', []):
368 ${hdr}
369 % endfor
370 )
371 string(REPLACE "include/" "" _path <%text>${_hdr}</%text>)
372 get_filename_component(_path <%text>${_path}</%text> PATH)
373 install(FILES <%text>${_hdr}</%text>
374 DESTINATION "<%text>${CMAKE_INSTALL_INCLUDEDIR}/${_path}</%text>"
375 )
376 endforeach()
377 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100378 </%def>
379
380 <%def name="cc_binary(tgt)">
381 add_executable(${tgt.name}
382 % for src in tgt.src:
383 ${src}
384 % endfor
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100385 % if tgt.build == 'test' and tgt.language == 'c++':
386 third_party/googletest/src/gtest-all.cc
387 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100388 )
389
390 target_include_directories(${tgt.name}
391 PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>
392 PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include
393 PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include
394 PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
395 PRIVATE <%text>${ZLIB_ROOT_DIR}</%text>
396 PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
Jan Tattermusch0a1701f2017-01-17 19:44:08 +0100397 PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
398 % if tgt.build in ['test', 'private'] and tgt.language == 'c++':
399 PRIVATE third_party/googletest/include
400 PRIVATE third_party/googletest
401 % endif
Tamas Berghammerd798a7d2016-06-21 13:58:18 +0100402 )
403
404 % if len(get_deps(tgt)) > 0:
405 target_link_libraries(${tgt.name}
406 % for dep in get_deps(tgt):
407 ${dep}
408 % endfor
409 )
410 % endif
411 </%def>
412
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300413 <%def name="cc_install(tgt)">
Arkadiy Shapkin40beb372016-08-17 14:42:36 +0300414 if (gRPC_INSTALL)
415 install(TARGETS ${tgt.name} EXPORT gRPCTargets
416 RUNTIME DESTINATION <%text>${CMAKE_INSTALL_BINDIR}</%text>
417 LIBRARY DESTINATION <%text>${CMAKE_INSTALL_LIBDIR}</%text>
418 ARCHIVE DESTINATION <%text>${CMAKE_INSTALL_LIBDIR}</%text>
419 )
420 endif()
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300421 </%def>
422
Arkadiy Shapkin40beb372016-08-17 14:42:36 +0300423 if (gRPC_INSTALL)
424 install(EXPORT gRPCTargets
425 DESTINATION <%text>${CMAKE_INSTALL_CMAKEDIR}</%text>
426 NAMESPACE gRPC::
427 )
428 endif()
Konstantin Podsvirovd2b88302016-07-27 23:43:47 +0300429
430 foreach(_config gRPCConfig gRPCConfigVersion)
431 configure_file(tools/cmake/<%text>${_config}</%text>.cmake.in
432 <%text>${_config}</%text>.cmake @ONLY)
433 install(FILES <%text>${CMAKE_CURRENT_BINARY_DIR}/${_config}</%text>.cmake
434 DESTINATION <%text>${CMAKE_INSTALL_CMAKEDIR}</%text>
435 )
436 endforeach()