• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_system.config
129    pw_trace_tokenized.config
130    pw_transfer
131    pw_transfer.proto.pwpb
132  SOURCES
133    transfer_handlers.cc
134)
135
136pw_add_library(pw_system.file_manager STATIC
137  HEADERS
138    public/pw_system/file_manager.h
139  PUBLIC_INCLUDES
140    public
141  PUBLIC_DEPS
142    pw_system.config
143    pw_system.transfer_handlers
144    pw_persistent_ram.flat_file_system_entry
145  PRIVATE_DEPS
146    pw_system.trace_service
147  SOURCES
148    file_manager.cc
149)
150
151pw_add_library(pw_system.transfer_service STATIC
152  HEADERS
153    public/pw_system/transfer_service.h
154  PUBLIC_INCLUDES
155    public
156  PUBLIC_DEPS
157    pw_transfer
158  PRIVATE_DEPS
159    pw_system.file_manager
160  SOURCES
161    transfer_service.cc
162)
163
164pw_add_library(pw_system.file_service STATIC
165  HEADERS
166    public/pw_system/file_service.h
167  PUBLIC_INCLUDES
168    public
169  PRIVATE_DEPS
170    pw_system.file_manager
171  SOURCES
172    file_service.cc
173)
174
175pw_add_library(pw_system.trace_service STATIC
176  HEADERS
177    public/pw_system/trace_service.h
178  PUBLIC_INCLUDES
179    public
180  PUBLIC_DEPS
181    pw_system.transfer_handlers
182  PRIVATE_DEPS
183    pw_persistent_ram
184    pw_trace_tokenized.trace_service_pwpb
185  SOURCES
186    trace_service.cc
187)
188
189pw_add_facade(pw_system.io INTERFACE
190  BACKEND
191    pw_system.io_BACKEND
192  HEADERS
193    public/pw_system/io.h
194  PUBLIC_INCLUDES
195    public
196  PUBLIC_DEPS
197    pw_stream
198)
199
200pw_add_facade(pw_system.device_handler INTERFACE
201  BACKEND
202    pw_system.device_handler_BACKEND
203  HEADERS
204    public/pw_system/device_handler.h
205  PUBLIC_INCLUDES
206    public
207  PUBLIC_DEPS
208    pw_snapshot.snapshot_proto.pwpb
209)
210
211pw_add_library(pw_system.unknown_device_handler STATIC
212  SOURCES
213    unknown_device_handler.cc
214  PRIVATE_DEPS
215    pw_system.device_handler.facade
216)
217
218pw_proto_library(pw_system.device_service_proto
219  SOURCES
220    pw_system_protos/device_service.proto
221  INPUTS
222    pw_system_protos/device_service.options
223)
224
225pw_add_library(pw_system.device_service_pwpb STATIC
226  HEADERS
227    public/pw_system/device_service_pwpb.h
228  PUBLIC_INCLUDES
229    public
230  SOURCES
231    device_service_pwpb.cc
232  PUBLIC_DEPS
233    pw_system.device_service_proto.pwpb_rpc
234  PRIVATE_DEPS
235    pw_system.device_handler
236)
237
238pw_add_library(pw_system.device_service STATIC
239  HEADERS
240    public/pw_system/device_service.h
241  PUBLIC_INCLUDES
242    public
243  SOURCES
244    device_service.cc
245  PRIVATE_DEPS
246    pw_system.device_service_pwpb
247)
248
249pw_add_library(pw_system.init STATIC
250  HEADERS
251    public/pw_system/init.h
252  PUBLIC_INCLUDES
253    public
254  SOURCES
255    init.cc
256  PRIVATE_DEPS
257    pw_system.device_service
258    pw_system.file_manager
259    pw_system.file_service
260    pw_system.log
261    pw_system.rpc_server
262    pw_system.target_hooks.facade
263    pw_system.thread_snapshot_service
264    pw_system.trace_service
265    pw_system.transfer_service
266    pw_system.work_queue
267    pw_metric.global
268    pw_metric.metric_service_pwpb
269    pw_rpc.pwpb.echo_service
270    pw_thread.thread
271    pw_trace
272)
273
274pw_add_library(pw_system.work_queue STATIC
275  HEADERS
276    public/pw_system/work_queue.h
277  PUBLIC_INCLUDES
278    public
279  SOURCES
280    work_queue.cc
281  PUBLIC_DEPS
282    pw_work_queue
283  PRIVATE_DEPS
284    pw_system.config
285)
286
287pw_add_library(pw_system.sys_io_target_io STATIC
288  PRIVATE_DEPS
289    pw_system.io.facade
290    pw_stream
291    pw_stream.sys_io_stream
292  SOURCES
293    sys_io_target_io.cc
294)
295
296pw_add_library(pw_system.socket_target_io STATIC
297  SOURCES
298    socket_target_io.cc
299  PRIVATE_DEPS
300    pw_assert
301    pw_stream
302    pw_stream.socket_stream
303    pw_system.config
304    pw_system.io.facade
305)
306
307pw_add_facade(pw_system.target_hooks INTERFACE
308  BACKEND
309    pw_system.target_hooks_BACKEND
310  HEADERS
311    public/pw_system/target_hooks.h
312  PUBLIC_INCLUDES
313    public
314  PUBLIC_DEPS
315    pw_thread.thread
316)
317
318pw_add_library(pw_system.stl_target_hooks STATIC
319  PRIVATE_DEPS
320    pw_system.config
321    pw_thread.sleep
322    pw_thread.thread
323    pw_thread_stl.thread
324  SOURCES
325    stl_target_hooks.cc
326)
327
328pw_add_library(pw_system.freertos_target_hooks STATIC
329  SOURCES
330    freertos_target_hooks.cc
331  PRIVATE_DEPS
332    pw_system.config
333    pw_thread.thread
334    pw_thread_freertos.thread
335    # TODO: b/234876414 - This should depend on FreeRTOS but our third parties
336    # currently do not have CMake support.
337)
338
339pw_add_library(pw_system.zephyr_target_hooks STATIC
340  SOURCES
341    zephyr_target_hooks.cc
342  PRIVATE_DEPS
343    pw_system.target_hooks.facade
344    pw_thread.thread
345    pw_thread_zephyr.thread
346)
347
348add_executable(pw_system.system_example EXCLUDE_FROM_ALL
349  example_user_app_init.cc
350)
351target_link_libraries(pw_system.system_example
352  PRIVATE
353    pw_system.init
354    pw_system.io
355    pw_system.log
356    pw_system.rpc_server
357    pw_system.work_queue
358    pw_log
359    pw_thread.sleep
360    pw_trace
361    pw_unit_test.rpc_service
362    pw_system.target_hooks
363    targets.host_device_simulator.boot
364)
365
366pw_add_library(pw_system.async STATIC
367  HEADERS
368    public/pw_system/system.h
369  PUBLIC_INCLUDES
370    public
371  SOURCES
372    pw_system_private/threads.h
373    system.cc
374    threads.cc
375  PUBLIC_DEPS
376    pw_allocator.allocator
377    pw_async2.dispatcher
378    pw_channel
379    pw_rpc.server
380  PRIVATE_DEPS
381    pw_system.async_packet_io
382    pw_system.file_manager
383    pw_system.file_service
384    pw_system.log
385    pw_system.thread_snapshot_service
386    pw_system.transfer_service
387    pw_system.work_queue
388    pw_allocator.best_fit_block_allocator
389    pw_allocator.synchronized_allocator
390    pw_async2.allocate_task
391    pw_async2.pend_func_task
392    pw_hdlc.router
393    pw_multibuf.simple_allocator
394    pw_rpc.pwpb.echo_service
395    pw_sync.interrupt_spin_lock
396    pw_thread.thread
397)
398
399pw_add_library(pw_system.async_packet_io STATIC
400  HEADERS
401    public/pw_system/internal/async_packet_io.h
402  PUBLIC_INCLUDES
403    public
404  SOURCES
405    async_packet_io.cc
406  PUBLIC_DEPS
407    pw_async2.dispatcher
408    pw_channel.forwarding_channel
409    pw_containers.inline_var_len_entry_queue
410    pw_hdlc.router
411    pw_multibuf.simple_allocator
412    pw_rpc.server
413    pw_sync.lock_annotations
414    pw_sync.mutex
415    pw_sync.thread_notification
416    pw_thread.thread
417    pw_thread.thread_core
418    pw_allocator.allocator
419    pw_channel
420    pw_multibuf
421  PRIVATE_DEPS
422    pw_system.config
423    pw_assert
424    pw_log
425)
426
427if((NOT "${pw_async2.dispatcher_BACKEND}" STREQUAL "") AND
428   (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows"))
429  # TODO: b/317922402 - Run on Windows when thread detaching is supported.
430  pw_add_test(pw_system.async_packet_io_test
431    SOURCES
432      async_packet_io_test.cc
433    PRIVATE_DEPS
434      pw_system.async_packet_io
435      pw_allocator.testing
436      pw_channel.loopback_channel
437      pw_multibuf.testing
438    GROUPS
439      modules
440      pw_system
441  )
442
443  pw_add_test(pw_system.system_async_test
444    SOURCES
445      system_async_test.cc
446    PRIVATE_DEPS
447      pw_system.async
448      pw_allocator.testing
449      pw_channel.loopback_channel
450      pw_multibuf.testing
451    GROUPS
452      modules
453      pw_system
454  )
455endif()
456
457
458add_executable(pw_system.system_async_host_example EXCLUDE_FROM_ALL
459  example_user_app_init.cc
460)
461target_link_libraries(pw_system.system_async_host_example
462  PRIVATE
463    pw_system.async
464    pw_channel.epoll_channel
465    pw_multibuf.testing
466    pw_trace
467    pw_unit_test.rpc_service
468    targets.host_device_simulator.boot
469)
470