| // ART APEX module |
| // |
| // Contains both the Android Managed Runtime (ART) and the Android Core Library |
| // (Libcore). |
| |
| package { |
| // See: http://go/android-license-faq |
| // A large-scale-change added 'default_applicable_licenses' to import |
| // all of the 'license_kinds' from "art_license" |
| // to get the below license kinds: |
| // SPDX-license-identifier-Apache-2.0 |
| default_applicable_licenses: ["art_license"], |
| } |
| |
| soong_config_module_type_import { |
| from: "art/build/SoongConfig.bp", |
| module_types: [ |
| "art_module_apex_defaults", |
| "art_module_cc_defaults", |
| ], |
| } |
| |
| // 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 possible). |
| art_runtime_base_binaries_both = [ |
| "dalvikvm", |
| ] |
| art_runtime_base_binaries_both_on_device_first_on_host = [ |
| "dex2oat", |
| ] |
| // - Base requirements (binaries for which the "first" version is preferred on device |
| // (likely 64-bit) and on host). |
| art_runtime_base_binaries_first_on_device_first_on_host = [ |
| "dexoptanalyzer", |
| "profman", |
| ] |
| |
| // - Base requirements (libraries). |
| // |
| // Note: ART on-device chroot-based testing and benchmarking is not yet using |
| // the ART 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_ART_APEX_DEPENDENCY_LIBS` in |
| // `art/Android.mk`. |
| // TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use |
| // the ART APEX. |
| art_runtime_base_native_shared_libs_minus_libart = [ |
| // External API (having APEX stubs). |
| "libdexfile", |
| "libnativebridge", |
| "libnativehelper", |
| "libnativeloader", |
| "libsigchain", |
| // 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-compiler", |
| "libdt_fd_forward", |
| "libdt_socket", |
| "libjdwp", |
| "libnpt", |
| "libopenjdkjvm", |
| "libopenjdkjvmti", |
| // TODO(chriswailes): Make libarttools a dependency for another target |
| // when such a target exists |
| "libarttools", |
| ] |
| // Actual version of ART runtime base libs, used in non-test ART APEXes. |
| art_runtime_base_native_shared_libs = ["libart"] + |
| art_runtime_base_native_shared_libs_minus_libart |
| // "Broken" version of ART runtime base libs, used for testing purposes. |
| art_runtime_base_broken_native_shared_libs = ["libart-broken"] + |
| art_runtime_base_native_shared_libs_minus_libart |
| |
| art_runtime_base_native_device_only_shared_libs = [ |
| "libperfetto_hprof", |
| ] |
| |
| bionic_native_shared_libs = [ |
| // External API (having APEX stubs). |
| "libc", |
| "libm", |
| "libdl", |
| ] |
| |
| bionic_binaries_both = [ |
| "linker", |
| // To validate the zip file generated by cloud server. |
| "ziptool", |
| ] |
| |
| // - Debug variants (binaries for which the "first" version is preferred on device |
| // (likely 64-bit) and on host). |
| art_runtime_debug_binaries_first_on_device_first_on_host = [ |
| "dexoptanalyzerd", |
| "profmand", |
| ] |
| art_runtime_debug_binaries_both_on_device_first_on_host = [ |
| "dex2oatd", |
| ] |
| |
| // - Debug variants (libraries). |
| art_runtime_debug_native_shared_libs = [ |
| "libadbconnectiond", |
| "libartd", |
| "libartd-compiler", |
| "libdexfiled", |
| "libopenjdkjvmd", |
| "libopenjdkjvmtid", |
| ] |
| |
| art_runtime_base_native_device_only_debug_shared_libs = [ |
| "libperfetto_hprofd", |
| ] |
| |
| // Libraries needed to execute ART run-tests. |
| // TODO(b/124476339): When bug 124476339 is fixed, add these libraries as `runtime_libs` |
| // dependencies of `libartd-compiler`, and remove `art_runtime_run_test_libs`. |
| art_runtime_run_test_libs = [ |
| "libart-disassembler", |
| "libartd-disassembler", |
| ] |
| |
| // 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 = [ |
| "dexanalyze", |
| "dexdiag", |
| "dexlayout", |
| "dexlayoutd", |
| ] |
| |
| art_tools_debug_binaries_both = [ |
| "imgdiag", |
| "imgdiagd", |
| ] |
| |
| // 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", |
| ] |
| |
| // Core Java libraries. |
| // This list must be the same as art-bootclasspath-fragment because it's that which is pulled in |
| // through bootclasspath_fragments below. (com.android.art-device-defaults-minus-odrefresh) |
| libcore_java_libs = [ |
| "core-oj", |
| "core-libart", |
| "okhttp", |
| "bouncycastle", |
| "apache-xml", |
| ] |
| |
| // Create combined library which is used for compiling run-tests. |
| // This is much easier than trying to make the test depend on them directly, |
| // or than trying to make the test compilation depend on the apex module. |
| // Some of the components are only visible here (but not in test Android.bp). |
| java_library { |
| name: "art-run-test-bootclasspath", |
| sdk_version: "core_platform", |
| static_libs: libcore_java_libs + [ |
| "framework-annotations-lib", |
| ], |
| } |
| |
| // Native libraries that support the core Java libraries. |
| // |
| // Note: ART on-device chroot-based testing and benchmarking is not yet using |
| // the ART 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_ART_APEX_DEPENDENCY_LIBS` in |
| // `art/Android.mk`. |
| // TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use |
| // the ART APEX. |
| libcore_native_shared_libs = [ |
| // External API (having APEX stubs). |
| "libandroidio", |
| // TODO(b/124476339): Clean up the following libraries once "required" |
| // dependencies work with APEX libraries. |
| "libexpat", |
| "libjavacore", |
| "libopenjdk", |
| ] |
| libcore_debug_native_shared_libs = [ |
| "libopenjdkd", |
| ] |
| |
| // Temporary library includes for b/123591866 as all libraries are moved into the main art-apex. |
| art_runtime_libraries_zipapex = [ |
| "libnativebridge", |
| "libnativeloader", |
| "libnativehelper", |
| "libcutils", |
| ] |
| |
| android_app_certificate { |
| name: "com.android.art.certificate", |
| certificate: "com.android.art", |
| } |
| |
| apex_key { |
| name: "com.android.art.key", |
| public_key: "com.android.art.avbpubkey", |
| private_key: "com.android.art.pem", |
| } |
| |
| art_module_apex_defaults { |
| name: "com.android.art-defaults", |
| |
| // Enable if ART_MODULE_BUILD_FROM_SOURCE is true |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| |
| target: { |
| windows: { |
| // When the Soong config variable above sets enabled:true, it |
| // overrides the default false for targets, so we need to disable |
| // windows explicitly. |
| enabled: false, |
| }, |
| }, |
| } |
| |
| prebuilt_etc { |
| name: "com.android.art.init.rc", |
| src: "art.rc", |
| filename: "init.rc", |
| installable: false, |
| } |
| |
| // Default values shared by device ART APEXes. |
| apex_defaults { |
| name: "com.android.art-device-defaults-minus-odrefresh", |
| defaults: [ |
| "com.android.art-defaults", |
| "s-launched-apex-module", |
| ], |
| compile_multilib: "both", |
| manifest: "manifest-art.json", |
| bootclasspath_fragments: ["art-bootclasspath-fragment"], |
| systemserverclasspath_fragments: ["art-systemserverclasspath-fragment"], |
| compat_configs: ["libcore-platform-compat-config"], |
| native_shared_libs: art_runtime_base_native_shared_libs + |
| art_runtime_base_native_device_only_shared_libs + |
| libcore_native_shared_libs, |
| jni_libs: [ |
| "libartservice", |
| ], |
| binaries: [ |
| "art_boot", |
| "art_exec", |
| "artd", |
| ], |
| multilib: { |
| both: { |
| binaries: art_runtime_base_binaries_both + |
| art_runtime_base_binaries_both_on_device_first_on_host, |
| }, |
| first: { |
| binaries: art_runtime_base_binaries_first_on_device_first_on_host + |
| art_tools_common_binaries + |
| art_tools_device_only_binaries, |
| }, |
| }, |
| key: "com.android.art.key", |
| required: [ |
| "com.android.i18n", |
| ], |
| prebuilts: [ |
| "art-linker-config", |
| "com.android.art.init.rc", |
| "current_sdkinfo", |
| ], |
| // ART APEXes depend on bouncycastle which is disabled for PDK builds. |
| // Since the dependency is disabled, ART APEXes can't be built either. |
| // Disable the APEXes too. See b/157267166. |
| product_variables: { |
| pdk: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| apex_defaults { |
| name: "com.android.art-device-defaults", |
| defaults: ["com.android.art-device-defaults-minus-odrefresh"], |
| multilib: { |
| first: { |
| binaries: ["odrefresh"], |
| }, |
| }, |
| } |
| |
| // Default values shared by (device) Debug and Testing ART APEXes. |
| apex_defaults { |
| name: "com.android.art-devel-defaults", |
| defaults: ["com.android.art-device-defaults"], |
| native_shared_libs: art_runtime_base_native_device_only_debug_shared_libs + |
| art_runtime_run_test_libs + |
| art_runtime_debug_native_shared_libs + |
| libcore_debug_native_shared_libs, |
| jni_libs: [ |
| "libartserviced", |
| ], |
| multilib: { |
| both: { |
| binaries: art_tools_debug_binaries_both + |
| art_runtime_debug_binaries_both_on_device_first_on_host, |
| }, |
| first: { |
| binaries: art_runtime_debug_binaries_first_on_device_first_on_host + |
| art_tools_debug_binaries + |
| art_tools_debug_device_only_binaries, |
| }, |
| }, |
| } |
| |
| // "Broken" test APEX, only used for testing, including module |
| // `libart-broken` instead of `libart`. |
| apex_test { |
| name: "test_broken_com.android.art", |
| // Use of "s-launched-apex-module" does not imply that this is a released |
| // module. |
| defaults: [ |
| "com.android.art-defaults", |
| "s-launched-apex-module", |
| ], |
| |
| // Only include native libraries in this test APEX. Don't include |
| // binaries (and maybe other artifacts) for now, as they pull |
| // the "non-broken" `libart` module into this test APEX and |
| // overwrite `libart-broken`. Maybe consider creating "broken" |
| // variants of binaries (and other artifacts)? |
| native_shared_libs: art_runtime_base_broken_native_shared_libs, |
| compile_multilib: "both", |
| |
| key: "com.android.art.key", |
| manifest: "test_apex_manifest.json", |
| file_contexts: ":com.android.art-file_contexts", |
| certificate: ":com.android.art.certificate", |
| installable: false, |
| compressible: false, |
| } |
| |
| apex_test { |
| name: "test_jitzygote_com.android.art", |
| defaults: ["com.android.art-device-defaults-minus-odrefresh"], |
| multilib: { |
| first: { |
| binaries: ["odrefresh_broken"], |
| }, |
| }, |
| key: "com.android.art.key", |
| manifest: "test_apex_manifest.json", |
| file_contexts: ":com.android.art-file_contexts", |
| certificate: ":com.android.art.certificate", |
| installable: false, |
| } |
| |
| // Release version of the ART 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.art", |
| defaults: ["com.android.art-device-defaults"], |
| certificate: ":com.android.art.certificate", |
| } |
| |
| // "Debug" version of the ART APEX module (containing both release and |
| // debug variants, as well as additional tools), included in userdebug and |
| // eng build. |
| apex { |
| name: "com.android.art.debug", |
| defaults: ["com.android.art-devel-defaults"], |
| certificate: ":com.android.art.certificate", |
| } |
| |
| // ART gtests with dependencies on internal ART APEX libraries. |
| art_gtests = [ |
| "art_artd_tests", |
| "art_cmdline_tests", |
| "art_compiler_tests", |
| "art_dex2oat_tests", |
| "art_dexanalyze_tests", |
| "art_dexdiag_tests", |
| "art_dexdump_tests", |
| "art_dexlayout_tests", |
| "art_dexlist_tests", |
| "art_disassembler_tests", |
| "art_dexoptanalyzer_tests", |
| "art_imgdiag_tests", |
| "art_libartbase_tests", |
| "art_libartpalette_tests", |
| "art_libartservice_tests", |
| "art_libarttools_tests", |
| "art_libdexfile_tests", |
| "art_libdexfile_support_tests", |
| "art_libprofile_tests", |
| "art_oatdump_tests", |
| "art_odrefresh_tests", |
| "art_profman_tests", |
| "art_runtime_tests", |
| "art_sigchain_tests", |
| ] |
| |
| // "Testing" version of the ART APEX module (containing both release |
| // and debug variants, additional tools, and ART gtests), for testing |
| // purposes only. |
| apex_test { |
| name: "com.android.art.testing", |
| defaults: ["com.android.art-devel-defaults"], |
| file_contexts: ":com.android.art.debug-file_contexts", |
| certificate: ":com.android.art.certificate", |
| tests: art_gtests, |
| binaries: ["signal_dumper"], // Need signal_dumper for run-tests. |
| // Mark this test APEX as non-updatable, as its contains |
| // additional files (used only for testing) that would not pass |
| // dependency checks performed on updatable APEXes (see |
| // go/apex-allowed-deps-error). |
| updatable: false, |
| // Because this APEX is non-updatable, some of its native shared |
| // libraries (implicitly added as dependencies) are eligible to |
| // the symlink optimization. As we want this APEX to be |
| // self-contained (for testing purposes), we want to package |
| // these dependencies in this APEX, instead of symbolic links to |
| // their counterparts on the `system` partition, which may not |
| // even exist, as in the case of `libbacktrace` (see b/232790938 |
| // and b/233357459). Marking this APEX as "future updatable" |
| // disables all symlink optimizations for it. |
| future_updatable: true, |
| } |
| |
| // TODO: Do this better. art_apex_test_host will disable host builds when |
| // HOST_PREFER_32_BIT is set. We cannot simply use com.android.art.debug |
| // because binaries have different multilib classes and 'multilib: {}' isn't |
| // supported by target: { ... }. |
| // See b/120617876 for more information. |
| art_apex_test_host { |
| name: "com.android.art.host", |
| defaults: ["com.android.art-defaults"], |
| compile_multilib: "both", |
| payload_type: "zip", |
| host_supported: true, |
| device_supported: false, |
| manifest: "manifest-art.json", |
| updatable: false, |
| 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_run_test_libs, |
| multilib: { |
| both: { |
| binaries: art_runtime_base_binaries_both + |
| art_tools_debug_binaries_both, |
| }, |
| first: { |
| binaries: art_runtime_base_binaries_both_on_device_first_on_host + |
| art_runtime_base_binaries_first_on_device_first_on_host + |
| art_runtime_debug_binaries_first_on_device_first_on_host + |
| art_runtime_debug_binaries_both_on_device_first_on_host + |
| art_tools_common_binaries + |
| art_tools_debug_binaries + // Host APEX is always debug. |
| art_tools_host_only_binaries, |
| }, |
| }, |
| key: "com.android.art.key", |
| target: { |
| darwin: { |
| enabled: false, |
| }, |
| linux_bionic: { |
| multilib: { |
| both: { |
| native_shared_libs: bionic_native_shared_libs, |
| binaries: bionic_binaries_both, |
| }, |
| }, |
| }, |
| }, |
| // ART APEXes depend on bouncycastle which is disabled for PDK builds. |
| // Since the dependency is disabled, ART APEXes can't be built either. |
| // Disable the APEXes too. See b/157267166. |
| product_variables: { |
| pdk: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| python_binary_host { |
| name: "art-apex-tester", |
| srcs: ["art_apex_test.py"], |
| main: "art_apex_test.py", |
| } |
| |
| // Genrules so we can run the checker, and empty Java library so that it gets executed. |
| |
| art_check_apex_gen_stem = "$(location art-apex-tester)" + |
| " --deapexer $(location deapexer)" + |
| " --debugfs $(location debugfs_static)" + |
| " --fsckerofs $(location fsck.erofs)" + |
| " --blkid $(location blkid_static)" + |
| " --tmpdir $(genDir)" |
| |
| // The non-flattened APEXes are always checked, as they are always generated |
| // (even when APEX flattening is enabled). |
| genrule_defaults { |
| name: "art-check-apex-gen-defaults", |
| defaults: ["art_module_source_build_genrule_defaults"], |
| tools: [ |
| "art-apex-tester", |
| "blkid_static", |
| "deapexer", |
| "debugfs_static", |
| "fsck.erofs", |
| ], |
| } |
| |
| art_module_cc_defaults { |
| name: "art-check-apex-gen-fakebin-defaults", |
| host_supported: true, |
| device_supported: false, |
| |
| // Enable if ART_MODULE_BUILD_FROM_SOURCE is true |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| |
| target: { |
| darwin: { |
| enabled: false, // No python3. |
| }, |
| }, |
| } |
| |
| genrule { |
| name: "art-check-release-apex-gen", |
| defaults: ["art-check-apex-gen-defaults"], |
| srcs: [":com.android.art"], |
| cmd: art_check_apex_gen_stem + |
| " --flavor release" + |
| " $(in)" + |
| " && touch $(out)" + |
| " && chmod a+x $(out)", |
| out: ["art-check-release-apex-gen.unused"], |
| } |
| |
| cc_prebuilt_binary { |
| name: "art-check-release-apex-gen-fakebin", |
| defaults: ["art-check-apex-gen-fakebin-defaults"], |
| srcs: [":art-check-release-apex-gen"], |
| } |
| |
| genrule { |
| name: "art-check-debug-apex-gen", |
| defaults: ["art-check-apex-gen-defaults"], |
| srcs: [":com.android.art.debug"], |
| cmd: art_check_apex_gen_stem + |
| " --flavor debug" + |
| " $(in)" + |
| " && touch $(out)" + |
| " && chmod a+x $(out)", |
| out: ["art-check-debug-apex-gen.unused"], |
| } |
| |
| cc_prebuilt_binary { |
| name: "art-check-debug-apex-gen-fakebin", |
| defaults: ["art-check-apex-gen-fakebin-defaults"], |
| srcs: [":art-check-debug-apex-gen"], |
| } |
| |
| genrule { |
| name: "art-check-testing-apex-gen", |
| defaults: ["art-check-apex-gen-defaults"], |
| srcs: [":com.android.art.testing"], |
| cmd: art_check_apex_gen_stem + |
| " --flavor testing" + |
| " $(in)" + |
| " && touch $(out)" + |
| " && chmod a+x $(out)", |
| out: ["art-check-testing-apex-gen.unused"], |
| } |
| |
| cc_prebuilt_binary { |
| name: "art-check-testing-apex-gen-fakebin", |
| defaults: ["art-check-apex-gen-fakebin-defaults"], |
| srcs: [":art-check-testing-apex-gen"], |
| } |
| |
| linker_config { |
| name: "art-linker-config", |
| src: "linker.config.json", |
| installable: false, |
| } |
| |
| // sdk module types have 3 (maybe 4 for windows?) variants: linux, android, and common_os. |
| // common_os depends on the linux/android variants and packages their artifacts into a zip file. |
| // We want access to that zip file in art_release_zip, so we need to depend on only the common_os |
| // variant of art-module-host-exports, which is what sdk_genrule does. Since sdk_genrule only has |
| // 1 variant, we can then depend on it from a different type of genrule like regular genrule. |
| sdk_genrule { |
| name: "art-module-host-exports-for-genrule", |
| defaults: ["art_module_source_build_genrule_defaults"], |
| srcs: [":art-module-host-exports"], |
| out: ["art-module-host-exports-current.zip"], |
| cmd: "cp $(in) $(out)", |
| } |
| |
| // A zip containing ART binaries and ART bootclasspath jars. |
| // At the time of writing, this is only for Compiler Explorer (https://godbolt.org). |
| genrule { |
| name: "art_release_zip", |
| defaults: ["art_module_source_build_genrule_defaults"], |
| srcs: [ |
| ":art-module-host-exports-for-genrule", |
| ":com.android.art", |
| ], |
| out: [ |
| "art_release.zip", |
| ], |
| tools: [ |
| "deapexer", |
| "debugfs", |
| "fsck.erofs", |
| "merge_zips", |
| "soong_zip", |
| ], |
| cmd: "$(location deapexer) " + |
| "--debugfs_path $(location debugfs) " + |
| "--fsckerofs_path $(location fsck.erofs) " + |
| "extract $(location :com.android.art) $(genDir)/extracted && " + |
| |
| "$(location soong_zip) -o $(out).tmp -P bootjars -j " + |
| "-f $(genDir)/extracted/javalib/core-oj.jar " + |
| "-f $(genDir)/extracted/javalib/core-libart.jar " + |
| "-f $(genDir)/extracted/javalib/okhttp.jar " + |
| "-f $(genDir)/extracted/javalib/bouncycastle.jar " + |
| "-f $(genDir)/extracted/javalib/apache-xml.jar && " + |
| |
| "$(location merge_zips) $(out) $(out).tmp $(location :art-module-host-exports-for-genrule)", |
| dist: { |
| targets: ["droidcore"], |
| }, |
| } |