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