blob: 5b419e5415c58e35b8f4a4d858e44113e6f08f03 [file] [log] [blame]
// 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"],
},
}