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