1# 2# Copyright 2017 The Abseil Authors. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# https://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17load( 18 "//absl:copts/configure_copts.bzl", 19 "ABSL_DEFAULT_COPTS", 20 "ABSL_DEFAULT_LINKOPTS", 21 "ABSL_TEST_COPTS", 22) 23 24package( 25 default_visibility = ["//visibility:public"], 26 features = [ 27 "header_modules", 28 "layering_check", 29 "parse_headers", 30 ], 31) 32 33licenses(["notice"]) 34 35cc_library( 36 name = "stacktrace", 37 srcs = [ 38 "internal/stacktrace_aarch64-inl.inc", 39 "internal/stacktrace_arm-inl.inc", 40 "internal/stacktrace_config.h", 41 "internal/stacktrace_emscripten-inl.inc", 42 "internal/stacktrace_generic-inl.inc", 43 "internal/stacktrace_powerpc-inl.inc", 44 "internal/stacktrace_riscv-inl.inc", 45 "internal/stacktrace_unimplemented-inl.inc", 46 "internal/stacktrace_win32-inl.inc", 47 "internal/stacktrace_x86-inl.inc", 48 "stacktrace.cc", 49 ], 50 hdrs = ["stacktrace.h"], 51 copts = ABSL_DEFAULT_COPTS, 52 linkopts = ABSL_DEFAULT_LINKOPTS, 53 deps = [ 54 ":debugging_internal", 55 "//absl/base:config", 56 "//absl/base:core_headers", 57 "//absl/base:dynamic_annotations", 58 "//absl/base:raw_logging_internal", 59 ], 60) 61 62cc_test( 63 name = "stacktrace_test", 64 srcs = ["stacktrace_test.cc"], 65 copts = ABSL_TEST_COPTS, 66 linkopts = ABSL_DEFAULT_LINKOPTS, 67 deps = [ 68 ":stacktrace", 69 "//absl/base:core_headers", 70 "@com_google_googletest//:gtest", 71 "@com_google_googletest//:gtest_main", 72 ], 73) 74 75cc_library( 76 name = "symbolize", 77 srcs = [ 78 "symbolize.cc", 79 "symbolize_darwin.inc", 80 "symbolize_elf.inc", 81 "symbolize_emscripten.inc", 82 "symbolize_unimplemented.inc", 83 "symbolize_win32.inc", 84 ], 85 hdrs = [ 86 "internal/symbolize.h", 87 "symbolize.h", 88 ], 89 copts = ABSL_DEFAULT_COPTS, 90 linkopts = ABSL_DEFAULT_LINKOPTS + select({ 91 "//absl:msvc_compiler": ["-DEFAULTLIB:dbghelp.lib"], 92 "//absl:clang-cl_compiler": ["-DEFAULTLIB:dbghelp.lib"], 93 "//absl:mingw_compiler": [ 94 "-DEFAULTLIB:dbghelp.lib", 95 "-ldbghelp", 96 ], 97 "//conditions:default": [], 98 }), 99 deps = [ 100 ":debugging_internal", 101 ":demangle_internal", 102 "//absl/base", 103 "//absl/base:config", 104 "//absl/base:core_headers", 105 "//absl/base:dynamic_annotations", 106 "//absl/base:malloc_internal", 107 "//absl/base:raw_logging_internal", 108 "//absl/strings", 109 ], 110) 111 112cc_test( 113 name = "symbolize_test", 114 srcs = ["symbolize_test.cc"], 115 copts = ABSL_TEST_COPTS + select({ 116 "//absl:msvc_compiler": ["/Z7"], 117 "//absl:clang-cl_compiler": ["/Z7"], 118 "//conditions:default": [], 119 }), 120 linkopts = ABSL_DEFAULT_LINKOPTS + select({ 121 "//absl:msvc_compiler": ["/DEBUG"], 122 "//absl:clang-cl_compiler": ["/DEBUG"], 123 "//conditions:default": [], 124 }), 125 deps = [ 126 ":stack_consumption", 127 ":symbolize", 128 "//absl/base", 129 "//absl/base:config", 130 "//absl/base:core_headers", 131 "//absl/log", 132 "//absl/log:check", 133 "//absl/memory", 134 "//absl/strings", 135 "@com_google_googletest//:gtest", 136 ], 137) 138 139cc_library( 140 name = "examine_stack", 141 srcs = [ 142 "internal/examine_stack.cc", 143 ], 144 hdrs = [ 145 "internal/examine_stack.h", 146 ], 147 copts = ABSL_DEFAULT_COPTS, 148 linkopts = ABSL_DEFAULT_LINKOPTS, 149 visibility = ["//absl/log/internal:__pkg__"], 150 deps = [ 151 ":stacktrace", 152 ":symbolize", 153 "//absl/base:config", 154 "//absl/base:core_headers", 155 "//absl/base:raw_logging_internal", 156 ], 157) 158 159cc_library( 160 name = "failure_signal_handler", 161 srcs = ["failure_signal_handler.cc"], 162 hdrs = ["failure_signal_handler.h"], 163 copts = ABSL_DEFAULT_COPTS, 164 linkopts = ABSL_DEFAULT_LINKOPTS, 165 deps = [ 166 ":examine_stack", 167 ":stacktrace", 168 "//absl/base", 169 "//absl/base:config", 170 "//absl/base:core_headers", 171 "//absl/base:raw_logging_internal", 172 ], 173) 174 175cc_test( 176 name = "failure_signal_handler_test", 177 srcs = ["failure_signal_handler_test.cc"], 178 copts = ABSL_TEST_COPTS, 179 linkopts = select({ 180 "//absl:msvc_compiler": [], 181 "//absl:clang-cl_compiler": [], 182 "//absl:wasm": [], 183 "//conditions:default": ["-pthread"], 184 }) + ABSL_DEFAULT_LINKOPTS, 185 deps = [ 186 ":failure_signal_handler", 187 ":stacktrace", 188 ":symbolize", 189 "//absl/base:raw_logging_internal", 190 "//absl/log:check", 191 "//absl/strings", 192 "@com_google_googletest//:gtest", 193 ], 194) 195 196cc_library( 197 name = "debugging_internal", 198 srcs = [ 199 "internal/address_is_readable.cc", 200 "internal/elf_mem_image.cc", 201 "internal/vdso_support.cc", 202 ], 203 hdrs = [ 204 "internal/address_is_readable.h", 205 "internal/elf_mem_image.h", 206 "internal/vdso_support.h", 207 ], 208 copts = ABSL_DEFAULT_COPTS, 209 linkopts = ABSL_DEFAULT_LINKOPTS, 210 visibility = ["//visibility:private"], 211 deps = [ 212 "//absl/base:config", 213 "//absl/base:core_headers", 214 "//absl/base:dynamic_annotations", 215 "//absl/base:errno_saver", 216 "//absl/base:raw_logging_internal", 217 ], 218) 219 220cc_library( 221 name = "demangle_internal", 222 srcs = ["internal/demangle.cc"], 223 hdrs = ["internal/demangle.h"], 224 copts = ABSL_DEFAULT_COPTS, 225 linkopts = ABSL_DEFAULT_LINKOPTS, 226 visibility = [ 227 "//absl/container:__pkg__", 228 "//absl/debugging:__pkg__", 229 ], 230 deps = [ 231 ":demangle_rust", 232 "//absl/base", 233 "//absl/base:config", 234 "//absl/base:core_headers", 235 "//absl/base:nullability", 236 "//absl/numeric:bits", 237 ], 238) 239 240cc_test( 241 name = "demangle_test", 242 srcs = ["internal/demangle_test.cc"], 243 copts = ABSL_TEST_COPTS, 244 linkopts = ABSL_DEFAULT_LINKOPTS, 245 deps = [ 246 ":demangle_internal", 247 ":stack_consumption", 248 "//absl/base:config", 249 "//absl/base:core_headers", 250 "//absl/log", 251 "//absl/memory", 252 "@com_google_googletest//:gtest", 253 "@com_google_googletest//:gtest_main", 254 ], 255) 256 257cc_library( 258 name = "bounded_utf8_length_sequence", 259 hdrs = ["internal/bounded_utf8_length_sequence.h"], 260 copts = ABSL_DEFAULT_COPTS, 261 linkopts = ABSL_DEFAULT_LINKOPTS, 262 deps = [ 263 "//absl/base:config", 264 "//absl/numeric:bits", 265 ], 266) 267 268cc_test( 269 name = "bounded_utf8_length_sequence_test", 270 srcs = ["internal/bounded_utf8_length_sequence_test.cc"], 271 copts = ABSL_TEST_COPTS, 272 linkopts = ABSL_DEFAULT_LINKOPTS, 273 deps = [ 274 ":bounded_utf8_length_sequence", 275 "//absl/base:config", 276 "@com_google_googletest//:gtest", 277 "@com_google_googletest//:gtest_main", 278 ], 279) 280 281cc_library( 282 name = "decode_rust_punycode", 283 srcs = ["internal/decode_rust_punycode.cc"], 284 hdrs = ["internal/decode_rust_punycode.h"], 285 copts = ABSL_DEFAULT_COPTS, 286 linkopts = ABSL_DEFAULT_LINKOPTS, 287 deps = [ 288 ":bounded_utf8_length_sequence", 289 ":utf8_for_code_point", 290 "//absl/base:config", 291 "//absl/base:nullability", 292 ], 293) 294 295cc_test( 296 name = "decode_rust_punycode_test", 297 srcs = ["internal/decode_rust_punycode_test.cc"], 298 copts = ABSL_TEST_COPTS, 299 linkopts = ABSL_DEFAULT_LINKOPTS, 300 deps = [ 301 ":decode_rust_punycode", 302 "//absl/base:config", 303 "@com_google_googletest//:gtest", 304 "@com_google_googletest//:gtest_main", 305 ], 306) 307 308cc_library( 309 name = "demangle_rust", 310 srcs = ["internal/demangle_rust.cc"], 311 hdrs = ["internal/demangle_rust.h"], 312 copts = ABSL_DEFAULT_COPTS, 313 linkopts = ABSL_DEFAULT_LINKOPTS, 314 deps = [ 315 ":decode_rust_punycode", 316 "//absl/base:config", 317 "//absl/base:core_headers", 318 ], 319) 320 321cc_test( 322 name = "demangle_rust_test", 323 srcs = ["internal/demangle_rust_test.cc"], 324 copts = ABSL_TEST_COPTS, 325 linkopts = ABSL_DEFAULT_LINKOPTS, 326 deps = [ 327 ":demangle_rust", 328 "//absl/base:config", 329 "//absl/base:core_headers", 330 "@com_google_googletest//:gtest", 331 "@com_google_googletest//:gtest_main", 332 ], 333) 334 335cc_library( 336 name = "utf8_for_code_point", 337 srcs = ["internal/utf8_for_code_point.cc"], 338 hdrs = ["internal/utf8_for_code_point.h"], 339 copts = ABSL_DEFAULT_COPTS, 340 linkopts = ABSL_DEFAULT_LINKOPTS, 341 deps = ["//absl/base:config"], 342) 343 344cc_test( 345 name = "utf8_for_code_point_test", 346 srcs = ["internal/utf8_for_code_point_test.cc"], 347 copts = ABSL_TEST_COPTS, 348 linkopts = ABSL_DEFAULT_LINKOPTS, 349 deps = [ 350 ":utf8_for_code_point", 351 "//absl/base:config", 352 "@com_google_googletest//:gtest", 353 "@com_google_googletest//:gtest_main", 354 ], 355) 356 357cc_library( 358 name = "leak_check", 359 srcs = ["leak_check.cc"], 360 hdrs = ["leak_check.h"], 361 copts = ABSL_DEFAULT_COPTS, 362 linkopts = ABSL_DEFAULT_LINKOPTS, 363 deps = [ 364 "//absl/base:config", 365 "//absl/base:core_headers", 366 ], 367) 368 369cc_test( 370 name = "leak_check_test", 371 srcs = ["leak_check_test.cc"], 372 copts = ABSL_TEST_COPTS, 373 linkopts = ABSL_DEFAULT_LINKOPTS, 374 tags = ["notsan"], 375 deps = [ 376 ":leak_check", 377 "//absl/base:config", 378 "//absl/log", 379 "@com_google_googletest//:gtest", 380 "@com_google_googletest//:gtest_main", 381 ], 382) 383 384# Binary that leaks memory and expects to fail on exit. This isn't a 385# test that expected to pass on its own; it exists to be called by a 386# script that checks exit status and output. 387# TODO(absl-team): Write a test to run this with a script that 388# verifies that it correctly fails. 389cc_binary( 390 name = "leak_check_fail_test_binary", 391 srcs = ["leak_check_fail_test.cc"], 392 copts = ABSL_TEST_COPTS, 393 linkopts = ABSL_DEFAULT_LINKOPTS, 394 deps = [ 395 ":leak_check", 396 "//absl/log", 397 "@com_google_googletest//:gtest", 398 "@com_google_googletest//:gtest_main", 399 ], 400) 401 402cc_library( 403 name = "stack_consumption", 404 testonly = 1, 405 srcs = ["internal/stack_consumption.cc"], 406 hdrs = ["internal/stack_consumption.h"], 407 copts = ABSL_DEFAULT_COPTS, 408 linkopts = ABSL_DEFAULT_LINKOPTS, 409 visibility = ["//visibility:private"], 410 deps = [ 411 "//absl/base:config", 412 "//absl/base:core_headers", 413 "//absl/base:raw_logging_internal", 414 ], 415) 416 417cc_test( 418 name = "stack_consumption_test", 419 srcs = ["internal/stack_consumption_test.cc"], 420 copts = ABSL_TEST_COPTS, 421 linkopts = ABSL_DEFAULT_LINKOPTS, 422 tags = ["notsan"], 423 deps = [ 424 ":stack_consumption", 425 "//absl/base:core_headers", 426 "//absl/log", 427 "@com_google_googletest//:gtest", 428 "@com_google_googletest//:gtest_main", 429 ], 430) 431 432cc_binary( 433 name = "stacktrace_benchmark", 434 testonly = 1, 435 srcs = ["stacktrace_benchmark.cc"], 436 copts = ABSL_TEST_COPTS, 437 linkopts = ABSL_DEFAULT_LINKOPTS, 438 tags = ["benchmark"], 439 deps = [ 440 ":stacktrace", 441 "//absl/base:config", 442 "//absl/base:core_headers", 443 "@com_github_google_benchmark//:benchmark_main", 444 ], 445) 446