blob: 7bc186265d372fe8f44394a189f0fc913c153332 [file] [log] [blame]
Jan Tattermusch4d5c3102017-06-07 10:23:56 +02001# Copyright 2016 gRPC authors.
Craig Tiller423ecff2016-10-20 09:45:09 -07002#
Jan Tattermusch4d5c3102017-06-07 10:23:56 +02003# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
Craig Tiller423ecff2016-10-20 09:45:09 -07006#
Jan Tattermusch4d5c3102017-06-07 10:23:56 +02007# http://www.apache.org/licenses/LICENSE-2.0
Craig Tiller423ecff2016-10-20 09:45:09 -07008#
Jan Tattermusch4d5c3102017-06-07 10:23:56 +02009# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
Craig Tiller423ecff2016-10-20 09:45:09 -070014
Nicolas "Pixel" Noblee8dbd8a2016-10-20 18:54:36 +020015#
16# This is for the gRPC build system. This isn't intended to be used outsite of
17# the BUILD file for gRPC. It contains the mapping for the template system we
18# use to generate other platform's build system files.
19#
Craig Tillerf66de6e2017-05-15 08:29:10 -070020# Please consider that there should be a high bar for additions and changes to
21# this file.
22# Each rule listed must be re-written for Google's internal build system, and
23# each change must be ported from one to the other.
24#
Nicolas "Pixel" Noblee8dbd8a2016-10-20 18:54:36 +020025
Craig Tiller360712f2017-10-18 10:05:21 -070026# The set of pollers to test against if a test exercises polling
27POLLERS = ['epollex', 'epollsig', 'epoll1', 'poll', 'poll-cv']
28
Loo Rong Jiee97c2302018-01-10 17:35:34 +080029def if_not_windows(a):
30 return select({
31 "//:windows": [],
32 "//:windows_msvc": [],
33 "//conditions:default": a,
34 })
35
Alexander Polcyn54a70402017-11-29 17:06:16 -080036def _get_external_deps(external_deps):
37 ret = []
38 for dep in external_deps:
39 if dep == "nanopb":
Alexander Polcyn9df154c2018-01-12 11:44:08 -080040 ret += ["//third_party/nanopb"]
Alexander Polcynf1b933c2018-01-11 09:47:18 -080041 elif dep == "cares":
42 ret += select({"//:grpc_no_ares": [],
43 "//conditions:default": ["//external:cares"],})
Alexander Polcyn54a70402017-11-29 17:06:16 -080044 else:
Alexander Polcyn9df154c2018-01-12 11:44:08 -080045 ret += ["//external:" + dep]
Alexander Polcyn54a70402017-11-29 17:06:16 -080046 return ret
47
48def _maybe_update_cc_library_hdrs(hdrs):
49 ret = []
50 hdrs_to_update = {
51 "third_party/objective_c/Cronet/bidirectional_stream_c.h": "//third_party:objective_c/Cronet/bidirectional_stream_c.h",
52 }
53 for h in hdrs:
54 if h in hdrs_to_update.keys():
55 ret.append(hdrs_to_update[h])
56 else:
57 ret.append(h)
58 return ret
59
Nicolas "Pixel" Noble15cd5ce2017-04-18 06:32:11 +020060def grpc_cc_library(name, srcs = [], public_hdrs = [], hdrs = [],
61 external_deps = [], deps = [], standalone = False,
Ian Coolidge6b08cf42017-06-16 12:56:23 -070062 language = "C++", testonly = False, visibility = None,
Adele Zhoue5df91f2017-11-29 14:37:18 -080063 alwayslink = 0):
Nicolas "Pixel" Noble31d11db2016-10-20 09:29:46 +020064 copts = []
Craig Tiller674c66c2016-10-20 13:08:52 -070065 if language.upper() == "C":
Loo Rong Jiee97c2302018-01-10 17:35:34 +080066 copts = if_not_windows(["-std=c99"])
Nicolas "Pixel" Noble31d11db2016-10-20 09:29:46 +020067 native.cc_library(
68 name = name,
69 srcs = srcs,
Adele Zhoue5df91f2017-11-29 14:37:18 -080070 defines = select({"//:grpc_no_ares": ["GRPC_ARES=0"],
71 "//conditions:default": [],}) +
Adele Zhou5b7cdef2017-11-29 16:25:17 -080072 select({"//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"],
Vijay Pai37abc4a2017-12-19 09:20:50 -080073 "//conditions:default": [],}) +
Vijay Pai9809ce32017-12-19 09:09:52 -080074 select({"//:grpc_allow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=1"],
75 "//:grpc_disallow_exceptions":
76 ["GRPC_ALLOW_EXCEPTIONS=0"],
Adele Zhoue5df91f2017-11-29 14:37:18 -080077 "//conditions:default": [],}),
Alexander Polcyn54a70402017-11-29 17:06:16 -080078 hdrs = _maybe_update_cc_library_hdrs(hdrs + public_hdrs),
79 deps = deps + _get_external_deps(external_deps),
Nicolas "Pixel" Noble31d11db2016-10-20 09:29:46 +020080 copts = copts,
Nicolas "Pixel" Noble15cd5ce2017-04-18 06:32:11 +020081 visibility = visibility,
82 testonly = testonly,
Loo Rong Jiee97c2302018-01-10 17:35:34 +080083 linkopts = if_not_windows(["-pthread"]),
Nicolas "Pixel" Noble31d11db2016-10-20 09:29:46 +020084 includes = [
85 "include"
Ian Coolidge6b08cf42017-06-16 12:56:23 -070086 ],
87 alwayslink = alwayslink,
Nicolas "Pixel" Noble31d11db2016-10-20 09:29:46 +020088 )
Nicolas "Pixel" Noble4dc64312016-10-20 23:07:37 +020089
Vijay Pai4fdb08a2017-11-14 16:48:45 -080090def grpc_proto_plugin(name, srcs = [], deps = []):
Nicolas "Pixel" Noble4dc64312016-10-20 23:07:37 +020091 native.cc_binary(
92 name = name,
Vijay Pai4fdb08a2017-11-14 16:48:45 -080093 srcs = srcs,
Nicolas "Pixel" Noble4dc64312016-10-20 23:07:37 +020094 deps = deps,
95 )
Nicolas "Pixel" Noble799bd5e2016-10-21 01:54:32 +020096
97load("//:bazel/cc_grpc_library.bzl", "cc_grpc_library")
98
Craig Tillera7533712017-05-16 13:09:33 -070099def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = False,
Mahak Mukhi443a75d2017-04-14 15:33:55 -0700100 has_services = True, use_external = False, generate_mock = False):
Nicolas "Pixel" Noble799bd5e2016-10-21 01:54:32 +0200101 cc_grpc_library(
102 name = name,
103 srcs = srcs,
104 deps = deps,
Makarand Dharmapurikare3e3b2a2017-03-07 16:12:56 -0800105 well_known_protos = well_known_protos,
Nicolas "Pixel" Noble799bd5e2016-10-21 01:54:32 +0200106 proto_only = not has_services,
Makarand Dharmapurikar9098fcc2017-03-02 17:13:10 -0800107 use_external = use_external,
Mahak Mukhi443a75d2017-04-14 15:33:55 -0700108 generate_mock = generate_mock,
Nicolas "Pixel" Noble799bd5e2016-10-21 01:54:32 +0200109 )
110
Craig Tiller360712f2017-10-18 10:05:21 -0700111def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data = [], uses_polling = True, language = "C++"):
Craig Tillerf66de6e2017-05-15 08:29:10 -0700112 copts = []
113 if language.upper() == "C":
Loo Rong Jiee97c2302018-01-10 17:35:34 +0800114 copts = if_not_windows(["-std=c99"])
Craig Tiller360712f2017-10-18 10:05:21 -0700115 args = {
116 'name': name,
117 'srcs': srcs,
118 'args': args,
119 'data': data,
Alexander Polcyn54a70402017-11-29 17:06:16 -0800120 'deps': deps + _get_external_deps(external_deps),
Craig Tiller360712f2017-10-18 10:05:21 -0700121 'copts': copts,
Loo Rong Jiee97c2302018-01-10 17:35:34 +0800122 'linkopts': if_not_windows(["-pthread"]),
Craig Tiller360712f2017-10-18 10:05:21 -0700123 }
124 if uses_polling:
Craig Tillere55fb8a2017-12-07 11:40:18 -0800125 native.cc_test(testonly=True, tags=['manual'], **args)
Craig Tiller360712f2017-10-18 10:05:21 -0700126 for poller in POLLERS:
127 native.sh_test(
128 name = name + '@poller=' + poller,
129 data = [name],
130 srcs = [
131 '//test/core/util:run_with_poller_sh',
132 ],
133 args = [
134 poller,
135 '$(location %s)' % name
Alexander Polcynb94346f2017-12-11 16:03:40 -0800136 ] + args['args'],
Craig Tiller360712f2017-10-18 10:05:21 -0700137 )
138 else:
139 native.cc_test(**args)
Nicolas "Pixel" Noble7c26eed2017-04-13 01:40:54 +0200140
Vijay Pai42807252017-07-28 15:08:24 -0700141def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], data = [], language = "C++", testonly = False, linkshared = False, linkopts = []):
Nicolas "Pixel" Noble15cd5ce2017-04-18 06:32:11 +0200142 copts = []
143 if language.upper() == "C":
144 copts = ["-std=c99"]
Nicolas "Pixel" Noble7c26eed2017-04-13 01:40:54 +0200145 native.cc_binary(
146 name = name,
147 srcs = srcs,
148 args = args,
149 data = data,
Nicolas "Pixel" Noble15cd5ce2017-04-18 06:32:11 +0200150 testonly = testonly,
Nicolas "Pixel" Nobled69f7762017-05-12 17:10:13 +0200151 linkshared = linkshared,
Alexander Polcyn54a70402017-11-29 17:06:16 -0800152 deps = deps + _get_external_deps(external_deps),
Nicolas "Pixel" Noble15cd5ce2017-04-18 06:32:11 +0200153 copts = copts,
Loo Rong Jiee97c2302018-01-10 17:35:34 +0800154 linkopts = if_not_windows(["-pthread"]) + linkopts,
Nicolas "Pixel" Noble7c26eed2017-04-13 01:40:54 +0200155 )
Nicolas "Pixel" Noble2b0f0012017-04-24 19:59:19 +0200156
157def grpc_generate_one_off_targets():
Nicolas "Pixel" Noble3dedf652017-05-24 02:29:02 +0200158 pass
Nicolas "Pixel" Noble3bd81772017-04-25 22:23:40 +0200159
160def grpc_sh_test(name, srcs, args = [], data = []):
Nicolas "Pixel" Noble3dedf652017-05-24 02:29:02 +0200161 native.sh_test(
162 name = name,
163 srcs = srcs,
164 args = args,
165 data = data)
Nicolas "Pixel" Noble2bc5e3a2017-08-15 22:32:52 +0200166
Alexander Polcyn27bf05d2017-08-07 18:09:11 -0700167def grpc_sh_binary(name, srcs, data = []):
Adele Zhou8fe25312018-01-30 16:08:03 -0800168 native.sh_binary(
Alexander Polcyn27bf05d2017-08-07 18:09:11 -0700169 name = name,
170 srcs = srcs,
171 data = data)
172
Alexander Polcyn092f1992018-03-06 10:28:35 -0800173def grpc_py_binary(name, srcs, data = [], deps = [], external_deps = [], testonly = False):
Alexander Polcyn27bf05d2017-08-07 18:09:11 -0700174 native.py_binary(
175 name = name,
176 srcs = srcs,
177 data = data,
Alexander Polcyn092f1992018-03-06 10:28:35 -0800178 deps = deps + _get_external_deps(external_deps)
179 )
Alexander Polcyn27bf05d2017-08-07 18:09:11 -0700180
yang-g109040f2017-08-30 21:33:31 -0700181def grpc_package(name, visibility = "private", features = []):
Nicolas "Pixel" Noble2bc5e3a2017-08-15 22:32:52 +0200182 if visibility == "tests":
183 visibility = ["//test:__subpackages__"]
184 elif visibility == "public":
185 visibility = ["//visibility:public"]
186 elif visibility == "private":
187 visibility = []
188 else:
189 fail("Unknown visibility " + visibility)
190
191 if len(visibility) != 0:
192 native.package(
yang-g109040f2017-08-30 21:33:31 -0700193 default_visibility = visibility,
194 features = features
Nicolas "Pixel" Noble2bc5e3a2017-08-15 22:32:52 +0200195 )