# 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_thread/backend.cmake) pw_add_module_config(pw_thread_CONFIG) pw_add_library(pw_thread.config INTERFACE HEADERS public/pw_thread/config.h PUBLIC_INCLUDES public PUBLIC_DEPS ${pw_thread_CONFIG} ) pw_add_facade(pw_thread.id INTERFACE BACKEND pw_thread.id_BACKEND HEADERS public/pw_thread/id.h PUBLIC_INCLUDES public ) pw_add_facade(pw_thread.sleep STATIC BACKEND pw_thread.sleep_BACKEND HEADERS public/pw_thread/sleep.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_chrono.system_clock pw_preprocessor SOURCES sleep.cc ) pw_add_facade(pw_thread.thread STATIC BACKEND pw_thread.thread_BACKEND HEADERS public/pw_thread/detached_thread.h public/pw_thread/thread.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_function pw_thread.thread_core pw_thread.id SOURCES thread.cc ) pw_add_library(pw_thread.thread_core INTERFACE HEADERS public/pw_thread/thread_core.h PUBLIC_INCLUDES public ) pw_add_library(pw_thread.thread_info INTERFACE HEADERS public/pw_thread/thread_info.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_span ) pw_add_facade(pw_thread.thread_iteration INTERFACE BACKEND pw_thread.thread_iteration_BACKEND HEADERS public/pw_thread/thread_iteration.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_thread.thread_info pw_function pw_status ) pw_add_library(pw_thread.deprecated_or_new_thread_function INTERFACE HEADERS public/pw_thread/deprecated_or_new_thread_function.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_function ) pw_add_test(pw_thread.deprecated_or_new_thread_function_test SOURCES deprecated_or_new_thread_function_test.cc PRIVATE_DEPS pw_thread.deprecated_or_new_thread_function GROUPS modules pw_thread ) pw_proto_library(pw_thread.thread_snapshot_service_cc SOURCES pw_thread_protos/thread_snapshot_service.proto DEPS pw_thread.protos ) pw_add_library(pw_thread.thread_snapshot_service STATIC HEADERS public/pw_thread/thread_snapshot_service.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_protobuf pw_rpc.raw.server_api pw_span pw_status pw_thread.config pw_thread.protos.pwpb pw_thread.thread_info pw_thread.thread_iteration pw_thread.thread_snapshot_service_cc.pwpb pw_thread.thread_snapshot_service_cc.raw_rpc SOURCES pw_thread_private/thread_snapshot_service.h thread_snapshot_service.cc ) pw_add_facade(pw_thread.test_thread_context INTERFACE BACKEND pw_thread.test_thread_context_BACKEND HEADERS public/pw_thread/test_thread_context.h PUBLIC_INCLUDES public ) pw_add_facade(pw_thread.yield STATIC BACKEND pw_thread.yield_BACKEND HEADERS public/pw_thread/yield.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_preprocessor SOURCES yield.cc ) pw_add_library(pw_thread.snapshot STATIC HEADERS public/pw_thread/snapshot.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_bytes pw_function pw_protobuf pw_status pw_thread.protos.pwpb SOURCES snapshot.cc PRIVATE_DEPS pw_thread.config pw_log ) pw_proto_library(pw_thread.protos SOURCES pw_thread_protos/thread.proto DEPS pw_tokenizer.proto ) if(NOT "${pw_thread.id_BACKEND}" STREQUAL "") pw_add_test(pw_thread.id_facade_test SOURCES id_facade_test.cc PRIVATE_DEPS pw_thread.id GROUPS modules pw_thread ) endif() if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND (NOT "${pw_thread.sleep_BACKEND}" STREQUAL "")) pw_add_test(pw_thread.sleep_facade_test SOURCES sleep_facade_test.cc sleep_facade_test_c.c PRIVATE_DEPS pw_chrono.system_clock pw_thread.id pw_thread.sleep GROUPS modules pw_thread ) endif() pw_add_library(pw_thread.non_portable_test_thread_options INTERFACE HEADERS public/pw_thread/non_portable_test_thread_options.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_thread.thread ) # To instantiate this facade test based on a selected backend to provide # test_threads you can create a pw_add_test target which depends on this # target and a target which provides the implementation of # test_threads. See pw_thread_stl.thread_backend_test as an example. pw_add_library(pw_thread.thread_facade_test STATIC SOURCES thread_facade_test.cc PRIVATE_DEPS pw_thread.id pw_thread.sleep pw_thread.non_portable_test_thread_options pw_thread.thread pw_sync.binary_semaphore pw_unit_test ) if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND (NOT "${pw_thread.yield_BACKEND}" STREQUAL "")) pw_add_test(pw_thread.yield_facade_test SOURCES yield_facade_test.cc yield_facade_test_c.c PRIVATE_DEPS pw_thread.id pw_thread.yield GROUPS modules pw_thread ) endif() if(NOT "${pw_thread.test_thread_context_BACKEND}" STREQUAL "") pw_add_test(pw_thread.test_thread_context_facade_test SOURCES test_thread_context_facade_test.cc PRIVATE_DEPS pw_thread.test_thread_context pw_thread.thread pw_sync.binary_semaphore ) endif()