blob: 60e04625430efc648098839ec54fa3e30adfbd19 [file]
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
load("@rules_cc//cc:defs.bzl", "cc_library")
load("//:gen_test_targets.bzl", "gen_test_targets")
expand_template(
name = "config_h",
out = "src/lib/libdwarf/config.h",
# Enable features assuming we are compiling for a modern posix system.
substitutions = {
"#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1": "",
"#cmakedefine CRAY_STACKSEG_END 1": "",
"#cmakedefine HAVE_DLFCN_H 1": "#define HAVE_DLFCN_H 1",
"#cmakedefine HAVE_FCNTL_H 1": "#define HAVE_FCNTL_H 1",
"#cmakedefine WORDS_BIGENDIAN 1": "",
"#cmakedefine HAVE_STDINT_H 1": "#define HAVE_STDINT_H 1",
"#cmakedefine HAVE_SYS_STAT_H 1": "#define HAVE_SYS_STAT_H 1",
"#cmakedefine HAVE_SYS_TYPES_H 1": "#define HAVE_SYS_TYPES_H 1",
"#cmakedefine HAVE_FULL_MMAP 1": "#define HAVE_FULL_MMAP 1",
"#cmakedefine uintptr_t ${uintptr_t}": "",
"#cmakedefine intptr_t ${intptr_t}": "",
"#cmakedefine HAVE_UNISTD_H 1": "#define HAVE_UNISTD_H 1",
"#cmakedefine HAVE_ZLIB 1": "#define HAVE_ZLIB 1",
"#cmakedefine HAVE_ZLIB_H 1": "#define HAVE_ZLIB_H 1",
"#cmakedefine HAVE_ZSTD 1": "#define HAVE_ZSTD 1",
"#cmakedefine HAVE_ZSTD_H 1": "#define HAVE_ZSTD_H 1",
"#cmakedefine LT_OBJDIR 1": "",
# PACKAGE_VERSION needs to be defined for the code to compile, but I
# don't really want to put the actual version in here since people are
# going to forget to update it, so just set it to empty string.
"#define PACKAGE_VERSION \"@PROJECT_VERSION@\"": "#define PACKAGE_VERSION \"\"",
"#define PACKAGE_BUGREPORT \"@PACKAGE_BUGREPORT@\"": "",
"#define PACKAGE_NAME \"@PROJECT_NAME@\"": "",
"#define PACKAGE_STRING \"@PACKAGE_STRING@\"": "",
"#cmakedefine PACKAGE_TARNAME": "",
"#define PACKAGE_URL \"@PROJECT_HOMEPAGE_URL@\"": "",
"#cmakedefine STACK_DIRECTION": "",
"#cmakedefine STDC_HEADERS 1": "#define STDC_HEADERS 1",
"#cmakedefine PACKAGE_VERSION ${PACKAGE_VERSION}": "",
# Must be substituted after all defines with a PACKAGE_* prefix,
# otherwise it will replace part of those defines.
"#cmakedefine PACKAGE": "",
} | select({
"@platforms//os:macos": {"#cmakedefine HAVE_MALLOC_H 1": ""},
"//conditions:default": {"#cmakedefine HAVE_MALLOC_H 1": "#define HAVE_MALLOC_H 1"},
}),
template = "cmake/config.h.in",
)
cc_library(
name = "dwarf",
srcs = [":config_h"] + glob(
[
"src/lib/libdwarf/*.c",
"src/lib/libdwarfp/*.c",
],
),
hdrs = glob(
[
"src/lib/libdwarf/*.h",
"src/lib/libdwarfp/*.h",
],
),
includes = [
"src/lib",
"src/lib/libdwarf",
"src/lib/libdwarfp",
],
deps = [
"@zlib",
"@zstd",
],
)
alias(
name = "libdwarf",
actual = ":dwarf",
visibility = ["//visibility:public"],
)
cc_library(
name = "dwarfdump",
# Testonly for now as this only exists for the tests to run. Ideally we also
# have a cc_binary for dwarfdump, since it's a binary, but we can add that
# if somebody actually needs it.
testonly = True,
srcs = glob(["src/bin/dwarfdump/*.c"]),
hdrs = glob(
[
"src/bin/dwarfdump/*.h",
"src/bin/dwarfdump/*.c",
],
),
includes = ["src/bin/dwarfdump"],
deps = [":dwarf"],
)
# Generates a good chunk of the C tests, which should be good enough to verify
# this has been Bazelified correctly. There are some Python tests and some tests
# that don't start with test_* that are not run.
gen_test_targets(
name = "gen_dwarf_test_targets",
cc_srcs = glob(
["test/test_*.c"],
exclude = [
# These tests require an env var to be set to the root of this lib.
# Probably not worth getting it to work.
"test/test_errmsglist.c",
"test/test_lname.c",
],
),
)