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