xref: /aosp_15_r20/external/pigweed/pw_thread/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/facade.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/module_config.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_protobuf_compiler/proto.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("backend.gni")
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Workerdeclare_args() {
26*61c4878aSAndroid Build Coastguard Worker  # The build target that overrides the default configuration options for this
27*61c4878aSAndroid Build Coastguard Worker  # module. This should point to a source set that provides defines through a
28*61c4878aSAndroid Build Coastguard Worker  # public config (which may -include a file or add defines directly).
29*61c4878aSAndroid Build Coastguard Worker  pw_thread_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
30*61c4878aSAndroid Build Coastguard Worker}
31*61c4878aSAndroid Build Coastguard Worker
32*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") {
33*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
34*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
35*61c4878aSAndroid Build Coastguard Worker}
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Workerpw_source_set("config") {
38*61c4878aSAndroid Build Coastguard Worker  public_deps = [ pw_thread_CONFIG ]
39*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/config.h" ]
40*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
41*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
42*61c4878aSAndroid Build Coastguard Worker}
43*61c4878aSAndroid Build Coastguard Worker
44*61c4878aSAndroid Build Coastguard Workerpw_facade("id") {
45*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_ID_BACKEND
46*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
47*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/id.h" ]
48*61c4878aSAndroid Build Coastguard Worker}
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Workerpw_facade("sleep") {
51*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_SLEEP_BACKEND
52*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
53*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/sleep.h" ]
54*61c4878aSAndroid Build Coastguard Worker  public_deps = [
55*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_chrono:system_clock",
56*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_preprocessor",
57*61c4878aSAndroid Build Coastguard Worker  ]
58*61c4878aSAndroid Build Coastguard Worker  sources = [ "sleep.cc" ]
59*61c4878aSAndroid Build Coastguard Worker}
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Workerpw_facade("thread") {
62*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_THREAD_BACKEND
63*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
64*61c4878aSAndroid Build Coastguard Worker  public = [
65*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread/detached_thread.h",
66*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread/thread.h",
67*61c4878aSAndroid Build Coastguard Worker  ]
68*61c4878aSAndroid Build Coastguard Worker  public_deps = [
69*61c4878aSAndroid Build Coastguard Worker    ":id",
70*61c4878aSAndroid Build Coastguard Worker    ":options",
71*61c4878aSAndroid Build Coastguard Worker    ":thread_core",
72*61c4878aSAndroid Build Coastguard Worker    dir_pw_function,
73*61c4878aSAndroid Build Coastguard Worker  ]
74*61c4878aSAndroid Build Coastguard Worker  sources = [ "thread.cc" ]
75*61c4878aSAndroid Build Coastguard Worker}
76*61c4878aSAndroid Build Coastguard Worker
77*61c4878aSAndroid Build Coastguard Workerpw_source_set("options") {
78*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
79*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/options.h" ]
80*61c4878aSAndroid Build Coastguard Worker}
81*61c4878aSAndroid Build Coastguard Worker
82*61c4878aSAndroid Build Coastguard Workerpw_facade("test_thread_context") {
83*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_TEST_THREAD_CONTEXT_BACKEND
84*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
85*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/test_thread_context.h" ]
86*61c4878aSAndroid Build Coastguard Worker}
87*61c4878aSAndroid Build Coastguard Worker
88*61c4878aSAndroid Build Coastguard Workerpw_source_set("thread_core") {
89*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
90*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/thread_core.h" ]
91*61c4878aSAndroid Build Coastguard Worker}
92*61c4878aSAndroid Build Coastguard Worker
93*61c4878aSAndroid Build Coastguard Workerpw_facade("thread_iteration") {
94*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_THREAD_ITERATION_BACKEND
95*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
96*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/thread_iteration.h" ]
97*61c4878aSAndroid Build Coastguard Worker  public_deps = [
98*61c4878aSAndroid Build Coastguard Worker    ":thread_info",
99*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_function",
100*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status",
101*61c4878aSAndroid Build Coastguard Worker  ]
102*61c4878aSAndroid Build Coastguard Worker}
103*61c4878aSAndroid Build Coastguard Worker
104*61c4878aSAndroid Build Coastguard Workerpw_facade("yield") {
105*61c4878aSAndroid Build Coastguard Worker  backend = pw_thread_YIELD_BACKEND
106*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
107*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/yield.h" ]
108*61c4878aSAndroid Build Coastguard Worker  public_deps = [ "$dir_pw_preprocessor" ]
109*61c4878aSAndroid Build Coastguard Worker  sources = [ "yield.cc" ]
110*61c4878aSAndroid Build Coastguard Worker}
111*61c4878aSAndroid Build Coastguard Worker
112*61c4878aSAndroid Build Coastguard Workerpw_source_set("snapshot") {
113*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
114*61c4878aSAndroid Build Coastguard Worker  public_deps = [
115*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:protos.pwpb",
116*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
117*61c4878aSAndroid Build Coastguard Worker    dir_pw_function,
118*61c4878aSAndroid Build Coastguard Worker    dir_pw_protobuf,
119*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
120*61c4878aSAndroid Build Coastguard Worker  ]
121*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/snapshot.h" ]
122*61c4878aSAndroid Build Coastguard Worker  sources = [ "snapshot.cc" ]
123*61c4878aSAndroid Build Coastguard Worker  deps = [
124*61c4878aSAndroid Build Coastguard Worker    ":config",
125*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
126*61c4878aSAndroid Build Coastguard Worker  ]
127*61c4878aSAndroid Build Coastguard Worker}
128*61c4878aSAndroid Build Coastguard Worker
129*61c4878aSAndroid Build Coastguard Workerpw_source_set("thread_info") {
130*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
131*61c4878aSAndroid Build Coastguard Worker  public_deps = [ dir_pw_span ]
132*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/thread_info.h" ]
133*61c4878aSAndroid Build Coastguard Worker  deps = [ ":config" ]
134*61c4878aSAndroid Build Coastguard Worker}
135*61c4878aSAndroid Build Coastguard Worker
136*61c4878aSAndroid Build Coastguard Workerpw_source_set("thread_snapshot_service") {
137*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
138*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/thread_snapshot_service.h" ]
139*61c4878aSAndroid Build Coastguard Worker  public_deps = [
140*61c4878aSAndroid Build Coastguard Worker    ":protos.pwpb",
141*61c4878aSAndroid Build Coastguard Worker    ":protos.raw_rpc",
142*61c4878aSAndroid Build Coastguard Worker    ":thread_info",
143*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/raw:server_api",
144*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status:pw_status",
145*61c4878aSAndroid Build Coastguard Worker  ]
146*61c4878aSAndroid Build Coastguard Worker  sources = [
147*61c4878aSAndroid Build Coastguard Worker    "pw_thread_private/thread_snapshot_service.h",
148*61c4878aSAndroid Build Coastguard Worker    "thread_snapshot_service.cc",
149*61c4878aSAndroid Build Coastguard Worker  ]
150*61c4878aSAndroid Build Coastguard Worker  deps = [
151*61c4878aSAndroid Build Coastguard Worker    ":config",
152*61c4878aSAndroid Build Coastguard Worker    ":thread_iteration",
153*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_log",
154*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_protobuf",
155*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/raw:server_api",
156*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_span",
157*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status:pw_status",
158*61c4878aSAndroid Build Coastguard Worker  ]
159*61c4878aSAndroid Build Coastguard Worker}
160*61c4878aSAndroid Build Coastguard Worker
161*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
162*61c4878aSAndroid Build Coastguard Worker  tests = [
163*61c4878aSAndroid Build Coastguard Worker    ":id_facade_test",
164*61c4878aSAndroid Build Coastguard Worker    ":sleep_facade_test",
165*61c4878aSAndroid Build Coastguard Worker    ":thread_info_test",
166*61c4878aSAndroid Build Coastguard Worker    ":yield_facade_test",
167*61c4878aSAndroid Build Coastguard Worker    ":test_thread_context_facade_test",
168*61c4878aSAndroid Build Coastguard Worker    ":thread_snapshot_service_test",
169*61c4878aSAndroid Build Coastguard Worker    ":options_test",
170*61c4878aSAndroid Build Coastguard Worker  ]
171*61c4878aSAndroid Build Coastguard Worker}
172*61c4878aSAndroid Build Coastguard Worker
173*61c4878aSAndroid Build Coastguard Workerpw_test("test_thread_context_facade_test") {
174*61c4878aSAndroid Build Coastguard Worker  # TODO: b/317922402 - On Windows, this test can easily hang indefinitely.
175*61c4878aSAndroid Build Coastguard Worker  # Disable on Windows until we can test with the native Windows SDK libraries
176*61c4878aSAndroid Build Coastguard Worker  # for threading.
177*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_TEST_THREAD_CONTEXT_BACKEND != "" && current_os != "win"
178*61c4878aSAndroid Build Coastguard Worker  sources = [ "test_thread_context_facade_test.cc" ]
179*61c4878aSAndroid Build Coastguard Worker  deps = [
180*61c4878aSAndroid Build Coastguard Worker    ":test_thread_context",
181*61c4878aSAndroid Build Coastguard Worker    ":thread",
182*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_sync:binary_semaphore",
183*61c4878aSAndroid Build Coastguard Worker  ]
184*61c4878aSAndroid Build Coastguard Worker}
185*61c4878aSAndroid Build Coastguard Worker
186*61c4878aSAndroid Build Coastguard Workerpw_test("id_facade_test") {
187*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_ID_BACKEND != ""
188*61c4878aSAndroid Build Coastguard Worker  sources = [ "id_facade_test.cc" ]
189*61c4878aSAndroid Build Coastguard Worker  deps = [ ":thread" ]
190*61c4878aSAndroid Build Coastguard Worker}
191*61c4878aSAndroid Build Coastguard Worker
192*61c4878aSAndroid Build Coastguard Workerpw_test("thread_snapshot_service_test") {
193*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_THREAD_ITERATION_BACKEND != ""
194*61c4878aSAndroid Build Coastguard Worker  sources = [
195*61c4878aSAndroid Build Coastguard Worker    "pw_thread_private/thread_snapshot_service.h",
196*61c4878aSAndroid Build Coastguard Worker    "thread_snapshot_service_test.cc",
197*61c4878aSAndroid Build Coastguard Worker  ]
198*61c4878aSAndroid Build Coastguard Worker  deps = [
199*61c4878aSAndroid Build Coastguard Worker    ":protos.pwpb",
200*61c4878aSAndroid Build Coastguard Worker    ":thread_iteration",
201*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_protobuf",
202*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_span",
203*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_sync:thread_notification",
204*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread_info",
205*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread_snapshot_service",
206*61c4878aSAndroid Build Coastguard Worker  ]
207*61c4878aSAndroid Build Coastguard Worker}
208*61c4878aSAndroid Build Coastguard Worker
209*61c4878aSAndroid Build Coastguard Workerpw_test("sleep_facade_test") {
210*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_SLEEP_BACKEND != "" && pw_thread_ID_BACKEND != ""
211*61c4878aSAndroid Build Coastguard Worker  sources = [
212*61c4878aSAndroid Build Coastguard Worker    "sleep_facade_test.cc",
213*61c4878aSAndroid Build Coastguard Worker    "sleep_facade_test_c.c",
214*61c4878aSAndroid Build Coastguard Worker  ]
215*61c4878aSAndroid Build Coastguard Worker  deps = [
216*61c4878aSAndroid Build Coastguard Worker    ":sleep",
217*61c4878aSAndroid Build Coastguard Worker    ":thread",
218*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_chrono:system_clock",
219*61c4878aSAndroid Build Coastguard Worker  ]
220*61c4878aSAndroid Build Coastguard Worker}
221*61c4878aSAndroid Build Coastguard Worker
222*61c4878aSAndroid Build Coastguard Workerpw_source_set("non_portable_test_thread_options") {
223*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
224*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread/non_portable_test_thread_options.h" ]
225*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":thread" ]
226*61c4878aSAndroid Build Coastguard Worker}
227*61c4878aSAndroid Build Coastguard Worker
228*61c4878aSAndroid Build Coastguard Worker# To instantiate this facade test based on a selected backend to provide
229*61c4878aSAndroid Build Coastguard Worker# test_threads you can create a pw_test target which depends on this
230*61c4878aSAndroid Build Coastguard Worker# pw_source_set and a pw_source_set which provides the implementation of
231*61c4878aSAndroid Build Coastguard Worker# test_threads. See "$dir_pw_thread_stl:thread_backend_test" as an example.
232*61c4878aSAndroid Build Coastguard Workerpw_source_set("thread_facade_test") {
233*61c4878aSAndroid Build Coastguard Worker  testonly = pw_unit_test_TESTONLY
234*61c4878aSAndroid Build Coastguard Worker  sources = [ "thread_facade_test.cc" ]
235*61c4878aSAndroid Build Coastguard Worker  deps = [
236*61c4878aSAndroid Build Coastguard Worker    ":non_portable_test_thread_options",
237*61c4878aSAndroid Build Coastguard Worker    ":sleep",
238*61c4878aSAndroid Build Coastguard Worker    ":thread",
239*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_sync:binary_semaphore",
240*61c4878aSAndroid Build Coastguard Worker    dir_pw_unit_test,
241*61c4878aSAndroid Build Coastguard Worker  ]
242*61c4878aSAndroid Build Coastguard Worker}
243*61c4878aSAndroid Build Coastguard Worker
244*61c4878aSAndroid Build Coastguard Workerpw_test("options_test") {
245*61c4878aSAndroid Build Coastguard Worker  sources = [ "options_test.cc" ]
246*61c4878aSAndroid Build Coastguard Worker  deps = [ ":options" ]
247*61c4878aSAndroid Build Coastguard Worker  negative_compilation_tests = true
248*61c4878aSAndroid Build Coastguard Worker}
249*61c4878aSAndroid Build Coastguard Worker
250*61c4878aSAndroid Build Coastguard Workerpw_test("thread_info_test") {
251*61c4878aSAndroid Build Coastguard Worker  sources = [ "thread_info_test.cc" ]
252*61c4878aSAndroid Build Coastguard Worker  deps = [
253*61c4878aSAndroid Build Coastguard Worker    ":thread_info",
254*61c4878aSAndroid Build Coastguard Worker    dir_pw_span,
255*61c4878aSAndroid Build Coastguard Worker  ]
256*61c4878aSAndroid Build Coastguard Worker}
257*61c4878aSAndroid Build Coastguard Worker
258*61c4878aSAndroid Build Coastguard Workerpw_test("yield_facade_test") {
259*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_YIELD_BACKEND != "" && pw_thread_ID_BACKEND != ""
260*61c4878aSAndroid Build Coastguard Worker  sources = [
261*61c4878aSAndroid Build Coastguard Worker    "yield_facade_test.cc",
262*61c4878aSAndroid Build Coastguard Worker    "yield_facade_test_c.c",
263*61c4878aSAndroid Build Coastguard Worker  ]
264*61c4878aSAndroid Build Coastguard Worker  deps = [
265*61c4878aSAndroid Build Coastguard Worker    ":thread",
266*61c4878aSAndroid Build Coastguard Worker    ":yield",
267*61c4878aSAndroid Build Coastguard Worker  ]
268*61c4878aSAndroid Build Coastguard Worker}
269*61c4878aSAndroid Build Coastguard Worker
270*61c4878aSAndroid Build Coastguard Workerpw_proto_library("protos") {
271*61c4878aSAndroid Build Coastguard Worker  sources = [
272*61c4878aSAndroid Build Coastguard Worker    "pw_thread_protos/thread.proto",
273*61c4878aSAndroid Build Coastguard Worker    "pw_thread_protos/thread_snapshot_service.proto",
274*61c4878aSAndroid Build Coastguard Worker  ]
275*61c4878aSAndroid Build Coastguard Worker  deps = [ "$dir_pw_tokenizer:proto" ]
276*61c4878aSAndroid Build Coastguard Worker}
277*61c4878aSAndroid Build Coastguard Worker
278*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
279*61c4878aSAndroid Build Coastguard Worker  inputs =
280*61c4878aSAndroid Build Coastguard Worker      [ "$dir_pw_thread_stl/public/pw_thread_stl/test_thread_context_native.h" ]
281*61c4878aSAndroid Build Coastguard Worker  sources = [
282*61c4878aSAndroid Build Coastguard Worker    "backends.rst",
283*61c4878aSAndroid Build Coastguard Worker    "docs.rst",
284*61c4878aSAndroid Build Coastguard Worker  ]
285*61c4878aSAndroid Build Coastguard Worker}
286