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_thread/backend.cmake) 17 18pw_add_module_config(pw_thread_CONFIG) 19 20pw_add_library(pw_thread.config INTERFACE 21 HEADERS 22 public/pw_thread/config.h 23 PUBLIC_INCLUDES 24 public 25 PUBLIC_DEPS 26 ${pw_thread_CONFIG} 27) 28 29pw_add_facade(pw_thread.id INTERFACE 30 BACKEND 31 pw_thread.id_BACKEND 32 HEADERS 33 public/pw_thread/id.h 34 PUBLIC_INCLUDES 35 public 36) 37 38pw_add_facade(pw_thread.sleep STATIC 39 BACKEND 40 pw_thread.sleep_BACKEND 41 HEADERS 42 public/pw_thread/sleep.h 43 PUBLIC_INCLUDES 44 public 45 PUBLIC_DEPS 46 pw_chrono.system_clock 47 pw_preprocessor 48 SOURCES 49 sleep.cc 50) 51 52pw_add_facade(pw_thread.thread STATIC 53 BACKEND 54 pw_thread.thread_BACKEND 55 HEADERS 56 public/pw_thread/detached_thread.h 57 public/pw_thread/thread.h 58 PUBLIC_INCLUDES 59 public 60 PUBLIC_DEPS 61 pw_function 62 pw_thread.thread_core 63 pw_thread.id 64 SOURCES 65 thread.cc 66) 67 68pw_add_library(pw_thread.thread_core INTERFACE 69 HEADERS 70 public/pw_thread/thread_core.h 71 PUBLIC_INCLUDES 72 public 73) 74 75pw_add_library(pw_thread.thread_info INTERFACE 76 HEADERS 77 public/pw_thread/thread_info.h 78 PUBLIC_INCLUDES 79 public 80 PUBLIC_DEPS 81 pw_span 82) 83 84pw_add_facade(pw_thread.thread_iteration INTERFACE 85 BACKEND 86 pw_thread.thread_iteration_BACKEND 87 HEADERS 88 public/pw_thread/thread_iteration.h 89 PUBLIC_INCLUDES 90 public 91 PUBLIC_DEPS 92 pw_thread.thread_info 93 pw_function 94 pw_status 95) 96 97pw_add_library(pw_thread.deprecated_or_new_thread_function INTERFACE 98 HEADERS 99 public/pw_thread/deprecated_or_new_thread_function.h 100 PUBLIC_INCLUDES 101 public 102 PUBLIC_DEPS 103 pw_function 104) 105 106pw_add_test(pw_thread.deprecated_or_new_thread_function_test 107 SOURCES 108 deprecated_or_new_thread_function_test.cc 109 PRIVATE_DEPS 110 pw_thread.deprecated_or_new_thread_function 111 GROUPS 112 modules 113 pw_thread 114) 115 116pw_proto_library(pw_thread.thread_snapshot_service_cc 117 SOURCES 118 pw_thread_protos/thread_snapshot_service.proto 119 DEPS 120 pw_thread.protos 121) 122 123pw_add_library(pw_thread.thread_snapshot_service STATIC 124 HEADERS 125 public/pw_thread/thread_snapshot_service.h 126 PUBLIC_INCLUDES 127 public 128 PUBLIC_DEPS 129 pw_protobuf 130 pw_rpc.raw.server_api 131 pw_span 132 pw_status 133 pw_thread.config 134 pw_thread.protos.pwpb 135 pw_thread.thread_info 136 pw_thread.thread_iteration 137 pw_thread.thread_snapshot_service_cc.pwpb 138 pw_thread.thread_snapshot_service_cc.raw_rpc 139 SOURCES 140 pw_thread_private/thread_snapshot_service.h 141 thread_snapshot_service.cc 142) 143 144pw_add_facade(pw_thread.test_thread_context INTERFACE 145 BACKEND 146 pw_thread.test_thread_context_BACKEND 147 HEADERS 148 public/pw_thread/test_thread_context.h 149 PUBLIC_INCLUDES 150 public 151) 152 153pw_add_facade(pw_thread.yield STATIC 154 BACKEND 155 pw_thread.yield_BACKEND 156 HEADERS 157 public/pw_thread/yield.h 158 PUBLIC_INCLUDES 159 public 160 PUBLIC_DEPS 161 pw_preprocessor 162 SOURCES 163 yield.cc 164) 165 166pw_add_library(pw_thread.snapshot STATIC 167 HEADERS 168 public/pw_thread/snapshot.h 169 PUBLIC_INCLUDES 170 public 171 PUBLIC_DEPS 172 pw_bytes 173 pw_function 174 pw_protobuf 175 pw_status 176 pw_thread.protos.pwpb 177 SOURCES 178 snapshot.cc 179 PRIVATE_DEPS 180 pw_thread.config 181 pw_log 182) 183 184pw_proto_library(pw_thread.protos 185 SOURCES 186 pw_thread_protos/thread.proto 187 DEPS 188 pw_tokenizer.proto 189) 190 191if(NOT "${pw_thread.id_BACKEND}" STREQUAL "") 192 pw_add_test(pw_thread.id_facade_test 193 SOURCES 194 id_facade_test.cc 195 PRIVATE_DEPS 196 pw_thread.id 197 GROUPS 198 modules 199 pw_thread 200 ) 201endif() 202 203if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND 204 (NOT "${pw_thread.sleep_BACKEND}" STREQUAL "")) 205 pw_add_test(pw_thread.sleep_facade_test 206 SOURCES 207 sleep_facade_test.cc 208 sleep_facade_test_c.c 209 PRIVATE_DEPS 210 pw_chrono.system_clock 211 pw_thread.id 212 pw_thread.sleep 213 GROUPS 214 modules 215 pw_thread 216 ) 217endif() 218 219pw_add_library(pw_thread.non_portable_test_thread_options INTERFACE 220 HEADERS 221 public/pw_thread/non_portable_test_thread_options.h 222 PUBLIC_INCLUDES 223 public 224 PUBLIC_DEPS 225 pw_thread.thread 226) 227 228# To instantiate this facade test based on a selected backend to provide 229# test_threads you can create a pw_add_test target which depends on this 230# target and a target which provides the implementation of 231# test_threads. See pw_thread_stl.thread_backend_test as an example. 232pw_add_library(pw_thread.thread_facade_test STATIC 233 SOURCES 234 thread_facade_test.cc 235 PRIVATE_DEPS 236 pw_thread.id 237 pw_thread.sleep 238 pw_thread.non_portable_test_thread_options 239 pw_thread.thread 240 pw_sync.binary_semaphore 241 pw_unit_test 242) 243 244if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND 245 (NOT "${pw_thread.yield_BACKEND}" STREQUAL "")) 246 pw_add_test(pw_thread.yield_facade_test 247 SOURCES 248 yield_facade_test.cc 249 yield_facade_test_c.c 250 PRIVATE_DEPS 251 pw_thread.id 252 pw_thread.yield 253 GROUPS 254 modules 255 pw_thread 256 ) 257endif() 258 259if(NOT "${pw_thread.test_thread_context_BACKEND}" STREQUAL "") 260 pw_add_test(pw_thread.test_thread_context_facade_test 261 SOURCES 262 test_thread_context_facade_test.cc 263 PRIVATE_DEPS 264 pw_thread.test_thread_context 265 pw_thread.thread 266 pw_sync.binary_semaphore 267 ) 268endif() 269