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