blob: 8b6950b4cb41bbbcd5b7f5e8ed8e05d6478fc92f [file] [log] [blame]
# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
include($ENV{PW_ROOT}/pw_build/pigweed.cmake)
include($ENV{PW_ROOT}/pw_system/backend.cmake)
include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
# WARNING: Many of the dependencies in this file are missing and need to be
# added/updated. This is provided as a starting point, but currently does not
# work.
if("${pw_cpu_exception.entry_BACKEND}" STREQUAL "")
pw_add_library(pw_system.config INTERFACE
HEADERS
public/pw_system/config.h
PUBLIC_INCLUDES
public
PUBLIC_DEFINES
PW_SYSTEM_ENABLE_CRASH_HANDLER=0
)
else()
pw_add_library(pw_system.config INTERFACE
HEADERS
public/pw_system/config.h
PUBLIC_INCLUDES
public
)
endif()
pw_add_library(pw_system.log STATIC
PUBLIC_DEPS
pw_log_rpc.log_service
pw_log_rpc.rpc_log_drain_thread
pw_multisink
PRIVATE_DEPS
pw_system.config
pw_system.rpc_server
pw_log_rpc.rpc_log_drain
pw_sync.lock_annotations
pw_sync.mutex
HEADERS
public/pw_system/log.h
PUBLIC_INCLUDES
public
SOURCES
log.cc
)
pw_add_library(pw_system.log_backend STATIC
PRIVATE_DEPS
pw_system.config
pw_system.log
pw_bytes
pw_chrono.system_clock
pw_log.facade
pw_log.proto_utils
pw_log_string.handler.facade
pw_log_tokenized.handler
pw_log_tokenized.metadata
pw_multisink
pw_result
pw_sync.interrupt_spin_lock
pw_sync.lock_annotations
pw_tokenizer
SOURCES
log_backend.cc
)
pw_add_facade(pw_system.rpc_server INTERFACE
BACKEND
pw_system.rpc_server_BACKEND
HEADERS
public/pw_system/rpc_server.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_rpc.server
pw_system.config
pw_thread.thread_core
)
pw_add_library(pw_system.hdlc_rpc_server STATIC
PRIVATE_DEPS
pw_assert
pw_hdlc.default_addresses
pw_hdlc.rpc_channel_output
pw_sync.mutex
pw_system.config
pw_system.io
pw_system.rpc_server.facade
pw_system.sys_io_target_io
pw_thread.thread_core
pw_trace
pw_log
SOURCES
hdlc_rpc_server.cc
)
pw_add_library(pw_system.thread_snapshot_service STATIC
HEADERS
public/pw_system/thread_snapshot_service.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_thread.thread_snapshot_service
SOURCES
thread_snapshot_service.cc
)
pw_add_library(pw_system.transfer_handlers STATIC
HEADERS
public/pw_system/transfer_handlers.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_persistent_ram
pw_trace_tokenized.config
pw_transfer
pw_transfer.proto.pwpb
SOURCES
transfer_handlers.cc
)
pw_add_library(pw_system.file_manager STATIC
HEADERS
public/pw_system/file_manager.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_system.config
pw_system.transfer_handlers
pw_persistent_ram.flat_file_system_entry
PRIVATE_DEPS
pw_system.trace_service
SOURCES
file_manager.cc
)
pw_add_library(pw_system.transfer_service STATIC
HEADERS
public/pw_system/transfer_service.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_transfer
PRIVATE_DEPS
pw_system.file_manager
SOURCES
transfer_service.cc
)
pw_add_library(pw_system.file_service STATIC
HEADERS
public/pw_system/file_service.h
PUBLIC_INCLUDES
public
PRIVATE_DEPS
pw_system.file_manager
SOURCES
file_service.cc
)
pw_add_library(pw_system.trace_service STATIC
HEADERS
public/pw_system/trace_service.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_system.transfer_handlers
PRIVATE_DEPS
pw_persistent_ram
pw_trace_tokenized.trace_service_pwpb
SOURCES
trace_service.cc
)
pw_add_facade(pw_system.io INTERFACE
BACKEND
pw_system.io_BACKEND
HEADERS
public/pw_system/io.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_stream
)
pw_add_facade(pw_system.device_handler INTERFACE
BACKEND
pw_system.device_handler_BACKEND
HEADERS
public/pw_system/device_handler.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_snapshot.snapshot_proto.pwpb
)
pw_add_library(pw_system.unknown_device_handler STATIC
SOURCES
unknown_device_handler.cc
PRIVATE_DEPS
pw_system.device_handler.facade
)
pw_proto_library(pw_system.device_service_proto
SOURCES
pw_system_protos/device_service.proto
INPUTS
pw_system_protos/device_service.options
)
pw_add_library(pw_system.device_service_pwpb STATIC
HEADERS
public/pw_system/device_service_pwpb.h
PUBLIC_INCLUDES
public
SOURCES
device_service_pwpb.cc
PUBLIC_DEPS
pw_system.device_service_proto.pwpb_rpc
PRIVATE_DEPS
pw_system.device_handler
)
pw_add_library(pw_system.device_service STATIC
HEADERS
public/pw_system/device_service.h
PUBLIC_INCLUDES
public
SOURCES
device_service.cc
PRIVATE_DEPS
pw_system.device_service_pwpb
)
pw_add_library(pw_system.init STATIC
HEADERS
public/pw_system/init.h
PUBLIC_INCLUDES
public
SOURCES
init.cc
PRIVATE_DEPS
pw_system.device_service
pw_system.file_manager
pw_system.file_service
pw_system.log
pw_system.rpc_server
pw_system.target_hooks.facade
pw_system.thread_snapshot_service
pw_system.trace_service
pw_system.transfer_service
pw_system.work_queue
pw_metric.global
pw_metric.metric_service_pwpb
pw_rpc.pwpb.echo_service
pw_thread.thread
pw_trace
)
pw_add_library(pw_system.work_queue STATIC
HEADERS
public/pw_system/work_queue.h
PUBLIC_INCLUDES
public
SOURCES
work_queue.cc
PUBLIC_DEPS
pw_work_queue
PRIVATE_DEPS
pw_system.config
)
pw_add_library(pw_system.sys_io_target_io STATIC
PRIVATE_DEPS
pw_system.io.facade
pw_stream
pw_stream.sys_io_stream
SOURCES
sys_io_target_io.cc
)
pw_add_library(pw_system.socket_target_io STATIC
SOURCES
socket_target_io.cc
PRIVATE_DEPS
pw_assert
pw_stream
pw_stream.socket_stream
pw_system.config
pw_system.io.facade
)
pw_add_facade(pw_system.target_hooks INTERFACE
BACKEND
pw_system.target_hooks_BACKEND
HEADERS
public/pw_system/target_hooks.h
PUBLIC_INCLUDES
public
PUBLIC_DEPS
pw_thread.thread
)
pw_add_library(pw_system.stl_target_hooks STATIC
PRIVATE_DEPS
pw_system.config
pw_thread.sleep
pw_thread.thread
pw_thread_stl.thread
SOURCES
stl_target_hooks.cc
)
pw_add_library(pw_system.freertos_target_hooks STATIC
SOURCES
freertos_target_hooks.cc
PRIVATE_DEPS
pw_system.config
pw_thread.thread
pw_thread_freertos.thread
# TODO: b/234876414 - This should depend on FreeRTOS but our third parties
# currently do not have CMake support.
)
pw_add_library(pw_system.zephyr_target_hooks STATIC
SOURCES
zephyr_target_hooks.cc
PRIVATE_DEPS
pw_system.target_hooks.facade
pw_thread.thread
pw_thread_zephyr.thread
)
add_executable(pw_system.system_example EXCLUDE_FROM_ALL
example_user_app_init.cc
)
target_link_libraries(pw_system.system_example
PRIVATE
pw_system.init
pw_system.io
pw_system.log
pw_system.rpc_server
pw_system.work_queue
pw_log
pw_thread.sleep
pw_trace
pw_unit_test.rpc_service
pw_system.target_hooks
targets.host_device_simulator.boot
)
pw_add_library(pw_system.async STATIC
HEADERS
public/pw_system/system.h
PUBLIC_INCLUDES
public
SOURCES
pw_system_private/threads.h
system.cc
threads.cc
PUBLIC_DEPS
pw_allocator.allocator
pw_async2.dispatcher
pw_channel
pw_rpc.server
PRIVATE_DEPS
pw_system.async_packet_io
pw_system.file_manager
pw_system.file_service
pw_system.log
pw_system.thread_snapshot_service
pw_system.transfer_service
pw_system.work_queue
pw_allocator.best_fit_block_allocator
pw_allocator.synchronized_allocator
pw_async2.allocate_task
pw_async2.pend_func_task
pw_hdlc.router
pw_multibuf.simple_allocator
pw_rpc.pwpb.echo_service
pw_sync.interrupt_spin_lock
pw_thread.thread
)
pw_add_library(pw_system.async_packet_io STATIC
HEADERS
public/pw_system/internal/async_packet_io.h
PUBLIC_INCLUDES
public
SOURCES
async_packet_io.cc
PUBLIC_DEPS
pw_async2.dispatcher
pw_channel.forwarding_channel
pw_containers.inline_var_len_entry_queue
pw_hdlc.router
pw_multibuf.simple_allocator
pw_rpc.server
pw_sync.lock_annotations
pw_sync.mutex
pw_sync.thread_notification
pw_thread.thread
pw_thread.thread_core
pw_allocator.allocator
pw_channel
pw_multibuf
PRIVATE_DEPS
pw_system.config
pw_assert
pw_log
)
if((NOT "${pw_async2.dispatcher_BACKEND}" STREQUAL "") AND
(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows"))
# TODO: b/317922402 - Run on Windows when thread detaching is supported.
pw_add_test(pw_system.async_packet_io_test
SOURCES
async_packet_io_test.cc
PRIVATE_DEPS
pw_system.async_packet_io
pw_allocator.testing
pw_channel.loopback_channel
pw_multibuf.testing
GROUPS
modules
pw_system
)
pw_add_test(pw_system.system_async_test
SOURCES
system_async_test.cc
PRIVATE_DEPS
pw_system.async
pw_allocator.testing
pw_channel.loopback_channel
pw_multibuf.testing
GROUPS
modules
pw_system
)
endif()
add_executable(pw_system.system_async_host_example EXCLUDE_FROM_ALL
example_user_app_init.cc
)
target_link_libraries(pw_system.system_async_host_example
PRIVATE
pw_system.async
pw_channel.epoll_channel
pw_multibuf.testing
pw_trace
pw_unit_test.rpc_service
targets.host_device_simulator.boot
)