xref: /aosp_15_r20/external/pigweed/pw_thread/CMakeLists.txt (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2022 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_thread/backend.cmake)
17
18pw_add_module_config(pw_thread_CONFIG)
19
20pw_add_library(pw_thread.config INTERFACE
21  HEADERS
22    public/pw_thread/config.h
23  PUBLIC_INCLUDES
24    public
25  PUBLIC_DEPS
26    ${pw_thread_CONFIG}
27)
28
29# pw_thread.id is deprecated; depend on pw_thread.thread instead.
30pw_add_facade(pw_thread.id INTERFACE
31  BACKEND
32    pw_thread.id_BACKEND
33  HEADERS
34    public/pw_thread/id.h
35  PUBLIC_INCLUDES
36    public
37)
38
39pw_add_facade(pw_thread.sleep STATIC
40  BACKEND
41    pw_thread.sleep_BACKEND
42  HEADERS
43    public/pw_thread/sleep.h
44  PUBLIC_INCLUDES
45    public
46  PUBLIC_DEPS
47    pw_chrono.system_clock
48    pw_preprocessor
49  SOURCES
50    sleep.cc
51)
52
53pw_add_facade(pw_thread.thread STATIC
54  BACKEND
55    pw_thread.thread_BACKEND
56  HEADERS
57    public/pw_thread/detached_thread.h
58    public/pw_thread/thread.h
59  PUBLIC_INCLUDES
60    public
61  PUBLIC_DEPS
62    pw_function
63    pw_thread.thread_core
64    pw_thread.id
65    pw_thread.options
66  SOURCES
67    thread.cc
68)
69
70pw_add_library(pw_thread.options INTERFACE
71  HEADERS
72    public/pw_thread/options.h
73  PUBLIC_INCLUDES
74    public
75)
76
77pw_add_library(pw_thread.thread_core INTERFACE
78  HEADERS
79    public/pw_thread/thread_core.h
80  PUBLIC_INCLUDES
81    public
82)
83
84pw_add_library(pw_thread.thread_info INTERFACE
85  HEADERS
86    public/pw_thread/thread_info.h
87  PUBLIC_INCLUDES
88    public
89  PUBLIC_DEPS
90    pw_span
91)
92
93pw_add_facade(pw_thread.thread_iteration INTERFACE
94  BACKEND
95    pw_thread.thread_iteration_BACKEND
96  HEADERS
97    public/pw_thread/thread_iteration.h
98  PUBLIC_INCLUDES
99    public
100  PUBLIC_DEPS
101    pw_thread.thread_info
102    pw_function
103    pw_status
104)
105
106pw_proto_library(pw_thread.thread_snapshot_service_cc
107  SOURCES
108    pw_thread_protos/thread_snapshot_service.proto
109  DEPS
110    pw_thread.protos
111)
112
113pw_add_library(pw_thread.thread_snapshot_service STATIC
114  HEADERS
115    public/pw_thread/thread_snapshot_service.h
116  PUBLIC_INCLUDES
117    public
118  PUBLIC_DEPS
119    pw_log
120    pw_protobuf
121    pw_rpc.raw.server_api
122    pw_span
123    pw_status
124    pw_thread.config
125    pw_thread.protos.pwpb
126    pw_thread.thread_info
127    pw_thread.thread_iteration
128    pw_thread.thread_snapshot_service_cc.pwpb
129    pw_thread.thread_snapshot_service_cc.raw_rpc
130  SOURCES
131    pw_thread_private/thread_snapshot_service.h
132    thread_snapshot_service.cc
133)
134
135pw_add_facade(pw_thread.test_thread_context INTERFACE
136  BACKEND
137    pw_thread.test_thread_context_BACKEND
138  HEADERS
139    public/pw_thread/test_thread_context.h
140  PUBLIC_INCLUDES
141    public
142)
143
144pw_add_facade(pw_thread.yield STATIC
145  BACKEND
146    pw_thread.yield_BACKEND
147  HEADERS
148    public/pw_thread/yield.h
149  PUBLIC_INCLUDES
150    public
151  PUBLIC_DEPS
152    pw_preprocessor
153  SOURCES
154    yield.cc
155)
156
157pw_add_library(pw_thread.snapshot STATIC
158  HEADERS
159    public/pw_thread/snapshot.h
160  PUBLIC_INCLUDES
161    public
162  PUBLIC_DEPS
163    pw_bytes
164    pw_function
165    pw_protobuf
166    pw_status
167    pw_thread.protos.pwpb
168  SOURCES
169    snapshot.cc
170  PRIVATE_DEPS
171    pw_thread.config
172    pw_log
173)
174
175pw_proto_library(pw_thread.protos
176  SOURCES
177    pw_thread_protos/thread.proto
178  DEPS
179    pw_tokenizer.proto
180)
181
182if(NOT "${pw_thread.id_BACKEND}" STREQUAL "")
183  pw_add_test(pw_thread.id_facade_test
184    SOURCES
185      id_facade_test.cc
186    PRIVATE_DEPS
187      pw_thread.thread
188    GROUPS
189      modules
190      pw_thread
191  )
192endif()
193
194if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND
195   (NOT "${pw_thread.sleep_BACKEND}" STREQUAL ""))
196  pw_add_test(pw_thread.sleep_facade_test
197    SOURCES
198      sleep_facade_test.cc
199      sleep_facade_test_c.c
200    PRIVATE_DEPS
201      pw_chrono.system_clock
202      pw_thread.sleep
203      pw_thread.thread
204    GROUPS
205      modules
206      pw_thread
207  )
208endif()
209
210pw_add_library(pw_thread.non_portable_test_thread_options INTERFACE
211  HEADERS
212    public/pw_thread/non_portable_test_thread_options.h
213  PUBLIC_INCLUDES
214    public
215  PUBLIC_DEPS
216    pw_thread.thread
217)
218
219# To instantiate this facade test based on a selected backend to provide
220# test_threads you can create a pw_add_test target which depends on this
221# target and a target which provides the implementation of
222# test_threads. See pw_thread_stl.thread_backend_test as an example.
223pw_add_library(pw_thread.thread_facade_test STATIC
224  SOURCES
225    thread_facade_test.cc
226  PRIVATE_DEPS
227    pw_thread.sleep
228    pw_thread.non_portable_test_thread_options
229    pw_thread.thread
230    pw_sync.binary_semaphore
231    pw_unit_test
232)
233
234if((NOT "${pw_thread.id_BACKEND}" STREQUAL "") AND
235   (NOT "${pw_thread.yield_BACKEND}" STREQUAL ""))
236  pw_add_test(pw_thread.yield_facade_test
237    SOURCES
238      yield_facade_test.cc
239      yield_facade_test_c.c
240    PRIVATE_DEPS
241      pw_thread.thread
242      pw_thread.yield
243    GROUPS
244      modules
245      pw_thread
246  )
247endif()
248
249if(NOT "${pw_thread.test_thread_context_BACKEND}" STREQUAL "")
250  pw_add_test(pw_thread.test_thread_context_facade_test
251    SOURCES
252      test_thread_context_facade_test.cc
253    PRIVATE_DEPS
254      pw_thread.test_thread_context
255      pw_thread.thread
256      pw_sync.binary_semaphore
257  )
258endif()
259