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