1# Copyright 2023 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_async2/backend.cmake) 17 18pw_add_library(pw_async2.poll INTERFACE 19 HEADERS 20 public/pw_async2/poll.h 21 public/pw_async2/internal/poll_internal.h 22 PUBLIC_DEPS 23 pw_polyfill 24 pw_string.to_string 25 pw_third_party.fuchsia.stdcompat 26 PUBLIC_INCLUDES 27 public 28) 29 30pw_add_test(pw_async2.poll_test 31 SOURCES 32 poll_test.cc 33 PRIVATE_DEPS 34 pw_async2.poll 35) 36 37pw_add_library(pw_async2.dispatcher_base STATIC 38 HEADERS 39 public/pw_async2/dispatcher_base.h 40 PUBLIC_INCLUDES 41 public 42 PUBLIC_DEPS 43 pw_assert.assert 44 pw_assert.check 45 pw_async2.poll 46 pw_chrono.system_clock 47 pw_sync.interrupt_spin_lock 48 pw_sync.lock_annotations 49 pw_sync.mutex 50 pw_toolchain.no_destructor 51 SOURCES 52 dispatcher_base.cc 53) 54 55pw_add_facade(pw_async2.dispatcher INTERFACE 56 BACKEND 57 pw_async2.dispatcher_BACKEND 58 HEADERS 59 public/pw_async2/dispatcher.h 60 PUBLIC_INCLUDES 61 public 62 PUBLIC_DEPS 63 pw_async2.dispatcher_base 64) 65 66pw_add_test(pw_async2.dispatcher_test 67 SOURCES 68 dispatcher_test.cc 69 PRIVATE_DEPS 70 pw_async2.dispatcher 71 pw_containers.vector 72) 73 74pw_add_test(pw_async2.dispatcher_thread_test 75 SOURCES 76 dispatcher_thread_test.cc 77 PRIVATE_DEPS 78 pw_async2.dispatcher 79 pw_function 80 pw_thread.sleep 81 pw_thread.thread 82) 83 84pw_add_library(pw_async2.pend_func_task INTERFACE 85 HEADERS 86 public/pw_async2/pend_func_task.h 87 PUBLIC_DEPS 88 pw_async2.dispatcher 89 pw_function 90 PUBLIC_INCLUDES 91 public 92) 93 94pw_add_test(pw_async2.pend_func_task_test 95 SOURCES 96 pend_func_task_test.cc 97 PRIVATE_DEPS 98 pw_async2.pend_func_task 99) 100 101pw_add_library(pw_async2.pendable_as_task INTERFACE 102 HEADERS 103 public/pw_async2/pendable_as_task.h 104 PUBLIC_DEPS 105 pw_async2.dispatcher 106 PUBLIC_INCLUDES 107 public 108) 109 110pw_add_test(pw_async2.pendable_as_task_test 111 SOURCES 112 pendable_as_task_test.cc 113 PRIVATE_DEPS 114 pw_async2.pendable_as_task 115) 116 117pw_add_library(pw_async2.allocate_task INTERFACE 118 HEADERS 119 public/pw_async2/allocate_task.h 120 PUBLIC_DEPS 121 pw_async2.dispatcher 122 pw_allocator.allocator 123 PUBLIC_INCLUDES 124 public 125) 126 127pw_add_test(pw_async2.allocate_task_test 128 SOURCES 129 allocate_task_test.cc 130 PRIVATE_DEPS 131 pw_async2.allocate_task 132 pw_allocator.testing 133) 134 135pw_add_library(pw_async2.once_sender INTERFACE 136 HEADERS 137 public/pw_async2/once_sender.h 138 PUBLIC_DEPS 139 pw_async2.dispatcher 140 pw_function 141 PUBLIC_INCLUDES 142 public 143) 144 145pw_add_test(pw_async2.once_sender_test 146 SOURCES 147 once_sender_test.cc 148 PRIVATE_DEPS 149 pw_async2.once_sender 150 pw_containers.vector 151) 152 153if("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES) 154 pw_add_library(pw_async2.coro STATIC 155 HEADERS 156 public/pw_async2/coro.h 157 SOURCES 158 coro.cc 159 PRIVATE_DEPS 160 pw_log 161 PUBLIC_DEPS 162 pw_allocator.allocator 163 pw_async2.dispatcher 164 pw_function 165 PUBLIC_INCLUDES 166 public 167 ) 168 169 pw_add_test(pw_async2.coro_test 170 SOURCES 171 coro_test.cc 172 PRIVATE_DEPS 173 pw_allocator.null_allocator 174 pw_allocator.testing 175 pw_async2.coro 176 ) 177 178 pw_add_library(pw_async2.coro_or_else_task INTERFACE 179 HEADERS 180 public/pw_async2/coro.h 181 PUBLIC_DEPS 182 pw_async2.coro 183 pw_async2.dispatcher 184 pw_function 185 PUBLIC_INCLUDES 186 public 187 ) 188 189 pw_add_test(pw_async2.coro_or_else_task_test 190 SOURCES 191 coro_or_else_task_test.cc 192 PRIVATE_DEPS 193 pw_async2.coro 194 pw_async2.coro_or_else_task 195 pw_async2.dispatcher 196 pw_allocator.null_allocator 197 pw_allocator.testing 198 ) 199 200 pw_add_library(pw_async2.pend_func_awaitable INTERFACE 201 HEADERS 202 public/pw_async2/pend_func_task.h 203 PUBLIC_DEPS 204 pw_async2.dispatcher 205 pw_async2.poll 206 pw_function 207 PUBLIC_INCLUDES 208 public 209 ) 210 211 pw_add_test(pw_async2.pend_func_awaitable_test 212 SOURCES 213 pend_func_awaitable_test.cc 214 PRIVATE_DEPS 215 pw_async2.coro 216 pw_async2.coro_or_else_task 217 pw_async2.dispatcher 218 pw_async2.pend_func_awaitable 219 pw_async2.poll 220 pw_allocator.testing 221 pw_function 222 ) 223endif() 224 225 226pw_add_library(pw_async2.time_provider STATIC 227 HEADERS 228 public/pw_async2/time_provider.h 229 SOURCES 230 time_provider.cc 231 PUBLIC_DEPS 232 pw_async2.dispatcher 233 pw_containers.intrusive_list 234 pw_sync.interrupt_spin_lock 235 PUBLIC_INCLUDES 236 public 237) 238 239pw_add_library(pw_async2.system_time_provider STATIC 240 HEADERS 241 public/pw_async2/system_time_provider.h 242 SOURCES 243 system_time_provider.cc 244 PUBLIC_DEPS 245 pw_chrono.system_clock 246 pw_async2.time_provider 247 PRIVATE_DEPS 248 pw_chrono.system_timer 249 pw_toolchain.no_destructor 250 PUBLIC_INCLUDES 251 public 252) 253 254if((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND 255 (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL "")) 256 pw_add_test(pw_async2.system_time_provider_test 257 SOURCES 258 system_time_provider_test.cc 259 PRIVATE_DEPS 260 pw_async2.system_time_provider 261 pw_chrono.system_clock 262 GROUPS 263 modules 264 pw_async2 265 ) 266endif() 267 268pw_add_library(pw_async2.simulated_time_provider INTERFACE 269 HEADERS 270 public/pw_async2/simulated_time_provider.h 271 PUBLIC_DEPS 272 pw_async2.time_provider 273 pw_sync.interrupt_spin_lock 274) 275 276if((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND 277 (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL "")) 278 pw_add_test(pw_async2.simulated_time_provider_test 279 SOURCES 280 simulated_time_provider_test.cc 281 PRIVATE_DEPS 282 pw_async2.simulated_time_provider 283 pw_chrono.system_clock 284 GROUPS 285 modules 286 pw_async2 287 ) 288endif() 289 290pw_add_library(pw_async2.enqueue_heap_func INTERFACE 291 HEADERS 292 public/pw_async2/enqueue_heap_func.h 293 PUBLIC_DEPS 294 pw_async2.dispatcher 295) 296 297pw_add_test(pw_async2.enqueue_heap_func_test 298 SOURCES 299 enqueue_heap_func_test.cc 300 PRIVATE_DEPS 301 pw_async2.dispatcher 302 pw_async2.enqueue_heap_func 303 GROUPS 304 modules 305 pw_async2 306) 307 308pw_add_library(pw_async2.join INTERFACE 309 HEADERS 310 public/pw_async2/join.h 311 PUBLIC_DEPS 312 pw_async2.dispatcher 313) 314 315pw_add_test(pw_async2.join_test 316 SOURCES 317 join_test.cc 318 PRIVATE_DEPS 319 pw_async2.dispatcher 320 pw_async2.join 321 GROUPS 322 modules 323 pw_async2 324) 325 326add_subdirectory(examples) 327