blob: cb8b2014a5b403f4ef7aac07e036e357e1037e8a [file]
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
_BACKENDS = [
"addr2line",
"auto",
"basic",
"libbacktrace",
"noop",
"windbg",
"windbg_cached",
]
# Select with --@boost.stacktrace//:backend=<backend>. The default leaves
# Boost.Stacktrace's platform-specific backend selection unchanged.
string_flag(
name = "backend",
build_setting_default = "auto",
values = _BACKENDS,
visibility = ["//visibility:public"],
)
[
config_setting(
name = backend,
flag_values = {":backend": backend},
)
for backend in _BACKENDS
]
config_setting(
name = "linux",
constraint_values = ["@platforms//os:linux"],
)
config_setting(
name = "macos",
constraint_values = ["@platforms//os:macos"],
)
config_setting(
name = "windows",
constraint_values = ["@platforms//os:windows"],
)
selects.config_setting_group(
name = "uses_dl",
match_any = [
":addr2line",
":auto",
":basic",
":libbacktrace",
],
)
selects.config_setting_group(
name = "uses_dl_on_linux",
match_all = [
":linux",
":uses_dl",
],
)
selects.config_setting_group(
name = "auto_on_windows",
match_all = [
":auto",
":windows",
],
)
selects.config_setting_group(
name = "uses_windbg",
match_any = [
":auto_on_windows",
":windbg",
":windbg_cached",
],
)
cc_library(
name = "boost.stacktrace",
hdrs = glob(
[
"include/**/*.hpp",
"include/**/*.h",
"include/**/*.ipp",
],
exclude = [
"include/boost/stacktrace.hpp",
"include/boost/stacktrace/detail/**",
"include/boost/stacktrace/frame.hpp",
"include/boost/stacktrace/safe_dump_to.hpp",
"include/boost/stacktrace/stacktrace.hpp",
"include/boost/stacktrace/this_thread.hpp",
],
),
defines = select({
":addr2line": ["BOOST_STACKTRACE_USE_ADDR2LINE"],
":libbacktrace": ["BOOST_STACKTRACE_USE_BACKTRACE"],
":noop": ["BOOST_STACKTRACE_USE_NOOP"],
":windbg": ["BOOST_STACKTRACE_USE_WINDBG"],
":windbg_cached": ["BOOST_STACKTRACE_USE_WINDBG_CACHED"],
"//conditions:default": [],
}) + select({
":macos": ["BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED"],
"//conditions:default": [],
}),
features = ["parse_headers"],
includes = ["include"],
linkopts = select({
":uses_dl_on_linux": ["-ldl"],
"//conditions:default": [],
}) + select({
":uses_windbg": [
"-DEFAULTLIB:dbgeng",
"-DEFAULTLIB:ole32",
],
"//conditions:default": [],
}),
textual_hdrs = [
"include/boost/stacktrace.hpp",
"include/boost/stacktrace/frame.hpp",
"include/boost/stacktrace/safe_dump_to.hpp",
"include/boost/stacktrace/stacktrace.hpp",
"include/boost/stacktrace/this_thread.hpp",
] + glob([
"include/boost/stacktrace/detail/**",
]),
visibility = ["//visibility:public"],
deps = [
"@boost.assert",
"@boost.config",
"@boost.container_hash",
"@boost.core",
"@boost.predef",
"@boost.winapi",
] + select({
":libbacktrace": ["@libbacktrace//:libbacktrace"],
"//conditions:default": [],
}),
)