// Android Runtime APEX module. // Modules listed in LOCAL_REQUIRED_MODULES for module art-runtime in art/Android.mk. // - Base requirements (binaries for which both 32- and 64-bit versions are built, if relevant). art_runtime_base_binaries_both = [ "dalvikvm", ] // - Base requirements (binaries for which a 32-bit version is preferred). art_runtime_base_binaries_prefer32 = [ "dex2oat", "dexoptanalyzer", "profman", ] // - Base requirements (libraries). // // Note: ART on-device chroot-based testing and benchmarking is not yet using // the Runtime APEX, meaning that copies of some of these libraries have to be // installed in `/system` for the ART Buildbot set-up to work properly. This is // done by the `standalone-apex-files` Make phony target, used by the ART // Buildbot and Golem (see `art/Android.mk`). If you add libraries to this list, // you may have to also add them to `PRIVATE_RUNTIME_DEPENDENCY_LIBS` in // `art/Android.mk`. // TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use // the Runtime APEX. art_runtime_base_native_shared_libs = [ // External API (having APEX stubs). "libdexfile_external", "libnativebridge", "libnativehelper", "libnativeloader", // libadbconnection is internal and loaded with dlopen(), but it cannot use // "required" because of cyclic dependency (b/124505714). "libadbconnection", // TODO(b/124476339): Clean up the following libraries once "required" // dependencies work with APEX libraries. "libart", "libart-compiler", "libdt_fd_forward", "libdt_socket", "libjdwp", "libnpt", "libopenjdkjvm", "libopenjdkjvmti", ] bionic_native_shared_libs = [ // External API (having APEX stubs). "libc", "libm", "libdl", ] bionic_native_shared_libs_device = [ // ... and their internal dependencies // These are available only on device "libc_malloc_debug", "libc_malloc_hooks", ] bionic_binaries_both = [ "linker", ] // - Debug variants (binaries for which a 32-bit version is preferred). art_runtime_debug_binaries_prefer32 = [ "dexoptanalyzerd", "profmand", ] art_runtime_debug_binaries_prefer32_device = [ "dex2oatd", ] art_runtime_debug_binaries_both_host = [ "dex2oatd", ] // - Debug variants (libraries). art_runtime_debug_native_shared_libs = [ "libadbconnectiond", "libartd", "libartd-compiler", "libopenjdkjvmd", "libopenjdkjvmtid", ] // Data files associated with bionic / managed core library APIs. art_runtime_data_file_prebuilts = [ "apex_tz_version", "apex_tzdata", "apex_tzlookup.xml", "apex_icu.dat", ] // Tools common to both device APEX and host APEX. Derived from art-tools in art/Android.mk. art_tools_common_binaries = [ "dexdump", "dexlist", ] // Tools common to both device and host debug APEXes. art_tools_debug_binaries = [ "dexdiag", ] // Tools exclusively for the device APEX derived from art-tools in art/Android.mk. art_tools_device_only_binaries = [ // oatdump cannot link with host linux_bionic due to not using clang lld; // TODO: Make it work with clang lld. "oatdump", ] // Same, but for only for debug packages. art_tools_debug_device_only_binaries = [ // oatdumpd cannot link with host linux_bionic due to not using clang lld; // TODO: Make it work with clang lld. "oatdumpd", ] // Tools exclusively for the host APEX derived from art-tools in art/Android.mk. art_tools_host_only_binaries = [ // FIXME: Does not work as-is, because `ahat` is defined in tools/ahat/Android.mk // (same issue as for `libart_fake` above). //"ahat", "hprof-conv", ] // Libraries needed to use com.android.runtime.host for zipapex run-tests art_runtime_host_run_test_libs = [ "libartd-disassembler" ] // Core Java libraries. libcore_java_libs = [ "core-oj", "core-libart", "okhttp", "bouncycastle", "apache-xml", ] // Native libraries that support the core Java libraries. // // Note: ART on-device chroot-based testing and benchmarking is not yet using // the Runtime APEX, meaning that copies of some of these libraries have to be // installed in `/system` for the ART Buildbot set-up to work properly. This is // done by the `standalone-apex-files` Make phony target, used by the ART // Buildbot and Golem (see `art/Android.mk`). If you add libraries to this list, // you may have to also add them to `PRIVATE_RUNTIME_DEPENDENCY_LIBS` in // `art/Android.mk`. // TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use // the Runtime APEX. libcore_native_shared_libs = [ // External API (having APEX stubs). "libandroidicu", "libandroidio", // TODO(b/124476339): Clean up the following libraries once "required" // dependencies work with APEX libraries. "libexpat", "libicui18n", "libicuuc", "libjavacore", "libopenjdk", ] libcore_debug_native_shared_libs = [ "libopenjdkd", ] libcore_native_device_only_shared_libs = [ // TODO(b/122876336): Remove libpac.so once it's migrated to Webview. // libpac is used by frameworks, not by ART host. "libpac", ] // Temporary library includes for b/123591866 as all libraries are moved into the main art-apex. art_runtime_libraries_zipapex = [ "libnativebridge", "libnativeloader", "libnativehelper", "libcutils", ] apex_key { name: "com.android.runtime.key", public_key: "com.android.runtime.avbpubkey", private_key: "com.android.runtime.pem", } android_app_certificate { name: "com.android.runtime.debug.certificate", certificate: "com.android.runtime.debug", } android_app_certificate { name: "com.android.runtime.release.certificate", certificate: "com.android.runtime.release", } prebuilt_etc { name: "com.android.runtime.ld.config.txt", src: "ld.config.txt", filename: "ld.config.txt", installable: false, } apex_defaults { name: "com.android.runtime-defaults", compile_multilib: "both", manifest: "manifest.json", java_libs: libcore_java_libs, native_shared_libs: art_runtime_base_native_shared_libs + bionic_native_shared_libs + libcore_native_device_only_shared_libs + libcore_native_shared_libs, multilib: { both: { binaries: art_runtime_base_binaries_both + bionic_binaries_both, }, prefer32: { binaries: art_runtime_base_binaries_prefer32, }, first: { binaries: art_tools_common_binaries + art_tools_device_only_binaries, } }, binaries: [ "art_postinstall_hook", "art_preinstall_hook", "art_preinstall_hook_boot", "art_preinstall_hook_system_server", "art_prepostinstall_utils", ], prebuilts: art_runtime_data_file_prebuilts + ["com.android.runtime.ld.config.txt"], key: "com.android.runtime.key", required: ["art_apex_boot_integrity"], } // Release version of the Runtime APEX module (not containing debug // variants nor tools), included in user builds. Also used for // storage-constrained devices in userdebug and eng builds. apex { name: "com.android.runtime.release", defaults: ["com.android.runtime-defaults"], native_shared_libs: bionic_native_shared_libs_device, certificate: ":com.android.runtime.release.certificate", } // "Debug" version of the Runtime APEX module (containing both release and // debug variants, as well as additional tools), included in userdebug and // eng build. apex { name: "com.android.runtime.debug", defaults: ["com.android.runtime-defaults"], native_shared_libs: art_runtime_debug_native_shared_libs + libcore_debug_native_shared_libs + bionic_native_shared_libs_device, multilib: { prefer32: { binaries: art_runtime_debug_binaries_prefer32 + art_runtime_debug_binaries_prefer32_device, }, first: { binaries: art_tools_debug_binaries + art_tools_debug_device_only_binaries, } }, certificate: ":com.android.runtime.debug.certificate", } // TODO: Do this better. art_apex will disable host builds when // HOST_PREFER_32_BIT is set. We cannot simply use com.android.runtime.debug // because binaries have different multilib classes and 'multilib: {}' isn't // supported by target: { ... }. // See b/120617876 for more information. art_apex_test { name: "com.android.runtime.host", compile_multilib: "both", payload_type: "zip", host_supported: true, device_supported: false, manifest: "manifest.json", java_libs: libcore_java_libs, ignore_system_library_special_case: true, native_shared_libs: art_runtime_base_native_shared_libs + art_runtime_debug_native_shared_libs + libcore_native_shared_libs + libcore_debug_native_shared_libs + art_runtime_libraries_zipapex + art_runtime_host_run_test_libs, multilib: { both: { binaries: art_runtime_base_binaries_both + art_runtime_debug_binaries_both_host, }, first: { binaries: art_tools_common_binaries + art_tools_debug_binaries // Host APEX is always debug. + art_tools_host_only_binaries + art_runtime_base_binaries_prefer32 + art_runtime_debug_binaries_prefer32, } }, key: "com.android.runtime.key", target: { darwin: { enabled: false, }, linux_bionic: { enabled: true, multilib: { both: { native_shared_libs: bionic_native_shared_libs, binaries: bionic_binaries_both, } } }, }, } python_binary_host { name: "art-apex-tester", srcs: ["art_apex_test.py"], main: "art_apex_test.py", version: { py2: { enabled: false, }, py3: { enabled: true, }, }, } // Genrules so we can run the checker, and empty Java library so that it gets executed. genrule { name: "art-check-release-apex-gen", srcs: [":com.android.runtime.release"], tools: [ "art-apex-tester", "debugfs", ], cmd: "$(location art-apex-tester)" + " --debugfs $(location debugfs)" + " --tmpdir $(genDir)" + " $(in)" + " && touch $(out)", out: ["art-check-release-apex-gen.dummy"], } cc_prebuilt_binary { name: "art-check-release-apex-gen-fakebin", srcs: [":art-check-release-apex-gen"], host_supported: true, device_supported: false, target: { darwin: { enabled: false, // No python3. }, }, } genrule { name: "art-check-debug-apex-gen", srcs: [":com.android.runtime.debug"], tools: [ "art-apex-tester", "debugfs", ], cmd: "$(location art-apex-tester)" + " --debugfs $(location debugfs)" + " --tmpdir $(genDir)" + " --debug" + " $(in)" + " && touch $(out)", out: ["art-check-debug-apex-gen.dummy"], } cc_prebuilt_binary { name: "art-check-debug-apex-gen-fakebin", srcs: [":art-check-debug-apex-gen"], host_supported: true, device_supported: false, target: { darwin: { enabled: false, // No python3. }, }, } // Pre-install scripts. sh_binary { name: "art_preinstall_hook", src: "art_preinstall_hook.sh", } sh_binary { name: "art_preinstall_hook_boot", src: "art_preinstall_hook_boot.sh", } sh_binary { name: "art_preinstall_hook_system_server", src: "art_preinstall_hook_system_server.sh", } sh_binary { name: "art_prepostinstall_utils", src: "art_prepostinstall_utils.sh", } sh_binary { name: "art_postinstall_hook", src: "art_postinstall_hook.sh", } sh_binary { name: "art_apex_boot_integrity", src: "art_apex_boot_integrity.sh", init_rc: ["art_apex_boot_integrity.rc"], }