• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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