| 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", | 
 |     ], | 
 |  | 
 |     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", | 
 |         }, | 
 |     }, | 
 | } |