xref: /aosp_15_r20/external/pigweed/pw_thread_embos/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 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/error.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_chrono/backend.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_thread/backend.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.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_embos_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 Workerconfig("id_public_overrides") {
38*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "id_public_overrides" ]
39*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
40*61c4878aSAndroid Build Coastguard Worker}
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Workerpw_source_set("config") {
43*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread_embos/config.h" ]
44*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
45*61c4878aSAndroid Build Coastguard Worker  public_deps = [
46*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
47*61c4878aSAndroid Build Coastguard Worker    pw_thread_embos_CONFIG,
48*61c4878aSAndroid Build Coastguard Worker  ]
49*61c4878aSAndroid Build Coastguard Worker}
50*61c4878aSAndroid Build Coastguard Worker
51*61c4878aSAndroid Build Coastguard Worker# This target provides the backend for pw::Thread::id.
52*61c4878aSAndroid Build Coastguard Workerpw_source_set("id") {
53*61c4878aSAndroid Build Coastguard Worker  public_configs = [
54*61c4878aSAndroid Build Coastguard Worker    ":public_include_path",
55*61c4878aSAndroid Build Coastguard Worker    ":id_public_overrides",
56*61c4878aSAndroid Build Coastguard Worker  ]
57*61c4878aSAndroid Build Coastguard Worker  public_deps = [
58*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_assert",
59*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_interrupt:context",
60*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
61*61c4878aSAndroid Build Coastguard Worker  ]
62*61c4878aSAndroid Build Coastguard Worker  public = [
63*61c4878aSAndroid Build Coastguard Worker    "id_public_overrides/pw_thread_backend/id_inline.h",
64*61c4878aSAndroid Build Coastguard Worker    "id_public_overrides/pw_thread_backend/id_native.h",
65*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/id_inline.h",
66*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/id_native.h",
67*61c4878aSAndroid Build Coastguard Worker  ]
68*61c4878aSAndroid Build Coastguard Worker  deps = [ "$dir_pw_thread:id.facade" ]
69*61c4878aSAndroid Build Coastguard Worker}
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Workerpw_build_assert("check_system_clock_backend") {
72*61c4878aSAndroid Build Coastguard Worker  condition =
73*61c4878aSAndroid Build Coastguard Worker      pw_thread_OVERRIDE_SYSTEM_CLOCK_BACKEND_CHECK ||
74*61c4878aSAndroid Build Coastguard Worker      pw_chrono_SYSTEM_CLOCK_BACKEND == "$dir_pw_chrono_embos:system_clock"
75*61c4878aSAndroid Build Coastguard Worker  message = "The embOS pw::thread::sleep_{for,until} backend only works with " +
76*61c4878aSAndroid Build Coastguard Worker            "the embOS pw::chrono::SystemClock backend."
77*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
78*61c4878aSAndroid Build Coastguard Worker}
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Workerif (pw_chrono_SYSTEM_CLOCK_BACKEND != "" && pw_thread_SLEEP_BACKEND != "") {
81*61c4878aSAndroid Build Coastguard Worker  config("sleep_public_overrides") {
82*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "sleep_public_overrides" ]
83*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":*" ]
84*61c4878aSAndroid Build Coastguard Worker  }
85*61c4878aSAndroid Build Coastguard Worker
86*61c4878aSAndroid Build Coastguard Worker  # This target provides the backend for pw::thread::sleep_{for,until}.
87*61c4878aSAndroid Build Coastguard Worker  pw_source_set("sleep") {
88*61c4878aSAndroid Build Coastguard Worker    public_configs = [
89*61c4878aSAndroid Build Coastguard Worker      ":public_include_path",
90*61c4878aSAndroid Build Coastguard Worker      ":sleep_public_overrides",
91*61c4878aSAndroid Build Coastguard Worker    ]
92*61c4878aSAndroid Build Coastguard Worker    public = [
93*61c4878aSAndroid Build Coastguard Worker      "public/pw_thread_embos/sleep_inline.h",
94*61c4878aSAndroid Build Coastguard Worker      "sleep_public_overrides/pw_thread_backend/sleep_inline.h",
95*61c4878aSAndroid Build Coastguard Worker    ]
96*61c4878aSAndroid Build Coastguard Worker    public_deps = [ "$dir_pw_chrono:system_clock" ]
97*61c4878aSAndroid Build Coastguard Worker    sources = [ "sleep.cc" ]
98*61c4878aSAndroid Build Coastguard Worker    deps = [
99*61c4878aSAndroid Build Coastguard Worker      ":check_system_clock_backend",
100*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_assert",
101*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_chrono_embos:system_clock",
102*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party/embos",
103*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_thread:sleep.facade",
104*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_thread:thread",
105*61c4878aSAndroid Build Coastguard Worker    ]
106*61c4878aSAndroid Build Coastguard Worker  }
107*61c4878aSAndroid Build Coastguard Worker}
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard Workerconfig("thread_public_overrides") {
110*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "thread_public_overrides" ]
111*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
112*61c4878aSAndroid Build Coastguard Worker}
113*61c4878aSAndroid Build Coastguard Worker
114*61c4878aSAndroid Build Coastguard Worker# This target provides the backend for pw::Thread and the headers needed for
115*61c4878aSAndroid Build Coastguard Worker# thread creation.
116*61c4878aSAndroid Build Coastguard Workerpw_source_set("thread") {
117*61c4878aSAndroid Build Coastguard Worker  public_configs = [
118*61c4878aSAndroid Build Coastguard Worker    ":public_include_path",
119*61c4878aSAndroid Build Coastguard Worker    ":thread_public_overrides",
120*61c4878aSAndroid Build Coastguard Worker  ]
121*61c4878aSAndroid Build Coastguard Worker  public_deps = [
122*61c4878aSAndroid Build Coastguard Worker    ":config",
123*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_assert",
124*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_string",
125*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
126*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:id",
127*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread.facade",
128*61c4878aSAndroid Build Coastguard Worker    dir_pw_function,
129*61c4878aSAndroid Build Coastguard Worker    dir_pw_span,
130*61c4878aSAndroid Build Coastguard Worker  ]
131*61c4878aSAndroid Build Coastguard Worker  public = [
132*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/context.h",
133*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/options.h",
134*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/thread_inline.h",
135*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/thread_native.h",
136*61c4878aSAndroid Build Coastguard Worker    "thread_public_overrides/pw_thread_backend/thread_inline.h",
137*61c4878aSAndroid Build Coastguard Worker    "thread_public_overrides/pw_thread_backend/thread_native.h",
138*61c4878aSAndroid Build Coastguard Worker  ]
139*61c4878aSAndroid Build Coastguard Worker  allow_circular_includes_from = [ "$dir_pw_thread:thread.facade" ]
140*61c4878aSAndroid Build Coastguard Worker  sources = [ "thread.cc" ]
141*61c4878aSAndroid Build Coastguard Worker}
142*61c4878aSAndroid Build Coastguard Worker
143*61c4878aSAndroid Build Coastguard Workerconfig("yield_public_overrides") {
144*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "yield_public_overrides" ]
145*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
146*61c4878aSAndroid Build Coastguard Worker}
147*61c4878aSAndroid Build Coastguard Worker
148*61c4878aSAndroid Build Coastguard Worker# This target provides the backend for pw::thread::yield.
149*61c4878aSAndroid Build Coastguard Workerpw_source_set("yield") {
150*61c4878aSAndroid Build Coastguard Worker  public_configs = [
151*61c4878aSAndroid Build Coastguard Worker    ":public_include_path",
152*61c4878aSAndroid Build Coastguard Worker    ":yield_public_overrides",
153*61c4878aSAndroid Build Coastguard Worker  ]
154*61c4878aSAndroid Build Coastguard Worker  public = [
155*61c4878aSAndroid Build Coastguard Worker    "public/pw_thread_embos/yield_inline.h",
156*61c4878aSAndroid Build Coastguard Worker    "yield_public_overrides/pw_thread_backend/yield_inline.h",
157*61c4878aSAndroid Build Coastguard Worker  ]
158*61c4878aSAndroid Build Coastguard Worker  public_deps = [
159*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_assert",
160*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
161*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread",
162*61c4878aSAndroid Build Coastguard Worker  ]
163*61c4878aSAndroid Build Coastguard Worker  deps = [ "$dir_pw_thread:yield.facade" ]
164*61c4878aSAndroid Build Coastguard Worker}
165*61c4878aSAndroid Build Coastguard Worker
166*61c4878aSAndroid Build Coastguard Workerpw_source_set("util") {
167*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
168*61c4878aSAndroid Build Coastguard Worker  public_deps = [
169*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
170*61c4878aSAndroid Build Coastguard Worker    dir_pw_function,
171*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
172*61c4878aSAndroid Build Coastguard Worker  ]
173*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread_embos/util.h" ]
174*61c4878aSAndroid Build Coastguard Worker  sources = [ "util.cc" ]
175*61c4878aSAndroid Build Coastguard Worker}
176*61c4878aSAndroid Build Coastguard Worker
177*61c4878aSAndroid Build Coastguard Workerpw_source_set("snapshot") {
178*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
179*61c4878aSAndroid Build Coastguard Worker  public_deps = [
180*61c4878aSAndroid Build Coastguard Worker    ":config",
181*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/embos",
182*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:protos.pwpb",
183*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:snapshot",
184*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
185*61c4878aSAndroid Build Coastguard Worker    dir_pw_function,
186*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
187*61c4878aSAndroid Build Coastguard Worker    dir_pw_protobuf,
188*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
189*61c4878aSAndroid Build Coastguard Worker  ]
190*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_thread_embos/snapshot.h" ]
191*61c4878aSAndroid Build Coastguard Worker  sources = [ "snapshot.cc" ]
192*61c4878aSAndroid Build Coastguard Worker  deps = [ ":util" ]
193*61c4878aSAndroid Build Coastguard Worker}
194*61c4878aSAndroid Build Coastguard Worker
195*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
196*61c4878aSAndroid Build Coastguard Worker  tests = [ ":thread_backend_test" ]
197*61c4878aSAndroid Build Coastguard Worker}
198*61c4878aSAndroid Build Coastguard Worker
199*61c4878aSAndroid Build Coastguard Workerpw_source_set("non_portable_test_thread_options") {
200*61c4878aSAndroid Build Coastguard Worker  public_deps = [ "$dir_pw_thread:non_portable_test_thread_options" ]
201*61c4878aSAndroid Build Coastguard Worker  sources = [ "test_threads.cc" ]
202*61c4878aSAndroid Build Coastguard Worker  deps = [
203*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_chrono:system_clock",
204*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:sleep",
205*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread",
206*61c4878aSAndroid Build Coastguard Worker    dir_pw_assert,
207*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
208*61c4878aSAndroid Build Coastguard Worker  ]
209*61c4878aSAndroid Build Coastguard Worker}
210*61c4878aSAndroid Build Coastguard Worker
211*61c4878aSAndroid Build Coastguard Workerpw_test("thread_backend_test") {
212*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_embos:thread"
213*61c4878aSAndroid Build Coastguard Worker  deps = [
214*61c4878aSAndroid Build Coastguard Worker    ":non_portable_test_thread_options",
215*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_thread:thread_facade_test",
216*61c4878aSAndroid Build Coastguard Worker  ]
217*61c4878aSAndroid Build Coastguard Worker}
218*61c4878aSAndroid Build Coastguard Worker
219*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
220*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
221*61c4878aSAndroid Build Coastguard Worker}
222