xref: /aosp_15_r20/external/pigweed/pw_async_basic/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2023 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_async/async.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_async/fake_dispatcher_fixture.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_async/fake_dispatcher_test.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_async/heap_dispatcher.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_bloat/bloat.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_chrono/backend.gni")
24*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
25*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_sync/backend.gni")
26*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_thread/backend.gni")
27*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") {
30*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
31*61c4878aSAndroid Build Coastguard Worker}
32*61c4878aSAndroid Build Coastguard Worker
33*61c4878aSAndroid Build Coastguard Workerconfig("backend_config") {
34*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public_overrides" ]
35*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
36*61c4878aSAndroid Build Coastguard Worker}
37*61c4878aSAndroid Build Coastguard Worker
38*61c4878aSAndroid Build Coastguard Worker# Backend for //pw_async:task
39*61c4878aSAndroid Build Coastguard Workerpw_source_set("task") {
40*61c4878aSAndroid Build Coastguard Worker  public_configs = [
41*61c4878aSAndroid Build Coastguard Worker    ":public_include_path",
42*61c4878aSAndroid Build Coastguard Worker    ":backend_config",
43*61c4878aSAndroid Build Coastguard Worker  ]
44*61c4878aSAndroid Build Coastguard Worker  public = [
45*61c4878aSAndroid Build Coastguard Worker    "public/pw_async_basic/task.h",
46*61c4878aSAndroid Build Coastguard Worker    "public_overrides/pw_async_backend/task.h",
47*61c4878aSAndroid Build Coastguard Worker  ]
48*61c4878aSAndroid Build Coastguard Worker
49*61c4878aSAndroid Build Coastguard Worker  public_deps = [
50*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async:task.facade",
51*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers:intrusive_list",
52*61c4878aSAndroid Build Coastguard Worker  ]
53*61c4878aSAndroid Build Coastguard Worker  visibility = [
54*61c4878aSAndroid Build Coastguard Worker                 ":*",
55*61c4878aSAndroid Build Coastguard Worker                 "$dir_pw_async:*",
56*61c4878aSAndroid Build Coastguard Worker                 "size_report:*",
57*61c4878aSAndroid Build Coastguard Worker               ] + pw_async_EXPERIMENTAL_MODULE_VISIBILITY
58*61c4878aSAndroid Build Coastguard Worker}
59*61c4878aSAndroid Build Coastguard Worker
60*61c4878aSAndroid Build Coastguard Worker# Backend for //pw_async:fake_dispatcher
61*61c4878aSAndroid Build Coastguard Workerpw_source_set("fake_dispatcher") {
62*61c4878aSAndroid Build Coastguard Worker  public_configs = [
63*61c4878aSAndroid Build Coastguard Worker    ":public_include_path",
64*61c4878aSAndroid Build Coastguard Worker    ":backend_config",
65*61c4878aSAndroid Build Coastguard Worker  ]
66*61c4878aSAndroid Build Coastguard Worker  sources = [ "fake_dispatcher.cc" ]
67*61c4878aSAndroid Build Coastguard Worker  public = [
68*61c4878aSAndroid Build Coastguard Worker    "public/pw_async_basic/fake_dispatcher.h",
69*61c4878aSAndroid Build Coastguard Worker    "public_overrides/pw_async_backend/fake_dispatcher.h",
70*61c4878aSAndroid Build Coastguard Worker  ]
71*61c4878aSAndroid Build Coastguard Worker  public_deps = [
72*61c4878aSAndroid Build Coastguard Worker    ":task",
73*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async:fake_dispatcher.facade",
74*61c4878aSAndroid Build Coastguard Worker  ]
75*61c4878aSAndroid Build Coastguard Worker  deps = [ dir_pw_log ]
76*61c4878aSAndroid Build Coastguard Worker  visibility = [
77*61c4878aSAndroid Build Coastguard Worker                 ":*",
78*61c4878aSAndroid Build Coastguard Worker                 "$dir_pw_async:*",
79*61c4878aSAndroid Build Coastguard Worker               ] + pw_async_EXPERIMENTAL_MODULE_VISIBILITY
80*61c4878aSAndroid Build Coastguard Worker}
81*61c4878aSAndroid Build Coastguard Worker
82*61c4878aSAndroid Build Coastguard Workerfake_dispatcher_test("fake_dispatcher_test") {
83*61c4878aSAndroid Build Coastguard Worker  backend = ":fake_dispatcher"
84*61c4878aSAndroid Build Coastguard Worker}
85*61c4878aSAndroid Build Coastguard Worker
86*61c4878aSAndroid Build Coastguard Workerfake_dispatcher_fixture("fake_dispatcher_fixture") {
87*61c4878aSAndroid Build Coastguard Worker  backend = ":fake_dispatcher"
88*61c4878aSAndroid Build Coastguard Worker}
89*61c4878aSAndroid Build Coastguard Worker
90*61c4878aSAndroid Build Coastguard Workerpw_test("fake_dispatcher_fixture_test") {
91*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_chrono_SYSTEM_CLOCK_BACKEND != ""
92*61c4878aSAndroid Build Coastguard Worker  sources = [ "fake_dispatcher_fixture_test.cc" ]
93*61c4878aSAndroid Build Coastguard Worker  deps = [ ":fake_dispatcher_fixture" ]
94*61c4878aSAndroid Build Coastguard Worker}
95*61c4878aSAndroid Build Coastguard Worker
96*61c4878aSAndroid Build Coastguard Workerpw_source_set("dispatcher") {
97*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
98*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_async_basic/dispatcher.h" ]
99*61c4878aSAndroid Build Coastguard Worker  sources = [ "dispatcher.cc" ]
100*61c4878aSAndroid Build Coastguard Worker  public_deps = [
101*61c4878aSAndroid Build Coastguard Worker    ":task",
102*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async:dispatcher",
103*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers:intrusive_list",
104*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_sync:interrupt_spin_lock",
105*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_sync:timed_thread_notification",
106*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread_core",
107*61c4878aSAndroid Build Coastguard Worker  ]
108*61c4878aSAndroid Build Coastguard Worker  visibility = [
109*61c4878aSAndroid Build Coastguard Worker                 ":*",
110*61c4878aSAndroid Build Coastguard Worker                 "$dir_pw_grpc/*",
111*61c4878aSAndroid Build Coastguard Worker                 "size_report:*",
112*61c4878aSAndroid Build Coastguard Worker               ] + pw_async_EXPERIMENTAL_MODULE_VISIBILITY
113*61c4878aSAndroid Build Coastguard Worker}
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Workerpw_test("dispatcher_test") {
116*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_chrono_SYSTEM_CLOCK_BACKEND != "" &&
117*61c4878aSAndroid Build Coastguard Worker              pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread"
118*61c4878aSAndroid Build Coastguard Worker  public_deps = [
119*61c4878aSAndroid Build Coastguard Worker    ":dispatcher",
120*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread",
121*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
122*61c4878aSAndroid Build Coastguard Worker  ]
123*61c4878aSAndroid Build Coastguard Worker  sources = [ "dispatcher_test.cc" ]
124*61c4878aSAndroid Build Coastguard Worker}
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Worker# This target cannot be labeled "heap_dispatcher" or else the outpath Ninja uses
127*61c4878aSAndroid Build Coastguard Worker# for heap_dispatcher.cc will collide with $dir_pw_async:heap_dispatcher.
128*61c4878aSAndroid Build Coastguard Workerpw_async_heap_dispatcher_source_set("heap_dispatcher_basic") {
129*61c4878aSAndroid Build Coastguard Worker  task_backend = ":task"
130*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
131*61c4878aSAndroid Build Coastguard Worker}
132*61c4878aSAndroid Build Coastguard Worker
133*61c4878aSAndroid Build Coastguard Workergroup("heap_dispatcher") {
134*61c4878aSAndroid Build Coastguard Worker  public_deps = [ ":heap_dispatcher_basic" ]
135*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ] + pw_async_EXPERIMENTAL_MODULE_VISIBILITY
136*61c4878aSAndroid Build Coastguard Worker}
137*61c4878aSAndroid Build Coastguard Worker
138*61c4878aSAndroid Build Coastguard Workerpw_test("heap_dispatcher_test") {
139*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_chrono_SYSTEM_CLOCK_BACKEND != "" &&
140*61c4878aSAndroid Build Coastguard Worker              pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread"
141*61c4878aSAndroid Build Coastguard Worker  sources = [ "heap_dispatcher_test.cc" ]
142*61c4878aSAndroid Build Coastguard Worker  deps = [
143*61c4878aSAndroid Build Coastguard Worker    ":fake_dispatcher_fixture",
144*61c4878aSAndroid Build Coastguard Worker    ":heap_dispatcher",
145*61c4878aSAndroid Build Coastguard Worker  ]
146*61c4878aSAndroid Build Coastguard Worker}
147*61c4878aSAndroid Build Coastguard Worker
148*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
149*61c4878aSAndroid Build Coastguard Worker  tests = [
150*61c4878aSAndroid Build Coastguard Worker    ":dispatcher_test",
151*61c4878aSAndroid Build Coastguard Worker    ":fake_dispatcher_test",
152*61c4878aSAndroid Build Coastguard Worker    ":fake_dispatcher_fixture_test",
153*61c4878aSAndroid Build Coastguard Worker    ":heap_dispatcher_test",
154*61c4878aSAndroid Build Coastguard Worker  ]
155*61c4878aSAndroid Build Coastguard Worker}
156*61c4878aSAndroid Build Coastguard Worker
157*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
158*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
159*61c4878aSAndroid Build Coastguard Worker  report_deps = [ ":docs_size_report" ]
160*61c4878aSAndroid Build Coastguard Worker}
161*61c4878aSAndroid Build Coastguard Worker
162*61c4878aSAndroid Build Coastguard Workerpw_size_diff("docs_size_report") {
163*61c4878aSAndroid Build Coastguard Worker  title = "pw_async_basic Docs Size Report"
164*61c4878aSAndroid Build Coastguard Worker  base = "$dir_pw_bloat:bloat_base"
165*61c4878aSAndroid Build Coastguard Worker
166*61c4878aSAndroid Build Coastguard Worker  binaries = []
167*61c4878aSAndroid Build Coastguard Worker
168*61c4878aSAndroid Build Coastguard Worker  if (pw_chrono_SYSTEM_CLOCK_BACKEND != "") {
169*61c4878aSAndroid Build Coastguard Worker    binaries += [
170*61c4878aSAndroid Build Coastguard Worker      {
171*61c4878aSAndroid Build Coastguard Worker        target = "size_report:task"
172*61c4878aSAndroid Build Coastguard Worker        label = "Construct a Task"
173*61c4878aSAndroid Build Coastguard Worker      },
174*61c4878aSAndroid Build Coastguard Worker    ]
175*61c4878aSAndroid Build Coastguard Worker  }
176*61c4878aSAndroid Build Coastguard Worker
177*61c4878aSAndroid Build Coastguard Worker  if (binaries == []) {
178*61c4878aSAndroid Build Coastguard Worker    binaries += [
179*61c4878aSAndroid Build Coastguard Worker      {
180*61c4878aSAndroid Build Coastguard Worker        target = "$dir_pw_bloat:bloat_base"
181*61c4878aSAndroid Build Coastguard Worker        label = "No backend is selected."
182*61c4878aSAndroid Build Coastguard Worker      },
183*61c4878aSAndroid Build Coastguard Worker    ]
184*61c4878aSAndroid Build Coastguard Worker  }
185*61c4878aSAndroid Build Coastguard Worker}
186*61c4878aSAndroid Build Coastguard Worker
187*61c4878aSAndroid Build Coastguard Worker# This size report can't be included in docs because the docs build target uses
188*61c4878aSAndroid Build Coastguard Worker# the target-stm32f429i-disc1 toolchain, which does not support timed thread
189*61c4878aSAndroid Build Coastguard Worker# notifications (mutex & condition_variable headers are not available).
190*61c4878aSAndroid Build Coastguard Workerpw_size_diff("size_report") {
191*61c4878aSAndroid Build Coastguard Worker  title = "pw_async_basic Size Report"
192*61c4878aSAndroid Build Coastguard Worker  base = "$dir_pw_bloat:bloat_base"
193*61c4878aSAndroid Build Coastguard Worker
194*61c4878aSAndroid Build Coastguard Worker  binaries = []
195*61c4878aSAndroid Build Coastguard Worker
196*61c4878aSAndroid Build Coastguard Worker  if (pw_chrono_SYSTEM_CLOCK_BACKEND != "" &&
197*61c4878aSAndroid Build Coastguard Worker      pw_sync_THREAD_NOTIFICATION_BACKEND != "" &&
198*61c4878aSAndroid Build Coastguard Worker      pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND != "") {
199*61c4878aSAndroid Build Coastguard Worker    binaries += [
200*61c4878aSAndroid Build Coastguard Worker      {
201*61c4878aSAndroid Build Coastguard Worker        target = "size_report:post_1_task"
202*61c4878aSAndroid Build Coastguard Worker        label = "Post 1 Task to BasicDispatcher"
203*61c4878aSAndroid Build Coastguard Worker      },
204*61c4878aSAndroid Build Coastguard Worker    ]
205*61c4878aSAndroid Build Coastguard Worker  }
206*61c4878aSAndroid Build Coastguard Worker}
207