xref: /aosp_15_r20/external/pigweed/pw_system/CMakeLists.txt (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2022 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_system/backend.cmake)
17include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
18
19# WARNING: Many of the dependencies in this file are missing and need to be
20# added/updated. This is provided as a starting point, but currently does not
21# work.
22
23if("${pw_cpu_exception.entry_BACKEND}" STREQUAL "")
24  pw_add_library(pw_system.config INTERFACE
25    HEADERS
26      public/pw_system/config.h
27    PUBLIC_INCLUDES
28      public
29    PUBLIC_DEFINES
30      PW_SYSTEM_ENABLE_CRASH_HANDLER=0
31  )
32else()
33  pw_add_library(pw_system.config INTERFACE
34    HEADERS
35      public/pw_system/config.h
36    PUBLIC_INCLUDES
37      public
38  )
39endif()
40
41pw_add_library(pw_system.log STATIC
42  PUBLIC_DEPS
43    pw_log_rpc.log_service
44    pw_log_rpc.rpc_log_drain_thread
45    pw_multisink
46  PRIVATE_DEPS
47    pw_system.config
48    pw_system.rpc_server
49    pw_log_rpc.rpc_log_drain
50    pw_sync.lock_annotations
51    pw_sync.mutex
52  HEADERS
53    public/pw_system/log.h
54  PUBLIC_INCLUDES
55    public
56  SOURCES
57    log.cc
58)
59
60pw_add_library(pw_system.log_backend STATIC
61  PRIVATE_DEPS
62    pw_system.config
63    pw_system.log
64    pw_bytes
65    pw_chrono.system_clock
66    pw_log.facade
67    pw_log.proto_utils
68    pw_log_string.handler.facade
69    pw_log_tokenized.handler
70    pw_log_tokenized.metadata
71    pw_multisink
72    pw_result
73    pw_sync.interrupt_spin_lock
74    pw_sync.lock_annotations
75    pw_tokenizer
76  SOURCES
77    log_backend.cc
78)
79
80pw_add_facade(pw_system.rpc_server INTERFACE
81  BACKEND
82    pw_system.rpc_server_BACKEND
83  HEADERS
84    public/pw_system/rpc_server.h
85  PUBLIC_INCLUDES
86    public
87  PUBLIC_DEPS
88    pw_rpc.server
89    pw_system.config
90    pw_thread.thread_core
91)
92
93pw_add_library(pw_system.hdlc_rpc_server STATIC
94  PRIVATE_DEPS
95    pw_assert
96    pw_hdlc.default_addresses
97    pw_hdlc.rpc_channel_output
98    pw_sync.mutex
99    pw_system.config
100    pw_system.io
101    pw_system.rpc_server.facade
102    pw_system.sys_io_target_io
103    pw_thread.thread_core
104    pw_trace
105    pw_log
106  SOURCES
107    hdlc_rpc_server.cc
108)
109
110pw_add_library(pw_system.thread_snapshot_service STATIC
111  HEADERS
112    public/pw_system/thread_snapshot_service.h
113  PUBLIC_INCLUDES
114    public
115  PUBLIC_DEPS
116    pw_thread.thread_snapshot_service
117  SOURCES
118    thread_snapshot_service.cc
119)
120
121pw_add_library(pw_system.transfer_handlers STATIC
122  HEADERS
123    public/pw_system/transfer_handlers.h
124  PUBLIC_INCLUDES
125    public
126  PUBLIC_DEPS
127    pw_persistent_ram
128    pw_trace_tokenized.config
129    pw_transfer
130    pw_transfer.proto.pwpb
131  SOURCES
132    transfer_handlers.cc
133)
134
135pw_add_library(pw_system.file_manager STATIC
136  HEADERS
137    public/pw_system/file_manager.h
138  PUBLIC_INCLUDES
139    public
140  PUBLIC_DEPS
141    pw_system.config
142    pw_system.transfer_handlers
143    pw_persistent_ram.flat_file_system_entry
144  PRIVATE_DEPS
145    pw_system.trace_service
146  SOURCES
147    file_manager.cc
148)
149
150pw_add_library(pw_system.transfer_service STATIC
151  HEADERS
152    public/pw_system/transfer_service.h
153  PUBLIC_INCLUDES
154    public
155  PUBLIC_DEPS
156    pw_transfer
157  PRIVATE_DEPS
158    pw_system.file_manager
159  SOURCES
160    transfer_service.cc
161)
162
163pw_add_library(pw_system.file_service STATIC
164  HEADERS
165    public/pw_system/file_service.h
166  PUBLIC_INCLUDES
167    public
168  PRIVATE_DEPS
169    pw_system.file_manager
170  SOURCES
171    file_service.cc
172)
173
174pw_add_library(pw_system.trace_service STATIC
175  HEADERS
176    public/pw_system/trace_service.h
177  PUBLIC_INCLUDES
178    public
179  PUBLIC_DEPS
180    pw_system.transfer_handlers
181  PRIVATE_DEPS
182    pw_persistent_ram
183    pw_trace_tokenized.trace_service_pwpb
184  SOURCES
185    trace_service.cc
186)
187
188pw_add_facade(pw_system.io INTERFACE
189  BACKEND
190    pw_system.io_BACKEND
191  HEADERS
192    public/pw_system/io.h
193  PUBLIC_INCLUDES
194    public
195  PUBLIC_DEPS
196    pw_stream
197)
198
199pw_add_facade(pw_system.device_handler INTERFACE
200  BACKEND
201    pw_system.device_handler_BACKEND
202  HEADERS
203    public/pw_system/device_handler.h
204  PUBLIC_INCLUDES
205    public
206  PUBLIC_DEPS
207    pw_snapshot.snapshot_proto.pwpb
208)
209
210pw_add_library(pw_system.unknown_device_handler STATIC
211  SOURCES
212    unknown_device_handler.cc
213  PRIVATE_DEPS
214    pw_system.device_handler.facade
215)
216
217pw_proto_library(pw_system.device_service_proto
218  SOURCES
219    pw_system_protos/device_service.proto
220  INPUTS
221    pw_system_protos/device_service.options
222)
223
224pw_add_library(pw_system.device_service_pwpb STATIC
225  HEADERS
226    public/pw_system/device_service_pwpb.h
227  PUBLIC_INCLUDES
228    public
229  SOURCES
230    device_service_pwpb.cc
231  PUBLIC_DEPS
232    pw_system.device_service_proto.pwpb_rpc
233  PRIVATE_DEPS
234    pw_system.device_handler
235)
236
237pw_add_library(pw_system.device_service STATIC
238  HEADERS
239    public/pw_system/device_service.h
240  PUBLIC_INCLUDES
241    public
242  SOURCES
243    device_service.cc
244  PRIVATE_DEPS
245    pw_system.device_service_pwpb
246)
247
248pw_add_library(pw_system.init STATIC
249  HEADERS
250    public/pw_system/init.h
251  PUBLIC_INCLUDES
252    public
253  SOURCES
254    init.cc
255  PRIVATE_DEPS
256    pw_system.device_service
257    pw_system.file_manager
258    pw_system.file_service
259    pw_system.log
260    pw_system.rpc_server
261    pw_system.target_hooks.facade
262    pw_system.thread_snapshot_service
263    pw_system.trace_service
264    pw_system.transfer_service
265    pw_system.work_queue
266    pw_metric.global
267    pw_metric.metric_service_pwpb
268    pw_rpc.pwpb.echo_service
269    pw_thread.thread
270    pw_trace
271)
272
273pw_add_library(pw_system.work_queue STATIC
274  HEADERS
275    public/pw_system/work_queue.h
276  PUBLIC_INCLUDES
277    public
278  SOURCES
279    work_queue.cc
280  PUBLIC_DEPS
281    pw_work_queue
282  PRIVATE_DEPS
283    pw_system.config
284)
285
286pw_add_library(pw_system.sys_io_target_io STATIC
287  PRIVATE_DEPS
288    pw_system.io.facade
289    pw_stream
290    pw_stream.sys_io_stream
291  SOURCES
292    sys_io_target_io.cc
293)
294
295pw_add_library(pw_system.socket_target_io STATIC
296  SOURCES
297    socket_target_io.cc
298  PRIVATE_DEPS
299    pw_assert
300    pw_stream
301    pw_stream.socket_stream
302    pw_system.config
303    pw_system.io.facade
304)
305
306pw_add_facade(pw_system.target_hooks INTERFACE
307  BACKEND
308    pw_system.target_hooks_BACKEND
309  HEADERS
310    public/pw_system/target_hooks.h
311  PUBLIC_INCLUDES
312    public
313  PUBLIC_DEPS
314    pw_thread.thread
315)
316
317pw_add_library(pw_system.stl_target_hooks STATIC
318  PRIVATE_DEPS
319    pw_system.config
320    pw_thread.sleep
321    pw_thread.thread
322    pw_thread_stl.thread
323  SOURCES
324    stl_target_hooks.cc
325)
326
327pw_add_library(pw_system.freertos_target_hooks STATIC
328  SOURCES
329    freertos_target_hooks.cc
330  PRIVATE_DEPS
331    pw_system.config
332    pw_thread.thread
333    pw_thread_freertos.thread
334    # TODO: b/234876414 - This should depend on FreeRTOS but our third parties
335    # currently do not have CMake support.
336)
337
338pw_add_library(pw_system.zephyr_target_hooks STATIC
339  SOURCES
340    zephyr_target_hooks.cc
341  PRIVATE_DEPS
342    pw_system.target_hooks.facade
343    pw_thread.thread
344    pw_thread_zephyr.thread
345)
346
347add_executable(pw_system.system_example EXCLUDE_FROM_ALL
348  example_user_app_init.cc
349)
350target_link_libraries(pw_system.system_example
351  PRIVATE
352    pw_system.init
353    pw_system.io
354    pw_system.log
355    pw_system.rpc_server
356    pw_system.work_queue
357    pw_log
358    pw_thread.sleep
359    pw_trace
360    pw_unit_test.rpc_service
361    pw_system.target_hooks
362    targets.host_device_simulator.boot
363)
364
365pw_add_library(pw_system.async STATIC
366  HEADERS
367    public/pw_system/system.h
368  PUBLIC_INCLUDES
369    public
370  SOURCES
371    pw_system_private/threads.h
372    system.cc
373    threads.cc
374  PUBLIC_DEPS
375    pw_allocator.allocator
376    pw_async2.dispatcher
377    pw_channel
378    pw_rpc.server
379  PRIVATE_DEPS
380    pw_system.async_packet_io
381    pw_system.file_manager
382    pw_system.file_service
383    pw_system.log
384    pw_system.thread_snapshot_service
385    pw_system.transfer_service
386    pw_system.work_queue
387    pw_allocator.best_fit_block_allocator
388    pw_allocator.synchronized_allocator
389    pw_async2.allocate_task
390    pw_async2.pend_func_task
391    pw_hdlc.router
392    pw_multibuf.simple_allocator
393    pw_rpc.pwpb.echo_service
394    pw_sync.interrupt_spin_lock
395    pw_thread.thread
396)
397
398pw_add_library(pw_system.async_packet_io STATIC
399  HEADERS
400    public/pw_system/internal/async_packet_io.h
401  PUBLIC_INCLUDES
402    public
403  SOURCES
404    async_packet_io.cc
405  PUBLIC_DEPS
406    pw_async2.dispatcher
407    pw_channel.forwarding_channel
408    pw_containers.inline_var_len_entry_queue
409    pw_hdlc.router
410    pw_multibuf.simple_allocator
411    pw_rpc.server
412    pw_sync.lock_annotations
413    pw_sync.mutex
414    pw_sync.thread_notification
415    pw_thread.thread
416    pw_thread.thread_core
417    pw_allocator.allocator
418    pw_channel
419    pw_multibuf
420  PRIVATE_DEPS
421    pw_system.config
422    pw_assert
423    pw_log
424)
425
426if((NOT "${pw_async2.dispatcher_BACKEND}" STREQUAL "") AND
427   (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows"))
428  # TODO: b/317922402 - Run on Windows when thread detaching is supported.
429  pw_add_test(pw_system.async_packet_io_test
430    SOURCES
431      async_packet_io_test.cc
432    PRIVATE_DEPS
433      pw_system.async_packet_io
434      pw_allocator.testing
435      pw_channel.loopback_channel
436      pw_multibuf.testing
437    GROUPS
438      modules
439      pw_system
440  )
441
442  pw_add_test(pw_system.system_async_test
443    SOURCES
444      system_async_test.cc
445    PRIVATE_DEPS
446      pw_system.async
447      pw_allocator.testing
448      pw_channel.loopback_channel
449      pw_multibuf.testing
450    GROUPS
451      modules
452      pw_system
453  )
454endif()
455
456
457add_executable(pw_system.system_async_host_example EXCLUDE_FROM_ALL
458  example_user_app_init.cc
459)
460target_link_libraries(pw_system.system_async_host_example
461  PRIVATE
462    pw_system.async
463    pw_channel.epoll_channel
464    pw_multibuf.testing
465    pw_trace
466    pw_unit_test.rpc_service
467    targets.host_device_simulator.boot
468)
469