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