blob: 5da1b4005c222e814a167cf941a08a9100f94431 [file] [log] [blame]
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_defaults {
name: "debuggerd_defaults",
cflags: [
"-Wall",
"-Wextra",
"-Werror",
"-Wno-gcc-compat",
"-Wno-unused-argument",
"-Wno-unused-function",
"-Wno-nullability-completeness",
"-Os",
"-fno-finite-loops",
"-DANDROID_DEBUGGABLE=0",
],
local_include_dirs: ["include"],
product_variables: {
debuggable: {
cflags: ["-UANDROID_DEBUGGABLE", "-DANDROID_DEBUGGABLE=1"],
}
},
}
cc_library_headers {
name: "libdebuggerd_common_headers",
export_include_dirs: ["common/include"],
recovery_available: true,
vendor_ramdisk_available: true,
apex_available: [
"com.android.virt",
"//apex_available:platform",
],
}
cc_library_shared {
name: "libtombstoned_client",
defaults: ["debuggerd_defaults"],
srcs: [
"tombstoned/tombstoned_client.cpp",
"util.cpp",
],
header_libs: ["libdebuggerd_common_headers"],
static_libs: [
"libasync_safe",
],
shared_libs: [
"libbase",
"libcutils",
],
apex_available: [
"com.android.virt",
"//apex_available:platform",
],
export_header_lib_headers: ["libdebuggerd_common_headers"],
export_include_dirs: ["tombstoned/include"],
}
// Utility library to talk to tombstoned and get an output fd.
cc_library_static {
name: "libtombstoned_client_static",
defaults: ["debuggerd_defaults"],
recovery_available: true,
vendor_ramdisk_available: true,
srcs: [
"tombstoned/tombstoned_client.cpp",
"util.cpp",
],
header_libs: ["libdebuggerd_common_headers"],
whole_static_libs: [
"libasync_safe",
"libcutils",
"libbase",
],
export_header_lib_headers: ["libdebuggerd_common_headers"],
export_include_dirs: ["tombstoned/include"],
}
// Core implementation, linked into libdebuggerd_handler and the dynamic linker.
cc_library_static {
name: "libdebuggerd_handler_core",
defaults: ["debuggerd_defaults"],
recovery_available: true,
vendor_ramdisk_available: true,
srcs: ["handler/debuggerd_handler.cpp"],
header_libs: [
"libbase_headers",
"libdebuggerd_common_headers",
"bionic_libc_platform_headers",
"gwp_asan_headers",
],
whole_static_libs: [
"libasync_safe",
"libcutils",
"libdebuggerd",
],
export_header_lib_headers: ["libdebuggerd_common_headers"],
export_include_dirs: ["include"],
}
// Implementation with a no-op fallback.
cc_library_static {
name: "libdebuggerd_handler",
defaults: ["debuggerd_defaults"],
srcs: ["handler/debuggerd_fallback_nop.cpp"],
header_libs: ["bionic_libc_platform_headers"],
export_header_lib_headers: ["bionic_libc_platform_headers"],
whole_static_libs: [
"libdebuggerd_handler_core",
],
export_include_dirs: ["include"],
}
// Fallback implementation, for use in the Bionic linker only.
cc_library_static {
name: "libdebuggerd_handler_fallback",
visibility: ["//bionic/linker"],
apex_available: [
"com.android.runtime",
"//apex_available:platform",
],
defaults: ["debuggerd_defaults"],
recovery_available: true,
vendor_ramdisk_available: true,
srcs: [
"handler/debuggerd_fallback.cpp",
],
whole_static_libs: [
"libdebuggerd_handler_core",
"libtombstoned_client_static",
"libasync_safe",
"libbase",
"libdebuggerd",
"libunwindstack_no_dex",
"liblzma",
"libcutils",
],
header_libs: ["bionic_libc_platform_headers"],
export_header_lib_headers: ["bionic_libc_platform_headers"],
export_include_dirs: ["include"],
}
cc_library {
name: "libdebuggerd_client",
defaults: ["debuggerd_defaults"],
srcs: [
"client/debuggerd_client.cpp",
"util.cpp",
],
shared_libs: [
"libbase",
"libcutils",
"libprocinfo",
],
header_libs: [
"libdebuggerd_common_headers",
"bionic_libc_platform_headers",
],
export_header_lib_headers: [
"libdebuggerd_common_headers",
"bionic_libc_platform_headers",
],
export_include_dirs: ["include"],
}
cc_library_static {
name: "libdebuggerd",
defaults: ["debuggerd_defaults"],
recovery_available: true,
vendor_ramdisk_available: true,
srcs: [
"libdebuggerd/backtrace.cpp",
"libdebuggerd/gwp_asan.cpp",
"libdebuggerd/open_files_list.cpp",
"libdebuggerd/tombstone.cpp",
"libdebuggerd/tombstone_proto.cpp",
"libdebuggerd/tombstone_proto_to_text.cpp",
"libdebuggerd/utility.cpp",
],
local_include_dirs: ["libdebuggerd/include"],
export_include_dirs: ["libdebuggerd/include"],
include_dirs: [
// Needed for private/bionic_fdsan.h
"bionic/libc",
],
header_libs: [
"bionic_libc_platform_headers",
"gwp_asan_headers",
"liblog_headers",
],
static_libs: [
"libdexfile_support", // libunwindstack dependency
"libunwindstack",
"liblzma",
"libbase",
"libcutils",
],
runtime_libs: [
"libdexfile", // libdexfile_support dependency
],
whole_static_libs: [
"libasync_safe",
"gwp_asan_crash_handler",
"libtombstone_proto",
"libprocinfo",
"libprotobuf-cpp-lite",
],
target: {
recovery: {
exclude_static_libs: [
"libdexfile_support",
],
exclude_runtime_libs: [
"libdexfile",
],
},
vendor_ramdisk: {
exclude_static_libs: [
"libdexfile_support",
],
exclude_runtime_libs: [
"libdexfile",
],
},
},
product_variables: {
debuggable: {
cflags: ["-DROOT_POSSIBLE"],
},
malloc_not_svelte: {
cflags: ["-DUSE_SCUDO"],
whole_static_libs: ["libscudo"],
srcs: ["libdebuggerd/scudo.cpp"],
header_libs: ["scudo_headers"],
},
},
}
cc_binary {
name: "pbtombstone",
defaults: ["debuggerd_defaults"],
srcs: ["pbtombstone.cpp"],
static_libs: [
"libbase",
"libdebuggerd",
"liblog",
"libprotobuf-cpp-lite",
"libtombstone_proto",
"libunwindstack",
],
}
cc_test_library {
name: "libcrash_test",
defaults: ["debuggerd_defaults"],
srcs: ["crash_test.cpp"],
}
cc_test {
name: "debuggerd_test",
defaults: ["debuggerd_defaults"],
require_root: true,
cflags: ["-Wno-missing-field-initializers"],
srcs: [
"libdebuggerd/test/dump_memory_test.cpp",
"libdebuggerd/test/elf_fake.cpp",
"libdebuggerd/test/log_fake.cpp",
"libdebuggerd/test/open_files_list_test.cpp",
"libdebuggerd/test/utility_test.cpp",
],
target: {
android: {
srcs: [
"client/debuggerd_client_test.cpp",
"debuggerd_test.cpp",
],
static_libs: [
"libasync_safe",
"libtombstoned_client_static",
],
},
},
shared_libs: [
"libbase",
"libcutils",
"libdebuggerd_client",
"liblog",
"libnativehelper",
"libunwindstack",
],
static_libs: [
"libdebuggerd",
"libgmock",
"libminijail",
],
header_libs: [
"bionic_libc_platform_headers",
"gwp_asan_headers",
],
local_include_dirs: [
"libdebuggerd",
],
compile_multilib: "both",
multilib: {
lib32: {
stem: "debuggerd_test32",
},
lib64: {
stem: "debuggerd_test64",
},
},
data: [
":libcrash_test",
],
test_suites: ["device-tests"],
}
cc_benchmark {
name: "debuggerd_benchmark",
defaults: ["debuggerd_defaults"],
srcs: ["debuggerd_benchmark.cpp"],
shared_libs: [
"libbase",
"libdebuggerd_client",
],
}
cc_binary {
name: "crash_dump",
srcs: [
"crash_dump.cpp",
"util.cpp",
],
defaults: ["debuggerd_defaults"],
compile_multilib: "both",
multilib: {
lib32: {
suffix: "32",
},
lib64: {
suffix: "64",
},
},
header_libs: [
"bionic_libc_platform_headers",
],
static_libs: [
"libtombstoned_client_static",
"libdebuggerd",
"libcutils",
"libtombstone_proto",
"libprotobuf-cpp-lite",
],
shared_libs: [
"libbase",
"liblog",
"libprocinfo",
"libunwindstack",
],
apex_available: [
"com.android.runtime",
],
// Required for tests.
required: ["crash_dump.policy"],
}
cc_binary {
name: "debuggerd",
srcs: [
"debuggerd.cpp",
],
defaults: ["debuggerd_defaults"],
shared_libs: [
"libbase",
"libdebuggerd_client",
"liblog",
"libprocinfo",
],
local_include_dirs: ["include"],
}
cc_defaults {
name: "tombstoned_defaults",
srcs: [
"util.cpp",
"tombstoned/intercept_manager.cpp",
"tombstoned/tombstoned.cpp",
],
defaults: ["debuggerd_defaults"],
header_libs: [
"bionic_libc_platform_headers",
"libdebuggerd_common_headers"
],
static_libs: [
"libbase",
"libcutils",
"libevent",
"liblog",
],
}
cc_binary {
name: "tombstoned",
defaults: ["tombstoned_defaults"],
init_rc: ["tombstoned/tombstoned.rc"],
}
cc_binary {
name: "tombstoned.microdroid",
defaults: ["tombstoned_defaults"],
init_rc: ["tombstoned/tombstoned.microdroid.rc"],
}
prebuilt_etc {
name: "crash_dump.policy",
sub_dir: "seccomp_policy",
filename_from_src: true,
arch: {
arm: {
src: "seccomp_policy/crash_dump.arm.policy",
required: [
"crash_dump.policy_other",
],
},
arm64: {
src: "seccomp_policy/crash_dump.arm64.policy",
required: [
"crash_dump.policy_other",
],
},
riscv64: {
src: "seccomp_policy/crash_dump.riscv64.policy",
},
x86: {
src: "seccomp_policy/crash_dump.x86.policy",
required: [
"crash_dump.policy_other",
],
},
x86_64: {
src: "seccomp_policy/crash_dump.x86_64.policy",
required: [
"crash_dump.policy_other",
],
},
},
}
// This installs the "other" architecture (so 32-bit on 64-bit device).
prebuilt_etc {
name: "crash_dump.policy_other",
sub_dir: "seccomp_policy",
filename_from_src: true,
arch: {
arm: {
src: "seccomp_policy/crash_dump.arm64.policy",
},
arm64: {
src: "seccomp_policy/crash_dump.arm.policy",
},
x86: {
src: "seccomp_policy/crash_dump.x86_64.policy",
},
x86_64: {
src: "seccomp_policy/crash_dump.x86.policy",
},
},
}