• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 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
15include($ENV{PW_ROOT}/pw_build/pigweed.cmake)
16include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
17
18add_subdirectory(nanopb)
19add_subdirectory(pwpb)
20add_subdirectory(raw)
21add_subdirectory(system_server)
22
23pw_add_module_config(pw_rpc_CONFIG)
24
25pw_add_library(pw_rpc.config INTERFACE
26  HEADERS
27    public/pw_rpc/internal/config.h
28  PUBLIC_INCLUDES
29    public
30  PUBLIC_DEPS
31    ${pw_rpc_CONFIG}
32)
33
34pw_add_library(pw_rpc.log_config INTERFACE
35  HEADERS
36    public/pw_rpc/internal/log_config.h
37  PUBLIC_INCLUDES
38    public
39  PUBLIC_DEPS
40    pw_rpc.config
41)
42
43pw_add_library(pw_rpc.server STATIC
44  HEADERS
45    public/pw_rpc/server.h
46    public/pw_rpc/internal/grpc.h
47    public/pw_rpc/internal/server_call.h
48  PUBLIC_INCLUDES
49    public
50  SOURCES
51    server.cc
52    server_call.cc
53    service.cc
54  PUBLIC_DEPS
55    pw_rpc.common
56  PRIVATE_DEPS
57    pw_log
58    pw_rpc.log_config
59)
60
61pw_add_library(pw_rpc.client STATIC
62  HEADERS
63    public/pw_rpc/client.h
64    public/pw_rpc/internal/client_call.h
65    public/pw_rpc/internal/service_client.h
66  PUBLIC_INCLUDES
67    public
68  PUBLIC_DEPS
69    pw_result
70    pw_rpc.common
71    pw_span
72  SOURCES
73    client.cc
74    client_call.cc
75  PRIVATE_DEPS
76    pw_log
77    pw_rpc.log_config
78)
79
80pw_add_library(pw_rpc.client_server STATIC
81  HEADERS
82    public/pw_rpc/client_server.h
83  PUBLIC_INCLUDES
84    public
85  PUBLIC_DEPS
86    pw_rpc.client
87    pw_rpc.server
88  SOURCES
89    client_server.cc
90)
91
92pw_add_library(pw_rpc.synchronous_client_api INTERFACE
93  HEADERS
94    public/pw_rpc/synchronous_call.h
95    public/pw_rpc/synchronous_call_result.h
96    public/pw_rpc/internal/synchronous_call_impl.h
97  PUBLIC_INCLUDES
98    public
99  PUBLIC_DEPS
100    pw_chrono.system_clock
101    pw_rpc.client
102    pw_rpc.common
103    pw_sync.timed_thread_notification
104)
105
106pw_add_library(pw_rpc.common STATIC
107  HEADERS
108    public/pw_rpc/channel.h
109    public/pw_rpc/internal/call.h
110    public/pw_rpc/internal/call_context.h
111    public/pw_rpc/internal/channel_list.h
112    public/pw_rpc/internal/encoding_buffer.h
113    public/pw_rpc/internal/endpoint.h
114    public/pw_rpc/internal/hash.h
115    public/pw_rpc/internal/lock.h
116    public/pw_rpc/internal/method.h
117    public/pw_rpc/internal/method_info.h
118    public/pw_rpc/internal/method_lookup.h
119    public/pw_rpc/internal/method_union.h
120    public/pw_rpc/internal/packet.h
121    public/pw_rpc/method_id.h
122    public/pw_rpc/method_info.h
123    public/pw_rpc/method_type.h
124    public/pw_rpc/packet_meta.h
125    public/pw_rpc/service.h
126    public/pw_rpc/service_id.h
127    public/pw_rpc/writer.h
128  PUBLIC_INCLUDES
129    public
130  PUBLIC_DEPS
131    pw_assert
132    pw_bytes
133    pw_containers.intrusive_list
134    pw_function
135    pw_polyfill
136    pw_rpc.config
137    pw_rpc.protos.pwpb
138    pw_span
139    pw_status
140    pw_sync.lock_annotations
141    pw_toolchain.no_destructor
142  SOURCES
143    call.cc
144    channel.cc
145    channel_list.cc
146    endpoint.cc
147    packet.cc
148    packet_meta.cc
149  PRIVATE_DEPS
150    pw_log
151    pw_preprocessor
152    pw_rpc.log_config
153)
154if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "")
155  pw_target_link_targets(pw_rpc.common PUBLIC pw_sync.mutex)
156endif()
157
158if(NOT "${pw_thread.sleep_BACKEND}" STREQUAL "")
159  pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.sleep)
160endif()
161
162if(NOT "${pw_thread.yield_BACKEND}" STREQUAL "")
163  pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.yield)
164endif()
165
166pw_add_library(pw_rpc.fake_channel_output STATIC
167  HEADERS
168    public/pw_rpc/internal/fake_channel_output.h
169    public/pw_rpc/payloads_view.h
170  PUBLIC_INCLUDES
171    public
172  PUBLIC_DEPS
173    pw_assert
174    pw_bytes
175    pw_containers.filtered_view
176    pw_containers.vector
177    pw_containers.wrapped_iterator
178    pw_function
179    pw_rpc.common
180    pw_sync.mutex
181  SOURCES
182    fake_channel_output.cc
183  PRIVATE_DEPS
184    pw_log
185    pw_rpc.log_config
186)
187
188pw_add_library(pw_rpc.client_server_testing INTERFACE
189  HEADERS
190    public/pw_rpc/internal/client_server_testing.h
191  PUBLIC_INCLUDES
192    public
193  PUBLIC_DEPS
194    pw_bytes
195    pw_result
196    pw_rpc.client_server
197    pw_rpc.fake_channel_output
198)
199
200pw_add_library(pw_rpc.client_server_testing_threaded INTERFACE
201  HEADERS
202    public/pw_rpc/internal/client_server_testing_threaded.h
203  PUBLIC_INCLUDES
204    public
205  PUBLIC_DEPS
206    pw_bytes
207    pw_result
208    pw_rpc.client_server_testing
209    pw_sync.binary_semaphore
210    pw_sync.lock_annotations
211    pw_sync.mutex
212    pw_thread.thread
213)
214
215pw_add_library(pw_rpc.test_helpers INTERFACE
216  HEADERS
217    public/pw_rpc/test_helpers.h
218  PUBLIC_INCLUDES
219    public
220  PUBLIC_DEPS
221    pw_assert
222    pw_chrono.system_clock
223    pw_rpc.fake_channel_output
224    pw_status
225    pw_sync.counting_semaphore
226    pw_thread.yield
227)
228
229# thread_testing target is kept for backward compatibility.
230# New code should use pw_rpc.test_helpers instead.
231pw_add_library(pw_rpc.thread_testing INTERFACE
232  HEADERS
233    public/pw_rpc/thread_testing.h
234  PUBLIC_INCLUDES
235    public
236  PUBLIC_DEPS
237    pw_rpc.test_helpers
238)
239
240pw_add_library(pw_rpc.test_utils INTERFACE
241  HEADERS
242    public/pw_rpc/internal/fake_channel_output.h
243    public/pw_rpc/internal/method_impl_tester.h
244    public/pw_rpc/internal/method_info_tester.h
245    public/pw_rpc/internal/test_method_context.h
246    public/pw_rpc/internal/test_utils.h
247    pw_rpc_private/fake_server_reader_writer.h
248    pw_rpc_private/test_method.h
249  PUBLIC_INCLUDES
250    public
251  PUBLIC_DEPS
252    pw_assert
253    pw_bytes
254    pw_rpc.client
255    pw_rpc.server
256    pw_containers.vector
257    pw_rpc.raw.fake_channel_output
258    pw_rpc.raw.server_api
259)
260
261pw_add_library(pw_rpc.integration_testing STATIC
262  HEADERS
263    public/pw_rpc/integration_test_socket_client.h
264    public/pw_rpc/integration_testing.h
265  PUBLIC_INCLUDES
266    public
267  PUBLIC_DEPS
268    pw_assert
269    pw_function
270    pw_hdlc.default_addresses
271    pw_hdlc.rpc_channel_output
272    pw_rpc.client
273    pw_stream.socket_stream
274    pw_unit_test
275    pw_unit_test.logging_event_handler
276  SOURCES
277    integration_testing.cc
278  PRIVATE_DEPS
279    pw_log
280)
281
282pw_proto_library(pw_rpc.protos
283  SOURCES
284    benchmark.proto
285    internal/packet.proto
286    echo.proto
287  INPUTS
288    benchmark.options
289    benchmark.pwpb_options
290    echo.options
291    echo.pwpb_options
292  PREFIX
293    pw_rpc
294)
295
296pw_proto_library(pw_rpc.test_protos
297  SOURCES
298    pw_rpc_test_protos/no_package.proto
299    pw_rpc_test_protos/test.proto
300  INPUTS
301    pw_rpc_test_protos/test.options
302)
303
304# Set pw_rpc_CONFIG to this to disable the global mutex.
305pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE
306  PUBLIC_DEFINES
307    PW_RPC_USE_GLOBAL_MUTEX=0
308)
309
310pw_add_test(pw_rpc.call_test
311  SOURCES
312    call_test.cc
313  PRIVATE_DEPS
314    pw_rpc.server
315    pw_rpc.test_utils
316  GROUPS
317    modules
318    pw_rpc
319)
320
321pw_add_test(pw_rpc.channel_test
322  SOURCES
323    channel_test.cc
324  PRIVATE_DEPS
325    pw_rpc.server
326    pw_rpc.test_utils
327  GROUPS
328    modules
329    pw_rpc
330)
331
332pw_add_test(pw_rpc.packet_test
333  SOURCES
334    packet_test.cc
335  PRIVATE_DEPS
336    pw_bytes
337    pw_fuzzer.fuzztest
338    pw_protobuf
339    pw_rpc.server
340  GROUPS
341    modules
342    pw_rpc
343)
344
345pw_add_test(pw_rpc.packet_meta_test
346  SOURCES
347    packet_meta_test.cc
348  PRIVATE_DEPS
349    pw_bytes
350    pw_fuzzer.fuzztest
351    pw_rpc.server
352  GROUPS
353    modules
354    pw_rpc
355)
356
357pw_add_test(pw_rpc.service_test
358  SOURCES
359    service_test.cc
360  PRIVATE_DEPS
361    pw_assert
362    pw_rpc.protos.pwpb
363    pw_rpc.server
364  GROUPS
365    modules
366    pw_rpc
367)
368
369pw_add_test(pw_rpc.client_server_test
370  SOURCES
371    client_server_test.cc
372  PRIVATE_DEPS
373    pw_rpc.client_server
374    pw_rpc.test_utils
375    pw_rpc.raw.server_api
376  GROUPS
377    modules
378    pw_rpc
379)
380
381pw_add_test(pw_rpc.method_test
382  SOURCES
383    method_test.cc
384  PRIVATE_DEPS
385    pw_rpc.server
386    pw_rpc.test_utils
387  GROUPS
388    modules
389    pw_rpc
390)
391
392pw_add_test(pw_rpc.server_test
393  SOURCES
394    server_test.cc
395  PRIVATE_DEPS
396    pw_assert
397    pw_rpc.protos.pwpb
398    pw_rpc.server
399    pw_rpc.test_utils
400  GROUPS
401    modules
402    pw_rpc
403)
404
405pw_add_test(pw_rpc.fake_channel_output_test
406  SOURCES
407    fake_channel_output_test.cc
408  PRIVATE_DEPS
409    pw_rpc.test_utils
410  GROUPS
411    modules
412    pw_rpc
413)
414
415pw_add_test(pw_rpc.test_helpers_test
416  SOURCES
417    test_helpers_test.cc
418  PRIVATE_DEPS
419    pw_result
420    pw_rpc.pwpb.client_testing
421    pw_rpc.pwpb.echo_service
422    pw_rpc.pwpb.server_api
423    pw_rpc.test_helpers
424    pw_status
425    pw_sync.interrupt_spin_lock
426    pw_sync.lock_annotations
427    pw_sync.timed_thread_notification
428  GROUPS
429    modules
430    pw_rpc
431)
432