• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2023 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_async2/backend.cmake)
17
18pw_add_library(pw_async2.poll INTERFACE
19  HEADERS
20    public/pw_async2/poll.h
21    public/pw_async2/internal/poll_internal.h
22  PUBLIC_DEPS
23    pw_polyfill
24    pw_string.to_string
25    pw_third_party.fuchsia.stdcompat
26  PUBLIC_INCLUDES
27    public
28)
29
30pw_add_test(pw_async2.poll_test
31  SOURCES
32    poll_test.cc
33  PRIVATE_DEPS
34    pw_async2.poll
35)
36
37pw_add_library(pw_async2.dispatcher_base STATIC
38  HEADERS
39    public/pw_async2/dispatcher_base.h
40  PUBLIC_INCLUDES
41    public
42  PUBLIC_DEPS
43    pw_assert.assert
44    pw_assert.check
45    pw_async2.poll
46    pw_chrono.system_clock
47    pw_sync.interrupt_spin_lock
48    pw_sync.lock_annotations
49    pw_sync.mutex
50    pw_toolchain.no_destructor
51  SOURCES
52    dispatcher_base.cc
53)
54
55pw_add_facade(pw_async2.dispatcher INTERFACE
56  BACKEND
57    pw_async2.dispatcher_BACKEND
58  HEADERS
59    public/pw_async2/dispatcher.h
60  PUBLIC_INCLUDES
61    public
62  PUBLIC_DEPS
63    pw_async2.dispatcher_base
64)
65
66pw_add_test(pw_async2.dispatcher_test
67  SOURCES
68    dispatcher_test.cc
69  PRIVATE_DEPS
70    pw_async2.dispatcher
71    pw_containers.vector
72)
73
74pw_add_test(pw_async2.dispatcher_thread_test
75  SOURCES
76    dispatcher_thread_test.cc
77  PRIVATE_DEPS
78    pw_async2.dispatcher
79    pw_function
80    pw_thread.sleep
81    pw_thread.thread
82)
83
84pw_add_library(pw_async2.pend_func_task INTERFACE
85  HEADERS
86    public/pw_async2/pend_func_task.h
87  PUBLIC_DEPS
88    pw_async2.dispatcher
89    pw_function
90  PUBLIC_INCLUDES
91    public
92)
93
94pw_add_test(pw_async2.pend_func_task_test
95  SOURCES
96    pend_func_task_test.cc
97  PRIVATE_DEPS
98    pw_async2.pend_func_task
99)
100
101pw_add_library(pw_async2.pendable_as_task INTERFACE
102  HEADERS
103    public/pw_async2/pendable_as_task.h
104  PUBLIC_DEPS
105    pw_async2.dispatcher
106  PUBLIC_INCLUDES
107    public
108)
109
110pw_add_test(pw_async2.pendable_as_task_test
111  SOURCES
112    pendable_as_task_test.cc
113  PRIVATE_DEPS
114    pw_async2.pendable_as_task
115)
116
117pw_add_library(pw_async2.allocate_task INTERFACE
118  HEADERS
119    public/pw_async2/allocate_task.h
120  PUBLIC_DEPS
121    pw_async2.dispatcher
122    pw_allocator.allocator
123  PUBLIC_INCLUDES
124    public
125)
126
127pw_add_test(pw_async2.allocate_task_test
128  SOURCES
129    allocate_task_test.cc
130  PRIVATE_DEPS
131    pw_async2.allocate_task
132    pw_allocator.testing
133)
134
135pw_add_library(pw_async2.once_sender INTERFACE
136  HEADERS
137    public/pw_async2/once_sender.h
138  PUBLIC_DEPS
139    pw_async2.dispatcher
140    pw_function
141  PUBLIC_INCLUDES
142    public
143)
144
145pw_add_test(pw_async2.once_sender_test
146  SOURCES
147    once_sender_test.cc
148  PRIVATE_DEPS
149    pw_async2.once_sender
150    pw_containers.vector
151)
152
153if("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
154  pw_add_library(pw_async2.coro STATIC
155    HEADERS
156      public/pw_async2/coro.h
157    SOURCES
158      coro.cc
159    PRIVATE_DEPS
160      pw_log
161    PUBLIC_DEPS
162      pw_allocator.allocator
163      pw_async2.dispatcher
164      pw_function
165    PUBLIC_INCLUDES
166      public
167  )
168
169  pw_add_test(pw_async2.coro_test
170    SOURCES
171      coro_test.cc
172    PRIVATE_DEPS
173      pw_allocator.null_allocator
174      pw_allocator.testing
175      pw_async2.coro
176  )
177
178  pw_add_library(pw_async2.coro_or_else_task INTERFACE
179    HEADERS
180      public/pw_async2/coro.h
181    PUBLIC_DEPS
182      pw_async2.coro
183      pw_async2.dispatcher
184      pw_function
185    PUBLIC_INCLUDES
186      public
187  )
188
189  pw_add_test(pw_async2.coro_or_else_task_test
190    SOURCES
191      coro_or_else_task_test.cc
192    PRIVATE_DEPS
193      pw_async2.coro
194      pw_async2.coro_or_else_task
195      pw_async2.dispatcher
196      pw_allocator.null_allocator
197      pw_allocator.testing
198  )
199
200  pw_add_library(pw_async2.pend_func_awaitable INTERFACE
201    HEADERS
202      public/pw_async2/pend_func_task.h
203    PUBLIC_DEPS
204      pw_async2.dispatcher
205      pw_async2.poll
206      pw_function
207    PUBLIC_INCLUDES
208      public
209  )
210
211  pw_add_test(pw_async2.pend_func_awaitable_test
212    SOURCES
213      pend_func_awaitable_test.cc
214    PRIVATE_DEPS
215      pw_async2.coro
216      pw_async2.coro_or_else_task
217      pw_async2.dispatcher
218      pw_async2.pend_func_awaitable
219      pw_async2.poll
220      pw_allocator.testing
221      pw_function
222  )
223endif()
224
225
226pw_add_library(pw_async2.time_provider STATIC
227  HEADERS
228    public/pw_async2/time_provider.h
229  SOURCES
230    time_provider.cc
231  PUBLIC_DEPS
232    pw_async2.dispatcher
233    pw_containers.intrusive_list
234    pw_sync.interrupt_spin_lock
235  PUBLIC_INCLUDES
236    public
237)
238
239pw_add_library(pw_async2.system_time_provider STATIC
240  HEADERS
241    public/pw_async2/system_time_provider.h
242  SOURCES
243    system_time_provider.cc
244  PUBLIC_DEPS
245    pw_chrono.system_clock
246    pw_async2.time_provider
247  PRIVATE_DEPS
248    pw_chrono.system_timer
249    pw_toolchain.no_destructor
250  PUBLIC_INCLUDES
251    public
252)
253
254if((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND
255   (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL ""))
256  pw_add_test(pw_async2.system_time_provider_test
257    SOURCES
258      system_time_provider_test.cc
259    PRIVATE_DEPS
260      pw_async2.system_time_provider
261      pw_chrono.system_clock
262    GROUPS
263      modules
264      pw_async2
265  )
266endif()
267
268pw_add_library(pw_async2.simulated_time_provider INTERFACE
269  HEADERS
270    public/pw_async2/simulated_time_provider.h
271  PUBLIC_DEPS
272    pw_async2.time_provider
273    pw_sync.interrupt_spin_lock
274)
275
276if((NOT "${pw_chrono.system_clock_BACKEND}" STREQUAL "") AND
277   (NOT "${pw_sync.interrupt_spin_lock_BACKEND}" STREQUAL ""))
278  pw_add_test(pw_async2.simulated_time_provider_test
279    SOURCES
280      simulated_time_provider_test.cc
281    PRIVATE_DEPS
282      pw_async2.simulated_time_provider
283      pw_chrono.system_clock
284    GROUPS
285      modules
286      pw_async2
287  )
288endif()
289
290pw_add_library(pw_async2.enqueue_heap_func INTERFACE
291  HEADERS
292    public/pw_async2/enqueue_heap_func.h
293  PUBLIC_DEPS
294    pw_async2.dispatcher
295)
296
297pw_add_test(pw_async2.enqueue_heap_func_test
298  SOURCES
299    enqueue_heap_func_test.cc
300  PRIVATE_DEPS
301    pw_async2.dispatcher
302    pw_async2.enqueue_heap_func
303  GROUPS
304    modules
305    pw_async2
306)
307
308pw_add_library(pw_async2.join INTERFACE
309  HEADERS
310    public/pw_async2/join.h
311  PUBLIC_DEPS
312    pw_async2.dispatcher
313)
314
315pw_add_test(pw_async2.join_test
316  SOURCES
317    join_test.cc
318  PRIVATE_DEPS
319    pw_async2.dispatcher
320    pw_async2.join
321  GROUPS
322    modules
323    pw_async2
324)
325
326add_subdirectory(examples)
327