blob: b47f0a90247df1cf95a5673ba62601ed95ed4965 [file] [log] [blame]
Alexei Frolov26e3ae62020-05-04 17:06:17 -07001# Copyright 2020 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7# https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080015load("@rules_proto//proto:defs.bzl", "proto_library")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070016load(
17 "//pw_build:pigweed.bzl",
18 "pw_cc_library",
19 "pw_cc_test",
20)
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080021load("@rules_proto_grpc//:plugin.bzl", "proto_plugin")
22load("//pw_protobuf_compiler:proto.bzl", "pw_proto_library")
Alexei Frolov26e3ae62020-05-04 17:06:17 -070023
24package(default_visibility = ["//visibility:public"])
25
26licenses(["notice"]) # Apache License 2.0
27
28pw_cc_library(
Alexei Frolov4d2adde2020-08-04 10:19:24 -070029 name = "client",
30 srcs = [
Alexei Frolov4d2adde2020-08-04 10:19:24 -070031 "base_client_call.cc",
Wyatt Heplere95bd722020-11-23 07:49:47 -080032 "client.cc",
Alexei Frolov4d2adde2020-08-04 10:19:24 -070033 ],
34 hdrs = [
35 "public/pw_rpc/client.h",
36 "public/pw_rpc/internal/base_client_call.h",
37 ],
38 deps = [
39 ":common",
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080040 "//pw_containers:intrusive_list",
Wyatt Heplere95bd722020-11-23 07:49:47 -080041 ],
Alexei Frolov4d2adde2020-08-04 10:19:24 -070042)
43
44pw_cc_library(
Wyatt Heplercbd09c22020-09-15 11:17:24 -070045 name = "server",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070046 srcs = [
Wyatt Hepler74e7ab62021-06-15 19:44:32 -070047 "responder.cc",
48 "public/pw_rpc/internal/responder.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070049 "public/pw_rpc/internal/call.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070050 "public/pw_rpc/internal/hash.h",
51 "public/pw_rpc/internal/method.h",
Wyatt Heplerafd29142020-11-23 07:58:59 -080052 "public/pw_rpc/internal/method_lookup.h",
Alexei Frolova4d71502020-10-14 12:43:14 -070053 "public/pw_rpc/internal/method_union.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -070054 "public/pw_rpc/internal/server.h",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070055 "server.cc",
56 "service.cc",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -070057 ],
58 hdrs = [
59 "public/pw_rpc/server.h",
60 "public/pw_rpc/server_context.h",
Alexei Frolov9a4d6bf2020-08-04 10:33:26 -070061 "public/pw_rpc/service.h",
Alexei Frolov26e3ae62020-05-04 17:06:17 -070062 ],
63 includes = ["public"],
64 deps = [
Alexei Frolov4d2adde2020-08-04 10:19:24 -070065 ":common",
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080066 ":internal_packet_pwpb",
67 "//pw_containers",
Alexei Frolov4d2adde2020-08-04 10:19:24 -070068 ],
69)
70
71pw_cc_library(
Alexei Frolov3e280922021-04-12 14:53:06 -070072 name = "client_server",
73 srcs = ["client_server.cc"],
74 hdrs = ["public/pw_rpc/client_server.h"],
75 deps = [
76 ":client",
77 ":server",
78 ],
79)
80
81pw_cc_library(
Alexei Frolov4d2adde2020-08-04 10:19:24 -070082 name = "common",
83 srcs = [
84 "channel.cc",
85 "packet.cc",
86 "public/pw_rpc/internal/channel.h",
Wyatt Heplerdb5a7cc2020-11-25 10:53:25 -080087 "public/pw_rpc/internal/config.h",
Alexei Frolov4d2adde2020-08-04 10:19:24 -070088 "public/pw_rpc/internal/method_type.h",
89 "public/pw_rpc/internal/packet.h",
90 ],
91 hdrs = [
92 "public/pw_rpc/channel.h",
93 ],
94 includes = ["public"],
95 deps = [
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080096 ":internal_packet_pwpb",
Alexei Frolov26e3ae62020-05-04 17:06:17 -070097 "//pw_assert",
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +080098 "//pw_bytes",
Alexei Frolov5d6d3922020-05-08 13:57:02 -070099 "//pw_log",
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700100 "//pw_span",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700101 "//pw_status",
102 ],
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700103)
104
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700105pw_cc_library(
Alexei Frolove39af8d2020-12-30 14:55:09 -0800106 name = "synchronized_channel_output",
107 hdrs = ["public/pw_rpc/synchronized_channel_output.h"],
108 includes = ["public"],
109 deps = [
110 ":common",
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700111 "//pw_sync:lock_annotations",
Alexei Frolove39af8d2020-12-30 14:55:09 -0800112 "//pw_sync:mutex",
113 ],
114)
115
116pw_cc_library(
Wyatt Hepler8aa02922020-07-17 08:54:37 -0700117 name = "internal_test_utils",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700118 hdrs = [
119 "public/pw_rpc/internal/test_method.h",
120 "pw_rpc_private/internal_test_utils.h",
Wyatt Heplerb6495b32020-11-23 07:50:59 -0800121 "pw_rpc_private/method_impl_tester.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700122 ],
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800123 includes = [
124 ".",
125 "public",
126 ],
127 visibility = [":__subpackages__"],
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700128 deps = [
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800129 ":client",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700130 ":server",
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700131 "//pw_span",
132 ],
133)
134
Wyatt Hepler948f5472020-06-02 16:52:28 -0700135# TODO(hepler): Cannot build nanopb-dependent code in Bazel at the moment. Need
136# to determine how best to support Nanopb builds and protobuf generation.
137filegroup(
138 name = "nanopb",
139 srcs = [
Alexei Frolov7fb63af2020-07-09 17:05:52 -0700140 "nanopb/codegen_test.cc",
Alexei Frolov7c7a3862020-07-16 15:36:02 -0700141 "nanopb/echo_service_test.cc",
Wyatt Heplerafd29142020-11-23 07:58:59 -0800142 "nanopb/method_lookup_test.cc",
Alexei Frolov4d2adde2020-08-04 10:19:24 -0700143 "nanopb/nanopb_client_call.cc",
144 "nanopb/nanopb_client_call_test.cc",
145 "nanopb/nanopb_common.cc",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700146 "nanopb/nanopb_method.cc",
147 "nanopb/nanopb_method_test.cc",
Alexei Frolova4d71502020-10-14 12:43:14 -0700148 "nanopb/nanopb_method_union_test.cc",
Alexei Frolov7c7a3862020-07-16 15:36:02 -0700149 "nanopb/public/pw_rpc/echo_service_nanopb.h",
Alexei Frolov4d2adde2020-08-04 10:19:24 -0700150 "nanopb/public/pw_rpc/internal/nanopb_common.h",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700151 "nanopb/public/pw_rpc/internal/nanopb_method.h",
Alexei Frolova4d71502020-10-14 12:43:14 -0700152 "nanopb/public/pw_rpc/internal/nanopb_method_union.h",
Alexei Frolovd98a99d2020-10-20 13:51:24 -0700153 "nanopb/public/pw_rpc/nanopb_client_call.h",
154 "nanopb/public/pw_rpc/nanopb_test_method_context.h",
Alexei Frolov4d2adde2020-08-04 10:19:24 -0700155 "nanopb/pw_rpc_nanopb_private/internal_test_utils.h",
Wyatt Hepler8779bcd2020-11-25 07:25:16 -0800156 "nanopb/stub_generation_test.cc",
Wyatt Hepler948f5472020-06-02 16:52:28 -0700157 ],
158)
159
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700160pw_cc_test(
161 name = "base_server_writer_test",
162 srcs = [
Wyatt Hepler74e7ab62021-06-15 19:44:32 -0700163 "responder_test.cc",
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700164 ],
165 deps = [
Wyatt Hepler8aa02922020-07-17 08:54:37 -0700166 ":internal_test_utils",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700167 ":server",
Wyatt Heplercb9d9572020-06-01 11:25:58 -0700168 ],
169)
170
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700171pw_cc_test(
Alexei Frolov4d2adde2020-08-04 10:19:24 -0700172 name = "base_client_call_test",
173 srcs = [
174 "base_client_call_test.cc",
175 ],
176 deps = [
177 ":client",
178 ":internal_test_utils",
179 ],
180)
181
182pw_cc_test(
183 name = "client_test",
184 srcs = [
185 "client_test.cc",
186 ],
187 deps = [
188 ":client",
189 ":internal_test_utils",
190 ],
191)
192
193pw_cc_test(
Wyatt Hepler671946e2020-06-09 14:39:33 -0700194 name = "channel_test",
195 srcs = ["channel_test.cc"],
196 deps = [
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800197 ":internal_test_utils",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700198 ":server",
Wyatt Hepler671946e2020-06-09 14:39:33 -0700199 ],
200)
201
202pw_cc_test(
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700203 name = "packet_test",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700204 srcs = [
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700205 "packet_test.cc",
206 ],
207 deps = [
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700208 ":server",
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700209 ],
210)
211
Alexei Frolov3e280922021-04-12 14:53:06 -0700212pw_cc_test(
213 name = "client_server_test",
214 srcs = ["client_server_test.cc"],
215 deps = [
216 ":client_server",
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800217 ":internal_test_utils",
Alexei Frolov3e280922021-04-12 14:53:06 -0700218 "//pw_rpc/raw:method_union",
219 ],
220)
221
Alexei Frolov6560ec82020-06-03 11:03:05 -0700222proto_library(
223 name = "packet_proto",
224 srcs = [
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800225 "internal/packet.proto",
Wyatt Hepler948f5472020-06-02 16:52:28 -0700226 ],
Alexei Frolov6560ec82020-06-03 11:03:05 -0700227)
228
Alexei Frolov26e3ae62020-05-04 17:06:17 -0700229pw_cc_test(
230 name = "server_test",
231 srcs = [
232 "server_test.cc",
233 ],
234 deps = [
Wyatt Hepler8aa02922020-07-17 08:54:37 -0700235 ":internal_test_utils",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700236 ":server",
Wyatt Hepler80f26ff2020-06-01 09:30:17 -0700237 "//pw_assert",
Alexei Frolov5d6d3922020-05-08 13:57:02 -0700238 ],
239)
Wyatt Heplerd1591422020-09-15 10:04:41 -0700240
241pw_cc_test(
242 name = "service_test",
243 srcs = [
244 "service_test.cc",
245 ],
246 deps = [
Wyatt Heplerd1591422020-09-15 10:04:41 -0700247 ":internal_test_utils",
Wyatt Heplercbd09c22020-09-15 11:17:24 -0700248 ":server",
Wyatt Heplerd1591422020-09-15 10:04:41 -0700249 "//pw_assert",
250 ],
251)
Nathaniel Broughb4f4e7a2021-05-06 14:49:55 +0800252
253proto_library(
254 name = "internal_packet_proto",
255 srcs = ["internal/packet.proto"],
256 visibility = ["//visibility:private"],
257)
258
259pw_proto_library(
260 name = "internal_packet_pwpb",
261 deps = [":internal_packet_proto"],
262)
263
264proto_library(
265 name = "pw_rpc_test_proto",
266 srcs = ["pw_rpc_test_protos/test.proto"],
267 strip_import_prefix = "//pw_rpc",
268)
269
270pw_proto_library(
271 name = "pw_rpc_test_pwpb",
272 deps = [":pw_rpc_test_proto"],
273)
274
275proto_plugin(
276 name = "pw_cc_plugin",
277 outputs = [
278 "{protopath}.raw_rpc.pb.h",
279 ],
280 protoc_plugin_name = "raw_rpc",
281 tool = "@pigweed//pw_rpc/py:plugin",
282 visibility = ["//visibility:public"],
283)