BUILD.bazel 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  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. load(
  17. "//absl:copts/configure_copts.bzl",
  18. "ABSL_DEFAULT_COPTS",
  19. "ABSL_DEFAULT_LINKOPTS",
  20. "ABSL_TEST_COPTS",
  21. )
  22. package(
  23. default_visibility = ["//visibility:public"],
  24. )
  25. licenses(["notice"])
  26. cc_library(
  27. name = "stacktrace",
  28. srcs = [
  29. "internal/stacktrace_aarch64-inl.inc",
  30. "internal/stacktrace_arm-inl.inc",
  31. "internal/stacktrace_config.h",
  32. "internal/stacktrace_emscripten-inl.inc",
  33. "internal/stacktrace_generic-inl.inc",
  34. "internal/stacktrace_powerpc-inl.inc",
  35. "internal/stacktrace_riscv-inl.inc",
  36. "internal/stacktrace_unimplemented-inl.inc",
  37. "internal/stacktrace_win32-inl.inc",
  38. "internal/stacktrace_x86-inl.inc",
  39. "stacktrace.cc",
  40. ],
  41. hdrs = ["stacktrace.h"],
  42. copts = ABSL_DEFAULT_COPTS,
  43. linkopts = ABSL_DEFAULT_LINKOPTS,
  44. deps = [
  45. ":debugging_internal",
  46. "//absl/base:config",
  47. "//absl/base:core_headers",
  48. ],
  49. )
  50. cc_library(
  51. name = "symbolize",
  52. srcs = [
  53. "symbolize.cc",
  54. "symbolize_darwin.inc",
  55. "symbolize_elf.inc",
  56. "symbolize_emscripten.inc",
  57. "symbolize_unimplemented.inc",
  58. "symbolize_win32.inc",
  59. ],
  60. hdrs = [
  61. "internal/symbolize.h",
  62. "symbolize.h",
  63. ],
  64. copts = ABSL_DEFAULT_COPTS,
  65. linkopts = ABSL_DEFAULT_LINKOPTS + select({
  66. "//absl:msvc_compiler": ["-DEFAULTLIB:dbghelp.lib"],
  67. "//absl:clang-cl_compiler": ["-DEFAULTLIB:dbghelp.lib"],
  68. "//conditions:default": [],
  69. }),
  70. deps = [
  71. ":debugging_internal",
  72. ":demangle_internal",
  73. "//absl/base",
  74. "//absl/base:config",
  75. "//absl/base:core_headers",
  76. "//absl/base:dynamic_annotations",
  77. "//absl/base:malloc_internal",
  78. "//absl/base:raw_logging_internal",
  79. "//absl/strings",
  80. ],
  81. )
  82. cc_test(
  83. name = "symbolize_test",
  84. srcs = ["symbolize_test.cc"],
  85. copts = ABSL_TEST_COPTS + select({
  86. "//absl:msvc_compiler": ["/Z7"],
  87. "//absl:clang-cl_compiler": ["/Z7"],
  88. "//conditions:default": [],
  89. }),
  90. linkopts = ABSL_DEFAULT_LINKOPTS + select({
  91. "//absl:msvc_compiler": ["/DEBUG"],
  92. "//absl:clang-cl_compiler": ["/DEBUG"],
  93. "//conditions:default": [],
  94. }),
  95. deps = [
  96. ":stack_consumption",
  97. ":symbolize",
  98. "//absl/base",
  99. "//absl/base:config",
  100. "//absl/base:core_headers",
  101. "//absl/base:raw_logging_internal",
  102. "//absl/memory",
  103. "//absl/strings",
  104. "@com_google_googletest//:gtest",
  105. ],
  106. )
  107. cc_library(
  108. name = "examine_stack",
  109. srcs = [
  110. "internal/examine_stack.cc",
  111. ],
  112. hdrs = [
  113. "internal/examine_stack.h",
  114. ],
  115. copts = ABSL_DEFAULT_COPTS,
  116. linkopts = ABSL_DEFAULT_LINKOPTS,
  117. visibility = ["//visibility:private"],
  118. deps = [
  119. ":stacktrace",
  120. ":symbolize",
  121. "//absl/base:config",
  122. "//absl/base:core_headers",
  123. "//absl/base:raw_logging_internal",
  124. ],
  125. )
  126. cc_library(
  127. name = "failure_signal_handler",
  128. srcs = ["failure_signal_handler.cc"],
  129. hdrs = ["failure_signal_handler.h"],
  130. copts = ABSL_DEFAULT_COPTS,
  131. linkopts = ABSL_DEFAULT_LINKOPTS,
  132. deps = [
  133. ":examine_stack",
  134. ":stacktrace",
  135. "//absl/base",
  136. "//absl/base:config",
  137. "//absl/base:core_headers",
  138. "//absl/base:errno_saver",
  139. "//absl/base:raw_logging_internal",
  140. ],
  141. )
  142. cc_test(
  143. name = "failure_signal_handler_test",
  144. srcs = ["failure_signal_handler_test.cc"],
  145. copts = ABSL_TEST_COPTS,
  146. linkopts = select({
  147. "//absl:msvc_compiler": [],
  148. "//absl:clang-cl_compiler": [],
  149. "//absl:wasm": [],
  150. "//conditions:default": ["-pthread"],
  151. }) + ABSL_DEFAULT_LINKOPTS,
  152. deps = [
  153. ":failure_signal_handler",
  154. ":stacktrace",
  155. ":symbolize",
  156. "//absl/base:raw_logging_internal",
  157. "//absl/strings",
  158. "@com_google_googletest//:gtest",
  159. ],
  160. )
  161. cc_library(
  162. name = "debugging_internal",
  163. srcs = [
  164. "internal/address_is_readable.cc",
  165. "internal/elf_mem_image.cc",
  166. "internal/vdso_support.cc",
  167. ],
  168. hdrs = [
  169. "internal/address_is_readable.h",
  170. "internal/elf_mem_image.h",
  171. "internal/vdso_support.h",
  172. ],
  173. copts = ABSL_DEFAULT_COPTS,
  174. linkopts = ABSL_DEFAULT_LINKOPTS,
  175. visibility = ["//visibility:private"],
  176. deps = [
  177. "//absl/base:config",
  178. "//absl/base:core_headers",
  179. "//absl/base:dynamic_annotations",
  180. "//absl/base:errno_saver",
  181. "//absl/base:raw_logging_internal",
  182. ],
  183. )
  184. cc_library(
  185. name = "demangle_internal",
  186. srcs = ["internal/demangle.cc"],
  187. hdrs = ["internal/demangle.h"],
  188. copts = ABSL_DEFAULT_COPTS,
  189. visibility = ["//visibility:private"],
  190. deps = [
  191. "//absl/base",
  192. "//absl/base:config",
  193. "//absl/base:core_headers",
  194. ],
  195. )
  196. cc_test(
  197. name = "demangle_test",
  198. srcs = ["internal/demangle_test.cc"],
  199. copts = ABSL_TEST_COPTS,
  200. linkopts = ABSL_DEFAULT_LINKOPTS,
  201. deps = [
  202. ":demangle_internal",
  203. ":stack_consumption",
  204. "//absl/base:config",
  205. "//absl/base:core_headers",
  206. "//absl/base:raw_logging_internal",
  207. "//absl/memory",
  208. "@com_google_googletest//:gtest_main",
  209. ],
  210. )
  211. cc_library(
  212. name = "leak_check",
  213. srcs = ["leak_check.cc"],
  214. hdrs = ["leak_check.h"],
  215. linkopts = ABSL_DEFAULT_LINKOPTS,
  216. deps = [
  217. "//absl/base:config",
  218. "//absl/base:core_headers",
  219. ],
  220. )
  221. # Adding a dependency to leak_check_disable will disable
  222. # sanitizer leak checking (asan/lsan) in a test without
  223. # the need to mess around with build features.
  224. cc_library(
  225. name = "leak_check_disable",
  226. srcs = ["leak_check_disable.cc"],
  227. linkopts = ABSL_DEFAULT_LINKOPTS,
  228. linkstatic = 1,
  229. deps = ["//absl/base:config"],
  230. alwayslink = 1,
  231. )
  232. # These targets exists for use in tests only, explicitly configuring the
  233. # LEAK_SANITIZER macro. It must be linked with -fsanitize=leak for lsan.
  234. ABSL_LSAN_LINKOPTS = select({
  235. "//absl:clang_compiler": ["-fsanitize=leak"],
  236. "//conditions:default": [],
  237. })
  238. cc_library(
  239. name = "leak_check_api_enabled_for_testing",
  240. testonly = 1,
  241. srcs = ["leak_check.cc"],
  242. hdrs = ["leak_check.h"],
  243. copts = select({
  244. "//absl:clang_compiler": ["-DLEAK_SANITIZER"],
  245. "//conditions:default": [],
  246. }),
  247. linkopts = ABSL_DEFAULT_LINKOPTS,
  248. visibility = ["//visibility:private"],
  249. deps = [
  250. "//absl/base:config",
  251. "//absl/base:core_headers",
  252. ],
  253. )
  254. cc_library(
  255. name = "leak_check_api_disabled_for_testing",
  256. testonly = 1,
  257. srcs = ["leak_check.cc"],
  258. hdrs = ["leak_check.h"],
  259. copts = ["-ULEAK_SANITIZER"],
  260. linkopts = ABSL_DEFAULT_LINKOPTS,
  261. visibility = ["//visibility:private"],
  262. deps = [
  263. "//absl/base:config",
  264. "//absl/base:core_headers",
  265. ],
  266. )
  267. cc_test(
  268. name = "leak_check_test",
  269. srcs = ["leak_check_test.cc"],
  270. copts = select({
  271. "//absl:clang_compiler": ["-DABSL_EXPECT_LEAK_SANITIZER"],
  272. "//conditions:default": [],
  273. }),
  274. linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
  275. tags = ["notsan"],
  276. deps = [
  277. ":leak_check_api_enabled_for_testing",
  278. "//absl/base",
  279. "@com_google_googletest//:gtest_main",
  280. ],
  281. )
  282. cc_test(
  283. name = "leak_check_no_lsan_test",
  284. srcs = ["leak_check_test.cc"],
  285. copts = ["-UABSL_EXPECT_LEAK_SANITIZER"],
  286. linkopts = ABSL_DEFAULT_LINKOPTS,
  287. tags = ["noasan"],
  288. deps = [
  289. ":leak_check_api_disabled_for_testing",
  290. "//absl/base", # for raw_logging
  291. "@com_google_googletest//:gtest_main",
  292. ],
  293. )
  294. # Test that leak checking is skipped when lsan is enabled but
  295. # ":leak_check_disable" is linked in.
  296. #
  297. # This test should fail in the absence of a dependency on ":leak_check_disable"
  298. cc_test(
  299. name = "disabled_leak_check_test",
  300. srcs = ["leak_check_fail_test.cc"],
  301. linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
  302. tags = ["notsan"],
  303. deps = [
  304. ":leak_check_api_enabled_for_testing",
  305. ":leak_check_disable",
  306. "//absl/base",
  307. "@com_google_googletest//:gtest_main",
  308. ],
  309. )
  310. cc_library(
  311. name = "stack_consumption",
  312. testonly = 1,
  313. srcs = ["internal/stack_consumption.cc"],
  314. hdrs = ["internal/stack_consumption.h"],
  315. copts = ABSL_DEFAULT_COPTS,
  316. linkopts = ABSL_DEFAULT_LINKOPTS,
  317. visibility = ["//visibility:private"],
  318. deps = [
  319. "//absl/base:config",
  320. "//absl/base:core_headers",
  321. "//absl/base:raw_logging_internal",
  322. ],
  323. )
  324. cc_test(
  325. name = "stack_consumption_test",
  326. srcs = ["internal/stack_consumption_test.cc"],
  327. copts = ABSL_TEST_COPTS,
  328. linkopts = ABSL_DEFAULT_LINKOPTS,
  329. tags = ["notsan"],
  330. deps = [
  331. ":stack_consumption",
  332. "//absl/base:core_headers",
  333. "//absl/base:raw_logging_internal",
  334. "@com_google_googletest//:gtest_main",
  335. ],
  336. )