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