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