| package { | |
| default_applicable_licenses: ["frameworks_base_cmds_app_process_license"], | |
| } | |
| // Added automatically by a large-scale-change | |
| // See: http://go/android-license-faq | |
| license { | |
| name: "frameworks_base_cmds_app_process_license", | |
| visibility: [":__subpackages__"], | |
| license_kinds: [ | |
| "SPDX-license-identifier-Apache-2.0", | |
| ], | |
| license_text: [ | |
| "NOTICE", | |
| ], | |
| } | |
| cc_binary { | |
| name: "app_process", | |
| srcs: ["app_main.cpp"], | |
| multilib: { | |
| lib32: { | |
| suffix: "32", | |
| }, | |
| lib64: { | |
| suffix: "64", | |
| }, | |
| }, | |
| // Symbols exported from the executable in .dynsym interpose symbols in every | |
| // linker namespace, including an app's classloader namespace. Provide this | |
| // version script to prevent unwanted interposition. | |
| // | |
| // By default, the static linker doesn't export most of an executable's symbols, | |
| // but it will export a symbol that appears to override a symbol in a needed DSO. | |
| // This commonly happens with C++ vaguely-linked entities, such as template | |
| // functions or type_info variables. Hence, a version script is needed even for | |
| // an executable. | |
| version_script: "version-script.txt", | |
| shared_libs: [ | |
| "libandroid_runtime", | |
| "libbinder", | |
| "libcutils", | |
| "libdl", | |
| "libhidlbase", | |
| "liblog", | |
| "libnativeloader", | |
| // Even though app_process doesn't call into libsigchain, we need to | |
| // make sure it's in the DT list of app_process, as we want all code | |
| // in app_process and the libraries it loads to find libsigchain | |
| // symbols before libc symbols. | |
| "libsigchain", | |
| "libutils", | |
| // This is a list of libraries that need to be included in order to avoid | |
| // bad apps. This prevents a library from having a mismatch when resolving | |
| // new/delete from an app shared library. | |
| // See b/21032018 for more details. | |
| "libwilhelm", | |
| ], | |
| compile_multilib: "both", | |
| cflags: [ | |
| "-Wall", | |
| "-Werror", | |
| "-Wunused", | |
| "-Wunreachable-code", | |
| ], | |
| // If SANITIZE_LITE is revived this will need: | |
| //product_variables: { | |
| // sanitize_lite: { | |
| // // In SANITIZE_LITE mode, we create the sanitized binary in a separate location (but reuse | |
| // // the same module). Using the same module also works around an issue with make: binaries | |
| // // that depend on sanitized libraries will be relinked, even if they set LOCAL_SANITIZE := never. | |
| // // | |
| // // Also pull in the asanwrapper helper. | |
| // relative_install_path: "asan", | |
| // required: ["asanwrapper"], | |
| // }, | |
| //}, | |
| // Create a symlink from app_process to app_process32 or 64 | |
| // depending on the target configuration. | |
| symlink_preferred_arch: true, | |
| // Enable ASYNC MTE in the zygote, in order to allow apps and the system | |
| // server to use MTE. We use ASYNC because we don't expect the pre-fork | |
| // zygote to have substantial memory corruption bugs (as it's primarily Java | |
| // code), and we don't want to waste memory recording malloc/free stack | |
| // traces (which happens in SYNC mode). | |
| sanitize: { | |
| memtag_heap: true, | |
| }, | |
| } |