| cc_defaults { | 
 |     name: "debuggerd_defaults", | 
 |     cflags: [ | 
 |         "-Wall", | 
 |         "-Wextra", | 
 |         "-Werror", | 
 |         "-Wno-unused-argument", | 
 |         "-Wno-unused-function", | 
 |         "-Wno-nullability-completeness", | 
 |         "-Os", | 
 |     ], | 
 |  | 
 |     local_include_dirs: ["include"], | 
 | } | 
 |  | 
 | cc_library_headers { | 
 |     name: "libdebuggerd_common_headers", | 
 |     export_include_dirs: ["common/include"], | 
 |     recovery_available: true, | 
 | } | 
 |  | 
 | 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", | 
 |     ], | 
 |  | 
 |     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, | 
 |     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, | 
 |     srcs: ["handler/debuggerd_handler.cpp"], | 
 |  | 
 |     header_libs: [ | 
 |         "libbase_headers", | 
 |         "libdebuggerd_common_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"], | 
 |  | 
 |     whole_static_libs: [ | 
 |         "libdebuggerd_handler_core", | 
 |     ], | 
 |  | 
 |     export_include_dirs: ["include"], | 
 | } | 
 |  | 
 | // Fallback implementation. | 
 | cc_library_static { | 
 |     name: "libdebuggerd_handler_fallback", | 
 |     defaults: ["debuggerd_defaults"], | 
 |     recovery_available: true, | 
 |     srcs: [ | 
 |         "handler/debuggerd_fallback.cpp", | 
 |     ], | 
 |  | 
 |     whole_static_libs: [ | 
 |         "libdebuggerd_handler_core", | 
 |         "libtombstoned_client_static", | 
 |         "libasync_safe", | 
 |         "libbase", | 
 |         "libdebuggerd", | 
 |         "libunwindstack", | 
 |         "libdexfile_support_static",  // libunwindstack dependency | 
 |         "liblzma", | 
 |         "libcutils", | 
 |     ], | 
 |     target: { | 
 |         recovery: { | 
 |             exclude_static_libs: [ | 
 |                 "libdexfile_support_static", | 
 |             ], | 
 |         }, | 
 |     }, | 
 |  | 
 |     export_include_dirs: ["include"], | 
 | } | 
 |  | 
 | cc_library { | 
 |     name: "libdebuggerd_client", | 
 |     defaults: ["debuggerd_defaults"], | 
 |     srcs: [ | 
 |         "client/debuggerd_client.cpp", | 
 |         "util.cpp", | 
 |     ], | 
 |  | 
 |     header_libs: ["libdebuggerd_common_headers"], | 
 |  | 
 |     shared_libs: [ | 
 |         "libbase", | 
 |         "libcutils", | 
 |         "libprocinfo", | 
 |     ], | 
 |  | 
 |     export_header_lib_headers: ["libdebuggerd_common_headers"], | 
 |     export_include_dirs: ["include"], | 
 | } | 
 |  | 
 | cc_library_static { | 
 |     name: "libdebuggerd", | 
 |     defaults: ["debuggerd_defaults"], | 
 |     recovery_available: true, | 
 |  | 
 |     srcs: [ | 
 |         "libdebuggerd/backtrace.cpp", | 
 |         "libdebuggerd/open_files_list.cpp", | 
 |         "libdebuggerd/tombstone.cpp", | 
 |         "libdebuggerd/utility.cpp", | 
 |     ], | 
 |  | 
 |     local_include_dirs: ["libdebuggerd/include"], | 
 |     export_include_dirs: ["libdebuggerd/include"], | 
 |  | 
 |     // Needed for private/bionic_fdsan.h | 
 |     include_dirs: ["bionic/libc"], | 
 |  | 
 |     static_libs: [ | 
 |         "libdexfile_support_static",  // libunwindstack dependency | 
 |         "libunwindstack", | 
 |         "liblzma", | 
 |         "libbase", | 
 |         "libcutils", | 
 |         "liblog", | 
 |     ], | 
 |     target: { | 
 |         recovery: { | 
 |             exclude_static_libs: [ | 
 |                 "libdexfile_support_static", | 
 |             ], | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | cc_test { | 
 |     name: "debuggerd_test", | 
 |     defaults: ["debuggerd_defaults"], | 
 |  | 
 |     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/tombstone_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", | 
 |         "libminijail", | 
 |         "libnativehelper", | 
 |         "libunwindstack", | 
 |     ], | 
 |  | 
 |     static_libs: [ | 
 |         "libdebuggerd", | 
 |     ], | 
 |  | 
 |     local_include_dirs: [ | 
 |         "libdebuggerd", | 
 |     ], | 
 |  | 
 |     compile_multilib: "both", | 
 |     multilib: { | 
 |         lib32: { | 
 |             stem: "debuggerd_test32", | 
 |         }, | 
 |         lib64: { | 
 |             stem: "debuggerd_test64", | 
 |         }, | 
 |     }, | 
 |  | 
 |     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", | 
 |         }, | 
 |     }, | 
 |  | 
 |     static_libs: [ | 
 |         "libtombstoned_client_static", | 
 |         "libdebuggerd", | 
 |         "libcutils", | 
 |     ], | 
 |  | 
 |     shared_libs: [ | 
 |         "libbase", | 
 |         "liblog", | 
 |         "libprocinfo", | 
 |         "libunwindstack", | 
 |     ], | 
 | } | 
 |  | 
 | cc_binary { | 
 |     name: "debuggerd", | 
 |     srcs: [ | 
 |         "debuggerd.cpp", | 
 |     ], | 
 |     defaults: ["debuggerd_defaults"], | 
 |  | 
 |     shared_libs: [ | 
 |         "libbase", | 
 |         "libdebuggerd_client", | 
 |         "liblog", | 
 |         "libprocinfo", | 
 |     ], | 
 |  | 
 |     local_include_dirs: ["include"], | 
 | } | 
 |  | 
 | cc_binary { | 
 |     name: "tombstoned", | 
 |     srcs: [ | 
 |         "util.cpp", | 
 |         "tombstoned/intercept_manager.cpp", | 
 |         "tombstoned/tombstoned.cpp", | 
 |     ], | 
 |     defaults: ["debuggerd_defaults"], | 
 |  | 
 |     header_libs: ["libdebuggerd_common_headers"], | 
 |  | 
 |     static_libs: [ | 
 |         "libbase", | 
 |         "libcutils", | 
 |         "libevent", | 
 |         "liblog", | 
 |     ], | 
 |  | 
 |     init_rc: ["tombstoned/tombstoned.rc"], | 
 | } | 
 |  | 
 | subdirs = [ | 
 |     "crasher", | 
 | ] |