xref: /aosp_15_r20/external/pigweed/pw_trace_tokenized/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2020 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
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/target_types.gni")
18import("$dir_pw_docgen/docs.gni")
19import("$dir_pw_protobuf_compiler/proto.gni")
20import("$dir_pw_third_party/nanopb/nanopb.gni")
21import("$dir_pw_trace/backend.gni")
22import("$dir_pw_unit_test/test.gni")
23import("config.gni")
24
25config("public_include_path") {
26  include_dirs = [ "public" ]
27  visibility = [ ":*" ]
28}
29
30config("backend_config") {
31  include_dirs = [ "public_overrides" ]
32}
33
34# Some tests in this file do not compile unless pw_trace_tokenized is the trace
35# backend.
36_pw_trace_tokenized_is_selected =
37    get_label_info(pw_trace_BACKEND, "label_no_toolchain") ==
38    get_label_info(":pw_trace_tokenized", "label_no_toolchain") &&
39    pw_trace_tokenizer_time != ""
40
41pw_source_set("config") {
42  public_deps = [ pw_trace_CONFIG ]
43  public_configs = [ ":public_include_path" ]
44  public = [ "public/pw_trace_tokenized/config.h" ]
45}
46
47config("linux_include_config_overrides") {
48  cflags = [
49    "-include",
50    rebase_path("linux_config_overrides.h", root_build_dir),
51  ]
52  visibility = [ ":*" ]
53}
54
55pw_source_set("linux_config_overrides") {
56  public_configs = [ ":linux_include_config_overrides" ]
57  sources = [ "linux_config_overrides.h" ]
58}
59
60pw_test_group("tests") {
61  tests = [
62    ":trace_tokenized_test",
63    ":tokenized_trace_buffer_test",
64    ":tokenized_trace_buffer_log_test",
65    ":trace_service_pwpb_test",
66  ]
67}
68
69pw_source_set("pw_trace_tokenized") {
70  public_configs = [
71    ":backend_config",
72    ":public_include_path",
73  ]
74  public_deps = [
75    ":config",
76    ":core",
77    "$dir_pw_tokenizer",
78  ]
79  deps = []
80  if (pw_trace_tokenizer_time != "") {
81    deps += [ "$pw_trace_tokenizer_time" ]
82  }
83
84  public = [ "public_overrides/pw_trace_backend/trace_backend.h" ]
85}
86
87pw_test("trace_tokenized_test") {
88  enable_if = _pw_trace_tokenized_is_selected
89  deps = [
90    ":core",
91    "$dir_pw_trace",
92  ]
93
94  sources = [ "trace_test.cc" ]
95}
96
97config("trace_buffer_size") {
98  defines = [ "PW_TRACE_BUFFER_SIZE_BYTES=${pw_trace_tokenized_BUFFER_SIZE}" ]
99}
100
101pw_proto_library("protos") {
102  sources = [
103    "pw_trace_protos/trace.proto",
104    "pw_trace_protos/trace_rpc.proto",
105    "pw_trace_protos/trace_service.proto",
106  ]
107  inputs = [
108    "pw_trace_protos/trace_rpc.options",
109    "pw_trace_protos/trace_service.options",
110  ]
111  python_package = "py"
112  deps = [ "$dir_pw_chrono:protos" ]
113}
114
115pw_source_set("trace_rpc_service") {
116  public_configs = [ ":public_include_path" ]
117  public_deps = [ ":protos.nanopb_rpc" ]
118  deps = [
119    ":core",
120    ":tokenized_trace_buffer",
121    "$dir_pw_log",
122    "$dir_pw_trace",
123  ]
124  sources = [
125    "public/pw_trace_tokenized/trace_rpc_service_nanopb.h",
126    "trace_rpc_service_nanopb.cc",
127  ]
128}
129
130pw_source_set("base_trace_service") {
131  public_configs = [ ":public_include_path" ]
132  public_deps = [
133    ":core",
134    ":tokenized_trace_buffer",
135  ]
136  deps = [
137    "$dir_pw_ring_buffer",
138    "$dir_pw_stream",
139  ]
140  sources = [
141    "base_trace_service.cc",
142    "public/pw_trace_tokenized/base_trace_service.h",
143  ]
144}
145
146pw_source_set("trace_service_pwpb") {
147  public_configs = [ ":public_include_path" ]
148  public_deps = [
149    ":base_trace_service",
150    ":protos.pwpb_rpc",
151  ]
152  deps = [ "$dir_pw_chrono:system_clock" ]
153  sources = [
154    "public/pw_trace_tokenized/trace_service_pwpb.h",
155    "trace_service_pwpb.cc",
156  ]
157}
158
159pw_test("trace_service_pwpb_test") {
160  enable_if = _pw_trace_tokenized_is_selected
161  deps = [
162    ":trace_service_pwpb",
163    "$dir_pw_chrono:system_clock",
164    "$dir_pw_rpc/pwpb:test_method_context",
165    "$dir_pw_trace",
166  ]
167  sources = [ "trace_service_pwpb_test.cc" ]
168}
169
170pw_source_set("tokenized_trace_buffer") {
171  deps = [ ":core" ]
172  public_deps = [
173    ":config",
174    "$dir_pw_bytes",
175    "$dir_pw_ring_buffer",
176    "$dir_pw_tokenizer",
177    "$dir_pw_varint",
178    dir_pw_span,
179  ]
180  sources = [ "trace_buffer.cc" ]
181  public_configs = [
182    ":public_include_path",
183    ":trace_buffer_size",
184  ]
185  public = [ "public/pw_trace_tokenized/trace_buffer.h" ]
186}
187
188pw_test("tokenized_trace_buffer_test") {
189  enable_if = _pw_trace_tokenized_is_selected
190  deps = [
191    ":tokenized_trace_buffer",
192    "$dir_pw_trace",
193  ]
194
195  sources = [ "trace_buffer_test.cc" ]
196}
197
198pw_source_set("tokenized_trace_buffer_log") {
199  deps = [
200    "$dir_pw_base64",
201    "$dir_pw_log",
202    "$dir_pw_string",
203  ]
204  public_deps = [ ":tokenized_trace_buffer" ]
205  sources = [ "trace_buffer_log.cc" ]
206  public = [ "public/pw_trace_tokenized/trace_buffer_log.h" ]
207}
208
209pw_test("tokenized_trace_buffer_log_test") {
210  enable_if = _pw_trace_tokenized_is_selected
211  deps = [
212    ":tokenized_trace_buffer_log",
213    "$dir_pw_trace",
214  ]
215  sources = [ "trace_buffer_log_test.cc" ]
216}
217
218pw_source_set("fake_trace_time") {
219  deps = [ ":config" ]
220  sources = [ "fake_trace_time.cc" ]
221}
222
223pw_source_set("host_trace_time") {
224  deps = [ ":config" ]
225  sources = [ "host_trace_time.cc" ]
226}
227
228pw_source_set("core") {
229  public_configs = [
230    ":backend_config",
231    ":public_include_path",
232  ]
233  public_deps = [
234    "$dir_pw_log",
235    "$dir_pw_status",
236    "$dir_pw_tokenizer",
237    dir_pw_span,
238  ]
239  deps = [
240    ":config",
241    "$dir_pw_assert",
242    "$dir_pw_ring_buffer",
243    "$dir_pw_trace:facade",
244    "$dir_pw_varint",
245  ]
246  public = [
247    "public/pw_trace_tokenized/internal/trace_tokenized_internal.h",
248    "public/pw_trace_tokenized/trace_callback.h",
249    "public/pw_trace_tokenized/trace_tokenized.h",
250  ]
251  sources = [ "trace.cc" ]
252  visibility = [ ":*" ]
253}
254
255pw_doc_group("docs") {
256  sources = [ "docs.rst" ]
257}
258
259config("trace_example_config") {
260  include_dirs = [ "example/public" ]
261}
262
263pw_source_set("trace_example_to_file") {
264  public_deps = [ ":pw_trace_tokenized" ]
265  public_configs = [ ":trace_example_config" ]
266  public = [ "example/public/pw_trace_tokenized/example/trace_to_file.h" ]
267}
268
269# Builds trace examples
270pw_executable("trace_tokenized_example_basic") {
271  deps = [
272    ":trace_example_to_file",
273    "$dir_pw_log",
274    "$dir_pw_trace",
275    "$dir_pw_trace:trace_sample_app",
276  ]
277  sources = [ "example/basic.cc" ]
278}
279
280pw_executable("trace_tokenized_example_trigger") {
281  deps = [
282    ":trace_example_to_file",
283    "$dir_pw_log",
284    "$dir_pw_trace",
285    "$dir_pw_trace:trace_sample_app",
286  ]
287  sources = [ "example/trigger.cc" ]
288}
289
290pw_executable("trace_tokenized_example_filter") {
291  deps = [
292    ":trace_example_to_file",
293    "$dir_pw_log",
294    "$dir_pw_trace",
295    "$dir_pw_trace:trace_sample_app",
296  ]
297  sources = [ "example/filter.cc" ]
298}
299
300if (dir_pw_third_party_nanopb == "") {
301  group("trace_tokenized_example_rpc") {
302  }
303} else {
304  pw_executable("trace_tokenized_example_rpc") {
305    sources = [ "example/rpc.cc" ]
306    deps = [
307      ":pw_trace_tokenized",
308      ":trace_rpc_service",
309      "$dir_pw_hdlc",
310      "$dir_pw_log",
311      "$dir_pw_rpc:server",
312      "$dir_pw_rpc/system_server",
313      "$dir_pw_trace",
314      "$dir_pw_trace:trace_sample_app",
315    ]
316  }
317}
318
319if (current_os != "linux") {
320  group("trace_tokenized_example_linux_group_by_tid") {
321  }
322} else {
323  pw_executable("trace_tokenized_example_linux_group_by_tid") {
324    sources = [ "example/linux_group_by_tid.cc" ]
325    deps = [
326      ":trace_example_to_file",
327      "$dir_pw_log",
328      "$dir_pw_trace",
329    ]
330  }
331}
332