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