pw_sync: Extend CMake support
Change-Id: Icc57347f7d1896316452c5f9ed63ac8859f979c4
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/79621
Pigweed-Auto-Submit: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
diff --git a/pw_sync/CMakeLists.txt b/pw_sync/CMakeLists.txt
index 0be2f28..fe365e4 100644
--- a/pw_sync/CMakeLists.txt
+++ b/pw_sync/CMakeLists.txt
@@ -14,35 +14,261 @@
include($ENV{PW_ROOT}/pw_build/pigweed.cmake)
-pw_add_facade(pw_sync.mutex
- SOURCES
- mutex.cc
+pw_add_facade(pw_sync.binary_semaphore
+ HEADERS
+ public/pw_sync/binary_semaphore.h
+ PUBLIC_INCLUDES
+ public
PUBLIC_DEPS
pw_chrono.system_clock
- pw_polyfill
pw_preprocessor
-)
-
-pw_add_facade(pw_sync.binary_semaphore
SOURCES
binary_semaphore.cc
+)
+
+pw_add_facade(pw_sync.counting_semaphore
+ HEADERS
+ public/pw_sync/counting_semaphore.h
+ PUBLIC_INCLUDES
+ public
PUBLIC_DEPS
pw_chrono.system_clock
pw_preprocessor
+ SOURCES
+ counting_semaphore.cc
)
pw_add_module_library(pw_sync.lock_annotations
+ HEADERS
+ public/pw_sync/lock_annotations.h
+ PUBLIC_INCLUDES
+ public
PUBLIC_DEPS
pw_preprocessor
)
-pw_add_module_library(pw_sync.virtual_basic_lockable
- PUBLIC_DEPS
- pw_polyfill
-)
-
pw_add_module_library(pw_sync.borrow
+ HEADERS
+ public/pw_sync/borrow.h
+ PUBLIC_INCLUDES
+ public
PUBLIC_DEPS
pw_assert
+ pw_sync.lock_annotations
pw_sync.virtual_basic_lockable
)
+
+pw_add_module_library(pw_sync.virtual_basic_lockable
+ HEADERS
+ public/pw_sync/virtual_basic_lockable.h
+ PUBLIC_INCLUDES
+ public
+ PUBLIC_DEPS
+ pw_polyfill
+ pw_sync.lock_annotations
+)
+
+pw_add_facade(pw_sync.mutex
+ HEADERS
+ public/pw_sync/mutex.h
+ PUBLIC_INCLUDES
+ public
+ PUBLIC_DEPS
+ pw_sync.lock_annotations
+ pw_sync.virtual_basic_lockable
+ pw_preprocessor
+ SOURCES
+ mutex.cc
+)
+
+pw_add_facade(pw_sync.timed_mutex
+ HEADERS
+ public/pw_sync/timed_mutex.h
+ PUBLIC_INCLUDES
+ public
+ PUBLIC_DEPS
+ pw_chrono.system_clock
+ pw_preprocessor
+ pw_sync.mutex
+ pw_sync.virtual_basic_lockable
+ SOURCES
+ timed_mutex.cc
+)
+
+pw_add_facade(pw_sync.interrupt_spin_lock
+ HEADERS
+ public/pw_sync/interrupt_spin_lock.h
+ PUBLIC_INCLUDES
+ public
+ PUBLIC_DEPS
+ pw_sync.lock_annotations
+ pw_sync.virtual_basic_lockable
+ pw_preprocessor
+ SOURCES
+ interrupt_spin_lock.cc
+)
+
+pw_add_facade(pw_sync.thread_notification
+ HEADERS
+ public/pw_sync/thread_notification.h
+ PUBLIC_INCLUDES
+ public
+)
+
+pw_add_facade(pw_sync.timed_thread_notification
+ HEADERS
+ public/pw_sync/timed_thread_notification.h
+ PUBLIC_INCLUDES
+ public
+ PUBLIC_DEPS
+ pw_sync.thread_notification
+ pw_chrono.system_clock
+)
+
+# This target provides the backend for pw::sync::ThreadNotification based on
+# pw::sync::BinarySemaphore.
+pw_add_module_library(pw_sync.binary_semaphore_thread_notification_backend
+ HEADERS
+ public/pw_sync/backends/binary_semaphore_thread_notification_inline.h
+ public/pw_sync/backends/binary_semaphore_thread_notification_native.h
+ public_overrides/pw_sync_backend/thread_notification_inline.h
+ public_overrides/pw_sync_backend/thread_notification_native.h
+ PUBLIC_INCLUDES
+ public
+ public_overrides
+ PUBLIC_DEPS
+ pw_sync.binary_semaphore
+)
+
+# This target provides the backend for pw::sync::TimedThreadNotification based
+# on pw::sync::BinarySemaphore.
+pw_add_module_library(pw_sync.binary_semaphore_timed_thread_notification_backend
+ HEADERS
+ public/pw_sync/backends/binary_semaphore_timed_thread_notification_inline.h
+ public_overrides/pw_sync_backend/timed_thread_notification_inline.h
+ PUBLIC_INCLUDES
+ public
+ public_overrides
+ PUBLIC_DEPS
+ pw_chrono.system_clock
+ pw_sync.binary_semaphore_thread_notification_backend
+)
+
+pw_add_facade(pw_sync.yield_core
+ HEADERS
+ public/pw_sync/yield_core.h
+ PUBLIC_INCLUDES
+ public
+)
+
+pw_add_test(pw_sync.borrow_test
+ SOURCES
+ borrow_test.cc
+ DEPS
+ pw_assert
+ pw_sync.borrow
+ pw_sync.virtual_basic_lockable
+ GROUPS
+ modules
+ pw_sync
+)
+
+if(NOT "${pw_sync.binary_semaphore_BACKEND}" STREQUAL
+ "pw_sync.binary_semaphore.NO_BACKEND_SET")
+ pw_add_test(pw_sync.binary_semaphore_facade_test
+ SOURCES
+ binary_semaphore_facade_test.cc
+ binary_semaphore_facade_test_c.c
+ DEPS
+ pw_preprocessor
+ pw_sync.binary_semaphore
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.counting_semaphore_BACKEND}" STREQUAL
+ "pw_sync.counting_semaphore.NO_BACKEND_SET")
+ pw_add_test(pw_sync.counting_semaphore_facade_test
+ SOURCES
+ counting_semaphore_facade_test.cc
+ counting_semaphore_facade_test_c.c
+ DEPS
+ pw_preprocessor
+ pw_sync.counting_semaphore
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "pw_sync.mutex.NO_BACKEND_SET")
+ pw_add_test(pw_sync.mutex_facade_test
+ SOURCES
+ mutex_facade_test.cc
+ mutex_facade_test_c.c
+ DEPS
+ pw_preprocessor
+ pw_sync.mutex
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.timed_mutex_BACKEND}" STREQUAL
+ "pw_sync.timed_mutex.NO_BACKEND_SET")
+ pw_add_test(pw_sync.timed_mutex_facade_test
+ SOURCES
+ timed_mutex_facade_test.cc
+ timed_mutex_facade_test_c.c
+ DEPS
+ pw_preprocessor
+ pw_sync.timed_mutex
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL
+ "pw_sync.interrupt_spin_lock.NO_BACKEND_SET")
+ pw_add_test(pw_sync.interrupt_spin_lock_facade_test
+ SOURCES
+ interrupt_spin_lock_facade_test.cc
+ interrupt_spin_lock_facade_test_c.c
+ DEPS
+ pw_preprocessor
+ pw_sync.interrupt_spin_lock
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.thread_notification_BACKEND}" STREQUAL
+ "pw_sync.thread_notification.NO_BACKEND_SET")
+ pw_add_test(pw_sync.thread_notification_facade_test
+ SOURCES
+ thread_notification_facade_test.cc
+ DEPS
+ pw_sync.thread_notification
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()
+
+if(NOT "${pw_sync.timed_thread_notification_BACKEND}" STREQUAL
+ "pw_sync.timed_thread_notification.NO_BACKEND_SET")
+ pw_add_test(pw_sync.timed_thread_notification_facade_test
+ SOURCES
+ timed_thread_notification_facade_test.cc
+ DEPS
+ pw_sync.timed_thread_notification
+ GROUPS
+ modules
+ pw_sync
+ )
+endif()