// 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"], } // 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: [ "framework-annotations-lib", // Core Java libraries. This list must be the same as // art-bootclasspath-fragment because it's that which is pulled in // through bootclasspath_fragments in com.android-art-base-defaults. "core-oj", "core-libart", "okhttp", "bouncycastle", "apache-xml", ], } 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", } linker_config { name: "art-linker-config", src: "linker.config.json", installable: false, } prebuilt_etc { name: "com.android.art.init.rc", src: "art.rc", filename: "init.rc", installable: false, } prebuilt_etc { name: "dirty-image-objects-art", src: "dirty-image-objects", filename: "dirty-image-objects", installable: false, } // Default shared by all ART APEXes. apex_defaults { name: "com.android.art-base-defaults", defaults: ["s-launched-apex-module"], manifest: "manifest-art.json", key: "com.android.art.key", certificate: ":com.android.art.certificate", bootclasspath_fragments: ["art-bootclasspath-fragment"], systemserverclasspath_fragments: ["art-systemserverclasspath-fragment"], compat_configs: ["libcore-platform-compat-config"], required: [ "com.android.i18n", ], prebuilts: [ "art-linker-config", "com.android.art.init.rc", "current_sdkinfo", "dirty-image-objects-art", ], compile_multilib: "both", // Note: ART Golem benchmarking does not use the ART APEX, meaning that // copies of some of these libraries have to be installed in `/system` for // the setup to work properly. This is done by the `standalone-apex-files` // Make phony target (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`. native_shared_libs: [ // ART // External API (having APEX stubs). "libdexfile", "libnativebridge", "libnativehelper", "libnativeloader", "libsigchain", // These libraries are loaded at runtime from libart (either through // dlopen() or by instructing the user to load with -Xplugin), but they // cannot be runtime_lib dependencies from there because of cyclic // dependencies (b/124505714). "libadbconnection", "libopenjdkjvmti", "libperfetto_hprof", // Likewise libart is loaded at runtime from libnativeloader and also must // be specified explicitly due to cyclic dependencies. However, it's not // listed directly here since test_broken_com.android.art uses a different // implementation. // Libcore // External API (having APEX stubs). "libandroidio", // This library is loaded at runtime from libart but cannot be a runtime_lib // dependency from there because of cyclic dependencies (b/124505714). "libopenjdk", // These libraries are internal dependencies in libcore, but they don't get // pulled in automatically into apex_test modules. "libexpat", "libopenjdkjvm", ], multilib: { both: { binaries: [ "dalvikvm", "dex2oat", ], }, first: { binaries: [ "art_boot", "art_exec", "artd", "dexdump", "dexlist", "dexopt_chroot_setup", "dexoptanalyzer", "oatdump", "profman", ], jni_libs: [ "libartservice", ], }, }, } // Default values shared by Debug and Testing ART APEXes. apex_defaults { name: "com.android.art-devel-defaults", defaults: ["com.android.art-base-defaults"], native_shared_libs: [ "libadbconnectiond", "libdexfiled", "libopenjdkd", "libopenjdkjvmtid", "libperfetto_hprofd", ], multilib: { both: { binaries: [ "dex2oatd", "imgdiag", "imgdiagd", ], }, first: { binaries: [ "dexanalyze", "dexoptanalyzerd", "oatdumpd", "profmand", ], }, }, } // "Broken" test APEX, only used for testing, including module // `libart-broken` instead of `libart`. apex_test { name: "test_broken_com.android.art", defaults: ["com.android.art-base-defaults"], manifest: "test_apex_manifest.json", file_contexts: ":com.android.art-file_contexts", installable: false, compressible: false, native_shared_libs: ["libart-broken"], unwanted_transitive_deps: ["libart"], } apex_test { name: "test_jitzygote_com.android.art", defaults: ["com.android.art-base-defaults"], manifest: "test_apex_manifest.json", file_contexts: ":com.android.art-file_contexts", installable: false, native_shared_libs: ["libart"], multilib: { first: { binaries: ["odrefresh_broken"], }, }, } // Same as "com.android.art" APEX, but also contains "imgdiag" binary. // Used to collect dirty-image-objects. apex_test { name: "test_imgdiag_com.android.art", defaults: ["com.android.art-base-defaults"], manifest: "test_apex_manifest.json", file_contexts: ":com.android.art-file_contexts", installable: false, native_shared_libs: ["libart"], multilib: { both: { binaries: ["imgdiag"], }, first: { binaries: ["odrefresh"], }, }, } // 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-base-defaults"], native_shared_libs: ["libart"], multilib: { first: { binaries: ["odrefresh"], }, }, visibility: [ "//art/build/sdk", "//packages/modules/common/build", ], } // "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"], // Use a different manifest for this APEX (which has no prebuilts and is // thus always built from sources), with a high version number that ensures // that these packages can be installed on virtually all Android dessert // releases. manifest: "manifest-art-debug.json", native_shared_libs: [ "libart", "libartd", ], multilib: { first: { binaries: ["odrefresh"], jni_libs: ["libartserviced"], }, }, visibility: [ "//packages/modules/common/build", ], } // ART gtests with dependencies on internal ART APEX libraries. art_gtests = [ "art_cmdline_tests", "art_compiler_tests", "art_dex2oat_tests", "art_dexanalyze_tests", "art_dexdump_tests", "art_dexlist_tests", "art_disassembler_tests", "art_dexoptanalyzer_tests", "art_imgdiag_tests", "art_libartbase_tests", "art_libdexfile_tests", "art_libdexfile_support_tests", "art_libprofile_tests", "art_oatdump_tests", "art_profman_tests", "art_runtime_tests", "art_sigchain_tests", ] // ART gtests for which the "first" version is preferred. art_gtests_first = [ "art_odrefresh_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", tests: art_gtests, binaries: ["signal_dumper"], // Need signal_dumper for run-tests. // Use a different manifest for this APEX (which has no prebuilts and is // thus always built from sources), with a high version number that ensures // that these packages can be installed on virtually all Android dessert // releases. manifest: "manifest-art-debug.json", // 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, native_shared_libs: [ "libart", "libartd", ], multilib: { first: { tests: art_gtests_first, binaries: ["odrefresh"], jni_libs: ["libartserviced"], }, }, } 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)" + " --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", tools: [ "art-apex-tester", "deapexer", "debugfs_static", "fsck.erofs", ], } cc_defaults { name: "art-check-apex-gen-fakebin-defaults", host_supported: true, device_supported: false, target: { darwin: { enabled: false, // No python3. }, }, } java_genrule { name: "art-check-release-apex-gen", host_supported: true, device_supported: false, defaults: ["art-check-apex-gen-defaults"], device_common_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"], } java_genrule { name: "art-check-debug-apex-gen", host_supported: true, device_supported: false, defaults: ["art-check-apex-gen-defaults"], device_common_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"], } java_genrule { name: "art-check-testing-apex-gen", host_supported: true, device_supported: false, defaults: ["art-check-apex-gen-defaults"], device_common_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"], } // A zip containing ART binaries and ART bootclasspath jars. // At the time of writing, this is only for Compiler Explorer (https://godbolt.org). java_genrule { name: "art_release_zip", srcs: [ ":com.android.art", ], common_os_srcs: [ ":art-module-host-exports", ], 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)", dist: { targets: ["droidcore"], }, }