• 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.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