xref: /aosp_15_r20/external/pigweed/pw_rpc/CMakeLists.txt (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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_list.h
116    public/pw_rpc/internal/encoding_buffer.h
117    public/pw_rpc/internal/endpoint.h
118    public/pw_rpc/internal/lock.h
119    public/pw_rpc/internal/method_info.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_id.h
126    public/pw_rpc/writer.h
127  PUBLIC_INCLUDES
128    public
129  PUBLIC_DEPS
130    pw_assert
131    pw_bytes
132    pw_containers.intrusive_list
133    pw_function
134    pw_polyfill
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    benchmark.options
288    benchmark.pwpb_options
289    echo.options
290    echo.pwpb_options
291  PREFIX
292    pw_rpc
293)
294
295pw_proto_library(pw_rpc.test_protos
296  SOURCES
297    pw_rpc_test_protos/no_package.proto
298    pw_rpc_test_protos/test.proto
299  INPUTS
300    pw_rpc_test_protos/test.options
301)
302
303# Set pw_rpc_CONFIG to this to disable the global mutex.
304pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE
305  PUBLIC_DEFINES
306    PW_RPC_USE_GLOBAL_MUTEX=0
307)
308
309pw_add_test(pw_rpc.call_test
310  SOURCES
311    call_test.cc
312  PRIVATE_DEPS
313    pw_rpc.server
314    pw_rpc.test_utils
315  GROUPS
316    modules
317    pw_rpc
318)
319
320pw_add_test(pw_rpc.channel_test
321  SOURCES
322    channel_test.cc
323  PRIVATE_DEPS
324    pw_rpc.server
325    pw_rpc.test_utils
326  GROUPS
327    modules
328    pw_rpc
329)
330
331pw_add_test(pw_rpc.packet_test
332  SOURCES
333    packet_test.cc
334  PRIVATE_DEPS
335    pw_bytes
336    pw_fuzzer.fuzztest
337    pw_protobuf
338    pw_rpc.server
339  GROUPS
340    modules
341    pw_rpc
342)
343
344pw_add_test(pw_rpc.packet_meta_test
345  SOURCES
346    packet_meta_test.cc
347  PRIVATE_DEPS
348    pw_bytes
349    pw_fuzzer.fuzztest
350    pw_rpc.server
351  GROUPS
352    modules
353    pw_rpc
354)
355
356pw_add_test(pw_rpc.service_test
357  SOURCES
358    service_test.cc
359  PRIVATE_DEPS
360    pw_assert
361    pw_rpc.protos.pwpb
362    pw_rpc.server
363  GROUPS
364    modules
365    pw_rpc
366)
367
368pw_add_test(pw_rpc.client_server_test
369  SOURCES
370    client_server_test.cc
371  PRIVATE_DEPS
372    pw_rpc.client_server
373    pw_rpc.test_utils
374    pw_rpc.raw.server_api
375  GROUPS
376    modules
377    pw_rpc
378)
379
380pw_add_test(pw_rpc.method_test
381  SOURCES
382    method_test.cc
383  PRIVATE_DEPS
384    pw_rpc.server
385    pw_rpc.test_utils
386  GROUPS
387    modules
388    pw_rpc
389)
390
391pw_add_test(pw_rpc.server_test
392  SOURCES
393    server_test.cc
394  PRIVATE_DEPS
395    pw_assert
396    pw_rpc.protos.pwpb
397    pw_rpc.server
398    pw_rpc.test_utils
399  GROUPS
400    modules
401    pw_rpc
402)
403
404pw_add_test(pw_rpc.fake_channel_output_test
405  SOURCES
406    fake_channel_output_test.cc
407  PRIVATE_DEPS
408    pw_rpc.test_utils
409  GROUPS
410    modules
411    pw_rpc
412)
413
414pw_add_test(pw_rpc.test_helpers_test
415  SOURCES
416    test_helpers_test.cc
417  PRIVATE_DEPS
418    pw_result
419    pw_rpc.pwpb.client_testing
420    pw_rpc.pwpb.echo_service
421    pw_rpc.pwpb.server_api
422    pw_rpc.test_helpers
423    pw_status
424    pw_sync.interrupt_spin_lock
425    pw_sync.lock_annotations
426    pw_sync.timed_thread_notification
427  GROUPS
428    modules
429    pw_rpc
430)
431