• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
15load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library")
16load("@rules_cc//cc:cc_library.bzl", "cc_library")
17load("@rules_python//python:proto.bzl", "py_proto_library")
18load("@rules_python//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library")
19load("//pw_build:compatibility.bzl", "incompatible_with_mcu")
20load("//pw_build:pw_cc_binary.bzl", "pw_cc_binary")
21load(
22    "//pw_protobuf_compiler:pw_proto_library.bzl",
23    "nanopb_proto_library",
24    "nanopb_rpc_proto_library",
25    "pw_proto_filegroup",
26    "pwpb_proto_library",
27    "pwpb_rpc_proto_library",
28)
29load("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test")
30
31package(
32    default_visibility = ["//visibility:public"],
33    features = ["-layering_check"],
34)
35
36licenses(["notice"])
37
38cc_library(
39    name = "linux_config_overrides",
40    hdrs = ["linux_config_overrides.h"],
41    tags = ["manual"],
42)
43
44cc_library(
45    name = "config",
46    hdrs = [
47        "public/pw_trace_tokenized/config.h",
48    ],
49    strip_include_prefix = "public",
50    tags = ["noclangtidy"],
51)
52
53cc_library(
54    name = "pw_trace_tokenized",
55    srcs = [
56        "trace.cc",
57    ],
58    hdrs = [
59        "public/pw_trace_tokenized/internal/trace_tokenized_internal.h",
60        "public/pw_trace_tokenized/trace_callback.h",
61        "public/pw_trace_tokenized/trace_tokenized.h",
62        "public_overrides/pw_trace_backend/trace_backend.h",
63    ],
64    includes = [
65        "public",
66        "public_overrides",
67    ],
68    deps = [
69        ":config",
70        "//pw_log",
71        "//pw_status",
72        "//pw_tokenizer",
73        "//pw_trace:facade",
74        "//pw_varint",
75    ] + select({
76        "@platforms//os:none": [":pw_trace_tokenized_fake_time"],
77        "//conditions:default": [":pw_trace_host_trace_time"],
78    }),
79)
80
81cc_library(
82    name = "base_trace_service",
83    srcs = [
84        "base_trace_service.cc",
85    ],
86    hdrs = [
87        "public/pw_trace_tokenized/base_trace_service.h",
88    ],
89    strip_include_prefix = "public",
90    deps = [
91        ":buffer",
92        ":pw_trace_tokenized",
93        "//pw_ring_buffer",
94        "//pw_stream",
95    ],
96)
97
98cc_library(
99    name = "trace_service_pwpb",
100    srcs = [
101        "trace_service_pwpb.cc",
102    ],
103    hdrs = [
104        "public/pw_trace_tokenized/trace_service_pwpb.h",
105    ],
106    strip_include_prefix = "public",
107    deps = [
108        ":base_trace_service",
109        ":protos_pwpb_rpc",
110        "//pw_chrono:system_clock",
111    ],
112)
113
114cc_library(
115    name = "trace_rpc_service",
116    srcs = [
117        "trace_rpc_service_nanopb.cc",
118    ],
119    hdrs = [
120        "public/pw_trace_tokenized/trace_rpc_service_nanopb.h",
121    ],
122    strip_include_prefix = "public",
123    deps = [
124        ":buffer",
125        ":protos_nanopb_rpc",
126        "//pw_log",
127        "//pw_trace",
128    ],
129)
130
131cc_library(
132    name = "buffer",
133    srcs = [
134        "trace_buffer.cc",
135    ],
136    hdrs = [
137        "public/pw_trace_tokenized/trace_buffer.h",
138    ],
139    strip_include_prefix = "public",
140    deps = [
141        ":pw_trace_tokenized",
142        "//pw_bytes",
143        "//pw_ring_buffer",
144        "//pw_status",
145    ],
146)
147
148cc_library(
149    name = "buffer_log",
150    srcs = [
151        "trace_buffer_log.cc",
152    ],
153    hdrs = [
154        "public/pw_trace_tokenized/trace_buffer_log.h",
155    ],
156    deps = [
157        ":buffer",
158        "//pw_base64",
159        "//pw_log",
160        "//pw_string",
161    ],
162)
163
164proto_library(
165    name = "protos",
166    srcs = [
167        "pw_trace_protos/trace.proto",
168        ":trace_rpc_proto_filegroup",
169        ":trace_service_proto_filegroup",
170    ],
171    strip_import_prefix = "/pw_trace_tokenized",
172    deps = [
173        "//pw_chrono:chrono_proto",
174    ],
175)
176
177pw_proto_filegroup(
178    name = "trace_rpc_proto_filegroup",
179    srcs = [
180        "pw_trace_protos/trace_rpc.proto",
181    ],
182    options_files = [
183        "pw_trace_protos/trace_rpc.options",
184    ],
185)
186
187pw_proto_filegroup(
188    name = "trace_service_proto_filegroup",
189    srcs = [
190        "pw_trace_protos/trace_service.proto",
191    ],
192    options_files = [
193        "pw_trace_protos/trace_service.options",
194    ],
195)
196
197pwpb_proto_library(
198    name = "protos_pwpb",
199    deps = [":protos"],
200)
201
202pwpb_rpc_proto_library(
203    name = "protos_pwpb_rpc",
204    pwpb_proto_library_deps = [":protos_pwpb"],
205    deps = [":protos"],
206)
207
208nanopb_proto_library(
209    name = "protos_nanopb",
210    deps = [":protos"],
211)
212
213nanopb_rpc_proto_library(
214    name = "protos_nanopb_rpc",
215    nanopb_proto_library_deps = [":protos_nanopb"],
216    deps = [":protos"],
217)
218
219py_proto_library(
220    name = "proto_py",
221    deps = [":protos"],
222)
223
224cc_library(
225    name = "pw_trace_tokenized_fake_time",
226    srcs = [
227        "fake_trace_time.cc",
228    ],
229    target_compatible_with = select({
230        "@platforms//os:none": [],
231        "//conditions:default": ["@platforms//:incompatible"],
232    }),
233    deps = [
234        ":config",
235    ],
236)
237
238pw_cc_test(
239    name = "trace_tokenized_test",
240    srcs = [
241        "trace_test.cc",
242    ],
243    includes = [
244        "pw_trace_test",
245        "pw_trace_test/public_overrides",
246    ],
247    deps = [
248        ":pw_trace_tokenized",
249        "//pw_trace",
250    ],
251)
252
253pw_cc_test(
254    name = "buffer_test",
255    srcs = [
256        "trace_buffer_test.cc",
257    ],
258    deps = [
259        ":buffer",
260        ":pw_trace_tokenized",
261        "//pw_preprocessor",
262    ],
263)
264
265pw_cc_test(
266    name = "buffer_log_test",
267    srcs = [
268        "trace_buffer_log_test.cc",
269    ],
270    deps = [
271        ":buffer_log",
272        ":pw_trace_tokenized",
273        "//pw_preprocessor",
274    ],
275)
276
277pw_cc_test(
278    name = "trace_service_pwpb_test",
279    srcs = [
280        "trace_service_pwpb_test.cc",
281    ],
282    # TODO: b/343778108 - update to run on all compatible devices
283    target_compatible_with = incompatible_with_mcu(),
284    deps = [
285        ":pw_trace_host_trace_time",
286        ":trace_service_pwpb",
287        "//pw_chrono:system_clock",
288        "//pw_rpc/pwpb:test_method_context",
289        "//pw_trace",
290    ],
291)
292
293cc_library(
294    name = "pw_trace_host_trace_time",
295    srcs = ["host_trace_time.cc"],
296    includes = ["example/public"],
297    target_compatible_with = incompatible_with_mcu(),
298    deps = [":config"],
299)
300
301cc_library(
302    name = "pw_trace_example_to_file",
303    hdrs = ["example/public/pw_trace_tokenized/example/trace_to_file.h"],
304    includes = ["example/public"],
305    deps = [
306        ":pw_trace_tokenized",
307        "//pw_trace",
308    ],
309)
310
311pw_cc_binary(
312    name = "trace_tokenized_example_basic",
313    srcs = ["example/basic.cc"],
314    deps = [
315        ":pw_trace_example_to_file",
316        "//pw_log",
317        "//pw_trace",
318        "//pw_trace:pw_trace_sample_app",
319    ],
320)
321
322pw_cc_binary(
323    name = "trace_tokenized_example_trigger",
324    srcs = ["example/trigger.cc"],
325    deps = [
326        ":pw_trace_example_to_file",
327        "//pw_log",
328        "//pw_trace",
329        "//pw_trace:pw_trace_sample_app",
330    ],
331)
332
333pw_cc_binary(
334    name = "trace_tokenized_example_filter",
335    srcs = ["example/filter.cc"],
336    deps = [
337        ":pw_trace_example_to_file",
338        "//pw_log",
339        "//pw_trace",
340        "//pw_trace:pw_trace_sample_app",
341    ],
342)
343
344cc_library(
345    name = "trace_tokenized_example_rpc",
346    srcs = ["example/rpc.cc"],
347    implementation_deps = ["//pw_assert:check"],
348    deps = [
349        ":trace_rpc_service",
350        "//pw_hdlc",
351        "//pw_log",
352        "//pw_rpc",
353        "//pw_rpc/system_server",
354        "//pw_trace",
355        "//pw_trace:pw_trace_sample_app",
356    ],
357)
358
359cc_library(
360    name = "trace_tokenized_example_linux_group_by_tid",
361    srcs = ["example/linux_group_by_tid.cc"],
362    target_compatible_with = select({
363        "@platforms//os:linux": [],
364        "//conditions:default": ["@platforms//:incompatible"],
365    }),
366    deps = [
367        ":pw_trace_example_to_file",
368        "//pw_log",
369        "//pw_trace",
370    ],
371)
372
373sphinx_docs_library(
374    name = "docs",
375    srcs = [
376        "docs.rst",
377    ],
378    prefix = "pw_trace_tokenized/",
379    target_compatible_with = incompatible_with_mcu(),
380)
381