1# Copyright 2020 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_sync/backend.cmake) 17 18pw_add_facade(pw_sync.binary_semaphore STATIC 19 BACKEND 20 pw_sync.binary_semaphore_BACKEND 21 HEADERS 22 public/pw_sync/binary_semaphore.h 23 PUBLIC_INCLUDES 24 public 25 PUBLIC_DEPS 26 pw_chrono.system_clock 27 pw_preprocessor 28 SOURCES 29 binary_semaphore.cc 30) 31 32pw_add_facade(pw_sync.counting_semaphore STATIC 33 BACKEND 34 pw_sync.counting_semaphore_BACKEND 35 HEADERS 36 public/pw_sync/counting_semaphore.h 37 PUBLIC_INCLUDES 38 public 39 PUBLIC_DEPS 40 pw_chrono.system_clock 41 pw_preprocessor 42 SOURCES 43 counting_semaphore.cc 44) 45 46pw_add_library(pw_sync.lock_annotations INTERFACE 47 HEADERS 48 public/pw_sync/lock_annotations.h 49 PUBLIC_INCLUDES 50 public 51 PUBLIC_DEPS 52 pw_preprocessor 53) 54 55pw_add_library(pw_sync.lock_traits INTERFACE 56 HEADERS 57 public/pw_sync/lock_traits.h 58 PUBLIC_INCLUDES 59 public 60) 61 62pw_add_library(pw_sync.borrow INTERFACE 63 HEADERS 64 public/pw_sync/borrow.h 65 PUBLIC_INCLUDES 66 public 67 PUBLIC_DEPS 68 pw_assert 69 pw_sync.lock_annotations 70 pw_sync.lock_traits 71 pw_sync.virtual_basic_lockable 72) 73 74pw_add_library(pw_sync.timed_borrow INTERFACE 75 HEADERS 76 public/pw_sync/timed_borrow.h 77 PUBLIC_INCLUDES 78 public 79 PUBLIC_DEPS 80 pw_chrono.system_clock 81 pw_sync.borrow 82 pw_sync.lock_annotations 83 pw_sync.lock_traits 84 pw_sync.virtual_basic_lockable 85) 86 87pw_add_library(pw_sync.inline_borrowable INTERFACE 88 HEADERS 89 public/pw_sync/inline_borrowable.h 90 public/pw_sync/internal/borrowable_storage.h 91 PUBLIC_INCLUDES 92 public 93 PUBLIC_DEPS 94 pw_sync.borrow 95 pw_sync.mutex 96 pw_sync.virtual_basic_lockable 97) 98 99pw_add_library(pw_sync.virtual_basic_lockable INTERFACE 100 HEADERS 101 public/pw_sync/virtual_basic_lockable.h 102 PUBLIC_INCLUDES 103 public 104 PUBLIC_DEPS 105 pw_polyfill 106 pw_sync.lock_annotations 107) 108 109pw_add_facade(pw_sync.mutex STATIC 110 BACKEND 111 pw_sync.mutex_BACKEND 112 HEADERS 113 public/pw_sync/mutex.h 114 PUBLIC_INCLUDES 115 public 116 PUBLIC_DEPS 117 pw_sync.lock_annotations 118 pw_sync.virtual_basic_lockable 119 pw_preprocessor 120 SOURCES 121 mutex.cc 122) 123 124pw_add_facade(pw_sync.timed_mutex STATIC 125 BACKEND 126 pw_sync.timed_mutex_BACKEND 127 HEADERS 128 public/pw_sync/timed_mutex.h 129 PUBLIC_INCLUDES 130 public 131 PUBLIC_DEPS 132 pw_chrono.system_clock 133 pw_preprocessor 134 pw_sync.mutex 135 pw_sync.virtual_basic_lockable 136 SOURCES 137 timed_mutex.cc 138) 139 140pw_add_facade(pw_sync.recursive_mutex STATIC 141 BACKEND 142 pw_sync.recursive_mutex_BACKEND 143 HEADERS 144 public/pw_sync/recursive_mutex.h 145 PUBLIC_INCLUDES 146 public 147 PUBLIC_DEPS 148 pw_sync.lock_annotations 149 pw_preprocessor 150 SOURCES 151 recursive_mutex.cc 152) 153 154pw_add_facade(pw_sync.interrupt_spin_lock STATIC 155 BACKEND 156 pw_sync.interrupt_spin_lock_BACKEND 157 HEADERS 158 public/pw_sync/interrupt_spin_lock.h 159 PUBLIC_INCLUDES 160 public 161 PUBLIC_DEPS 162 pw_sync.lock_annotations 163 pw_sync.virtual_basic_lockable 164 pw_preprocessor 165 SOURCES 166 interrupt_spin_lock.cc 167) 168 169pw_add_facade(pw_sync.thread_notification INTERFACE 170 BACKEND 171 pw_sync.thread_notification_BACKEND 172 HEADERS 173 public/pw_sync/thread_notification.h 174 PUBLIC_INCLUDES 175 public 176) 177 178pw_add_facade(pw_sync.timed_thread_notification INTERFACE 179 BACKEND 180 pw_sync.timed_thread_notification_BACKEND 181 HEADERS 182 public/pw_sync/timed_thread_notification.h 183 PUBLIC_INCLUDES 184 public 185 PUBLIC_DEPS 186 pw_sync.thread_notification 187 pw_chrono.system_clock 188) 189 190# This target provides the backend for pw::sync::ThreadNotification based on 191# pw::sync::BinarySemaphore. 192pw_add_library(pw_sync.binary_semaphore_thread_notification_backend INTERFACE 193 HEADERS 194 public/pw_sync/backends/binary_semaphore_thread_notification_inline.h 195 public/pw_sync/backends/binary_semaphore_thread_notification_native.h 196 public_overrides/pw_sync_backend/thread_notification_inline.h 197 public_overrides/pw_sync_backend/thread_notification_native.h 198 PUBLIC_INCLUDES 199 public 200 public_overrides 201 PUBLIC_DEPS 202 pw_sync.binary_semaphore 203) 204 205# This target provides the backend for pw::sync::TimedThreadNotification based 206# on pw::sync::BinarySemaphore. 207pw_add_library(pw_sync.binary_semaphore_timed_thread_notification_backend INTERFACE 208 HEADERS 209 public/pw_sync/backends/binary_semaphore_timed_thread_notification_inline.h 210 public_overrides/pw_sync_backend/timed_thread_notification_inline.h 211 PUBLIC_INCLUDES 212 public 213 public_overrides 214 PUBLIC_DEPS 215 pw_chrono.system_clock 216 pw_sync.binary_semaphore_thread_notification_backend 217) 218 219pw_add_library(pw_sync.yield_core INTERFACE 220 HEADERS 221 public/pw_sync/yield_core.h 222 PUBLIC_INCLUDES 223 public 224) 225 226pw_add_facade(pw_sync.condition_variable INTERFACE 227 BACKEND 228 pw_sync.condition_variable_BACKEND 229 HEADERS 230 public/pw_sync/condition_variable.h 231 PUBLIC_INCLUDES 232 public 233 PUBLIC_DEPS 234 pw_chrono.system_clock 235 pw_sync.mutex 236) 237 238pw_add_library(pw_sync.lock_testing STATIC 239 HEADERS 240 public/pw_sync/lock_testing.h 241 SOURCES 242 lock_testing.cc 243 PUBLIC_INCLUDES 244 public 245 PUBLIC_DEPS 246 pw_chrono.system_clock 247 pw_sync.virtual_basic_lockable 248 PRIVATE_DEPS 249 pw_assert 250) 251 252pw_add_library(pw_sync.borrow_testing INTERFACE 253 HEADERS 254 public/pw_sync/borrow_testing.h 255 PUBLIC_DEPS 256 pw_sync.borrow 257 pw_sync.lock_traits 258) 259 260pw_add_library(pw_sync.timed_borrow_testing INTERFACE 261 HEADERS 262 public/pw_sync/timed_borrow_testing.h 263 PUBLIC_DEPS 264 pw_sync.borrow_testing 265 pw_sync.timed_borrow 266) 267 268if(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") 269 pw_add_test(pw_sync.lock_traits_test 270 SOURCES 271 lock_traits_test.cc 272 PRIVATE_DEPS 273 pw_sync.lock_testing 274 pw_sync.lock_traits 275 ) 276endif() 277 278if(NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") 279 pw_add_test(pw_sync.borrow_test 280 SOURCES 281 borrow_test.cc 282 PRIVATE_DEPS 283 pw_sync.borrow 284 pw_sync.timed_borrow_testing 285 pw_sync.lock_testing 286 GROUPS 287 modules 288 pw_sync 289 ) 290endif() 291 292pw_add_test(pw_sync.inline_borrowable_test 293 SOURCES 294 inline_borrowable_test.cc 295 PRIVATE_DEPS 296 pw_sync.inline_borrowable 297 pw_sync.interrupt_spin_lock 298 pw_sync.lock_annotations 299 pw_sync.mutex 300 GROUPS 301 modules 302 pw_sync 303) 304 305if(NOT "${pw_sync.binary_semaphore_BACKEND}" STREQUAL "") 306 pw_add_test(pw_sync.binary_semaphore_facade_test 307 SOURCES 308 binary_semaphore_facade_test.cc 309 binary_semaphore_facade_test_c.c 310 PRIVATE_DEPS 311 pw_preprocessor 312 pw_sync.binary_semaphore 313 GROUPS 314 modules 315 pw_sync 316 ) 317endif() 318 319if(NOT "${pw_sync.counting_semaphore_BACKEND}" STREQUAL "") 320 pw_add_test(pw_sync.counting_semaphore_facade_test 321 SOURCES 322 counting_semaphore_facade_test.cc 323 counting_semaphore_facade_test_c.c 324 PRIVATE_DEPS 325 pw_preprocessor 326 pw_sync.counting_semaphore 327 GROUPS 328 modules 329 pw_sync 330 ) 331endif() 332 333if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "") 334 pw_add_test(pw_sync.mutex_facade_test 335 SOURCES 336 mutex_facade_test.cc 337 mutex_facade_test_c.c 338 PRIVATE_DEPS 339 pw_preprocessor 340 pw_sync.mutex 341 pw_sync.borrow_testing 342 GROUPS 343 modules 344 pw_sync 345 ) 346endif() 347 348if(NOT "${pw_sync.timed_mutex_BACKEND}" STREQUAL "") 349 pw_add_test(pw_sync.timed_mutex_facade_test 350 SOURCES 351 timed_mutex_facade_test.cc 352 timed_mutex_facade_test_c.c 353 PRIVATE_DEPS 354 pw_preprocessor 355 pw_sync.timed_mutex 356 pw_sync.timed_borrow_testing 357 GROUPS 358 modules 359 pw_sync 360 ) 361endif() 362 363if(NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL "") 364 pw_add_test(pw_sync.interrupt_spin_lock_facade_test 365 SOURCES 366 interrupt_spin_lock_facade_test.cc 367 interrupt_spin_lock_facade_test_c.c 368 PRIVATE_DEPS 369 pw_preprocessor 370 pw_sync.interrupt_spin_lock 371 pw_sync.borrow_testing 372 GROUPS 373 modules 374 pw_sync 375 ) 376endif() 377 378if(NOT "${pw_sync.thread_notification_BACKEND}" STREQUAL "") 379 pw_add_test(pw_sync.thread_notification_facade_test 380 SOURCES 381 thread_notification_facade_test.cc 382 PRIVATE_DEPS 383 pw_sync.thread_notification 384 GROUPS 385 modules 386 pw_sync 387 ) 388endif() 389 390if(NOT "${pw_sync.timed_thread_notification_BACKEND}" STREQUAL "") 391 pw_add_test(pw_sync.timed_thread_notification_facade_test 392 SOURCES 393 timed_thread_notification_facade_test.cc 394 PRIVATE_DEPS 395 pw_sync.timed_thread_notification 396 GROUPS 397 modules 398 pw_sync 399 ) 400endif() 401 402pw_add_library(pw_sync.condition_variable_test STATIC 403 PUBLIC_DEPS 404 pw_sync.condition_variable 405 pw_containers.vector 406 pw_sync.mutex 407 pw_sync.timed_thread_notification 408 pw_thread.sleep 409 pw_thread.non_portable_test_thread_options 410 pw_thread.thread 411 pw_unit_test 412 SOURCES 413 condition_variable_test.cc 414) 415