1// Android Runtime APEX module. 2 3// Modules listed in LOCAL_REQUIRED_MODULES for module art-runtime in art/Android.mk. 4// - Base requirements (binaries for which both 32- and 64-bit versions are built, if relevant). 5art_runtime_base_binaries_both = [ 6 "dalvikvm", 7] 8// - Base requirements (binaries for which a 32-bit version is preferred). 9art_runtime_base_binaries_prefer32 = [ 10 "dex2oat", 11 "dexoptanalyzer", 12 "profman", 13] 14// - Base requirements (libraries). 15// 16// Note: ART on-device chroot-based testing and benchmarking is not yet using 17// the Runtime APEX, meaning that copies of some of these libraries have to be 18// installed in `/system` for the ART Buildbot set-up to work properly. This is 19// done by the `standalone-apex-files` Make phony target, used by the ART 20// Buildbot and Golem (see `art/Android.mk`). If you add libraries to this list, 21// you may have to also add them to `PRIVATE_RUNTIME_DEPENDENCY_LIBS` in 22// `art/Android.mk`. 23// TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use 24// the Runtime APEX. 25art_runtime_base_native_shared_libs = [ 26 // External API (having APEX stubs). 27 "libdexfile_external", 28 "libnativebridge", 29 "libnativehelper", 30 "libnativeloader", 31 // libadbconnection is internal and loaded with dlopen(), but it cannot use 32 // "required" because of cyclic dependency (b/124505714). 33 "libadbconnection", 34 // TODO(b/124476339): Clean up the following libraries once "required" 35 // dependencies work with APEX libraries. 36 "libart", 37 "libart-compiler", 38 "libdt_fd_forward", 39 "libdt_socket", 40 "libjdwp", 41 "libnpt", 42 "libopenjdkjvm", 43 "libopenjdkjvmti", 44] 45bionic_native_shared_libs = [ 46 // External API (having APEX stubs). 47 "libc", 48 "libm", 49 "libdl", 50] 51 52bionic_native_shared_libs_device = [ 53 // ... and their internal dependencies 54 // These are available only on device 55 "libc_malloc_debug", 56 "libc_malloc_hooks", 57] 58 59bionic_binaries_both = [ 60 "linker", 61] 62// - Debug variants (binaries for which a 32-bit version is preferred). 63art_runtime_debug_binaries_prefer32 = [ 64 "dexoptanalyzerd", 65 "profmand", 66] 67art_runtime_debug_binaries_prefer32_device = [ 68 "dex2oatd", 69] 70art_runtime_debug_binaries_both_host = [ 71 "dex2oatd", 72] 73 74// - Debug variants (libraries). 75art_runtime_debug_native_shared_libs = [ 76 "libadbconnectiond", 77 "libartd", 78 "libartd-compiler", 79 "libopenjdkjvmd", 80 "libopenjdkjvmtid", 81] 82 83// Data files associated with bionic / managed core library APIs. 84art_runtime_data_file_prebuilts = [ 85 "apex_tz_version", 86 "apex_tzdata", 87 "apex_tzlookup.xml", 88 "apex_icu.dat", 89] 90 91// Tools common to both device APEX and host APEX. Derived from art-tools in art/Android.mk. 92art_tools_common_binaries = [ 93 "dexdump", 94 "dexlist", 95] 96 97// Tools common to both device and host debug APEXes. 98art_tools_debug_binaries = [ 99 "dexdiag", 100] 101 102// Tools exclusively for the device APEX derived from art-tools in art/Android.mk. 103art_tools_device_only_binaries = [ 104 // oatdump cannot link with host linux_bionic due to not using clang lld; 105 // TODO: Make it work with clang lld. 106 "oatdump", 107] 108// Same, but for only for debug packages. 109art_tools_debug_device_only_binaries = [ 110 // oatdumpd cannot link with host linux_bionic due to not using clang lld; 111 // TODO: Make it work with clang lld. 112 "oatdumpd", 113] 114 115// Tools exclusively for the host APEX derived from art-tools in art/Android.mk. 116art_tools_host_only_binaries = [ 117 // FIXME: Does not work as-is, because `ahat` is defined in tools/ahat/Android.mk 118 // (same issue as for `libart_fake` above). 119 //"ahat", 120 "hprof-conv", 121] 122 123// Libraries needed to use com.android.runtime.host for zipapex run-tests 124art_runtime_host_run_test_libs = [ 125 "libartd-disassembler" 126] 127 128// Core Java libraries. 129libcore_java_libs = [ 130 "core-oj", 131 "core-libart", 132 "okhttp", 133 "bouncycastle", 134 "apache-xml", 135] 136 137// Native libraries that support the core Java libraries. 138// 139// Note: ART on-device chroot-based testing and benchmarking is not yet using 140// the Runtime APEX, meaning that copies of some of these libraries have to be 141// installed in `/system` for the ART Buildbot set-up to work properly. This is 142// done by the `standalone-apex-files` Make phony target, used by the ART 143// Buildbot and Golem (see `art/Android.mk`). If you add libraries to this list, 144// you may have to also add them to `PRIVATE_RUNTIME_DEPENDENCY_LIBS` in 145// `art/Android.mk`. 146// TODO(b/121117762): Remove this note when both the ART Buildbot and Golem use 147// the Runtime APEX. 148libcore_native_shared_libs = [ 149 // External API (having APEX stubs). 150 "libandroidicu", 151 "libandroidio", 152 // TODO(b/124476339): Clean up the following libraries once "required" 153 // dependencies work with APEX libraries. 154 "libexpat", 155 "libicui18n", 156 "libicuuc", 157 "libjavacore", 158 "libopenjdk", 159] 160libcore_debug_native_shared_libs = [ 161 "libopenjdkd", 162] 163 164libcore_native_device_only_shared_libs = [ 165 // TODO(b/122876336): Remove libpac.so once it's migrated to Webview. 166 // libpac is used by frameworks, not by ART host. 167 "libpac", 168] 169 170// Temporary library includes for b/123591866 as all libraries are moved into the main art-apex. 171art_runtime_libraries_zipapex = [ 172 "libnativebridge", 173 "libnativeloader", 174 "libnativehelper", 175 "libcutils", 176] 177 178apex_key { 179 name: "com.android.runtime.key", 180 public_key: "com.android.runtime.avbpubkey", 181 private_key: "com.android.runtime.pem", 182} 183 184android_app_certificate { 185 name: "com.android.runtime.debug.certificate", 186 certificate: "com.android.runtime.debug", 187} 188 189android_app_certificate { 190 name: "com.android.runtime.release.certificate", 191 certificate: "com.android.runtime.release", 192} 193 194prebuilt_etc { 195 name: "com.android.runtime.ld.config.txt", 196 src: "ld.config.txt", 197 filename: "ld.config.txt", 198 installable: false, 199} 200 201apex_defaults { 202 name: "com.android.runtime-defaults", 203 compile_multilib: "both", 204 manifest: "manifest.json", 205 java_libs: libcore_java_libs, 206 native_shared_libs: art_runtime_base_native_shared_libs 207 + bionic_native_shared_libs 208 + libcore_native_device_only_shared_libs 209 + libcore_native_shared_libs, 210 multilib: { 211 both: { 212 binaries: art_runtime_base_binaries_both 213 + bionic_binaries_both, 214 }, 215 prefer32: { 216 binaries: art_runtime_base_binaries_prefer32, 217 }, 218 first: { 219 binaries: art_tools_common_binaries 220 + art_tools_device_only_binaries, 221 } 222 }, 223 binaries: [ 224 "art_postinstall_hook", 225 "art_preinstall_hook", 226 "art_preinstall_hook_boot", 227 "art_preinstall_hook_system_server", 228 "art_prepostinstall_utils", 229 ], 230 prebuilts: art_runtime_data_file_prebuilts 231 + ["com.android.runtime.ld.config.txt"], 232 key: "com.android.runtime.key", 233 required: ["art_apex_boot_integrity"], 234} 235 236// Release version of the Runtime APEX module (not containing debug 237// variants nor tools), included in user builds. Also used for 238// storage-constrained devices in userdebug and eng builds. 239apex { 240 name: "com.android.runtime.release", 241 defaults: ["com.android.runtime-defaults"], 242 native_shared_libs: bionic_native_shared_libs_device, 243 certificate: ":com.android.runtime.release.certificate", 244} 245 246// "Debug" version of the Runtime APEX module (containing both release and 247// debug variants, as well as additional tools), included in userdebug and 248// eng build. 249apex { 250 name: "com.android.runtime.debug", 251 defaults: ["com.android.runtime-defaults"], 252 native_shared_libs: art_runtime_debug_native_shared_libs 253 + libcore_debug_native_shared_libs 254 + bionic_native_shared_libs_device, 255 multilib: { 256 prefer32: { 257 binaries: art_runtime_debug_binaries_prefer32 258 + art_runtime_debug_binaries_prefer32_device, 259 }, 260 first: { 261 binaries: art_tools_debug_binaries 262 + art_tools_debug_device_only_binaries, 263 } 264 }, 265 certificate: ":com.android.runtime.debug.certificate", 266} 267 268// TODO: Do this better. art_apex will disable host builds when 269// HOST_PREFER_32_BIT is set. We cannot simply use com.android.runtime.debug 270// because binaries have different multilib classes and 'multilib: {}' isn't 271// supported by target: { ... }. 272// See b/120617876 for more information. 273art_apex_test { 274 name: "com.android.runtime.host", 275 compile_multilib: "both", 276 payload_type: "zip", 277 host_supported: true, 278 device_supported: false, 279 manifest: "manifest.json", 280 java_libs: libcore_java_libs, 281 ignore_system_library_special_case: true, 282 native_shared_libs: art_runtime_base_native_shared_libs 283 + art_runtime_debug_native_shared_libs 284 + libcore_native_shared_libs 285 + libcore_debug_native_shared_libs 286 + art_runtime_libraries_zipapex 287 + art_runtime_host_run_test_libs, 288 multilib: { 289 both: { 290 binaries: art_runtime_base_binaries_both 291 + art_runtime_debug_binaries_both_host, 292 }, 293 first: { 294 binaries: art_tools_common_binaries 295 + art_tools_debug_binaries // Host APEX is always debug. 296 + art_tools_host_only_binaries 297 + art_runtime_base_binaries_prefer32 298 + art_runtime_debug_binaries_prefer32, 299 } 300 }, 301 key: "com.android.runtime.key", 302 target: { 303 darwin: { 304 enabled: false, 305 }, 306 linux_bionic: { 307 enabled: true, 308 multilib: { 309 both: { 310 native_shared_libs: bionic_native_shared_libs, 311 binaries: bionic_binaries_both, 312 } 313 } 314 }, 315 }, 316} 317 318python_binary_host { 319 name: "art-apex-tester", 320 srcs: ["art_apex_test.py"], 321 main: "art_apex_test.py", 322 version: { 323 py2: { 324 enabled: false, 325 }, 326 py3: { 327 enabled: true, 328 }, 329 }, 330} 331 332// Genrules so we can run the checker, and empty Java library so that it gets executed. 333 334genrule { 335 name: "art-check-release-apex-gen", 336 srcs: [":com.android.runtime.release"], 337 tools: [ 338 "art-apex-tester", 339 "debugfs", 340 ], 341 cmd: "$(location art-apex-tester)" 342 + " --debugfs $(location debugfs)" 343 + " --tmpdir $(genDir)" 344 + " $(in)" 345 + " && touch $(out)", 346 out: ["art-check-release-apex-gen.dummy"], 347} 348cc_prebuilt_binary { 349 name: "art-check-release-apex-gen-fakebin", 350 srcs: [":art-check-release-apex-gen"], 351 host_supported: true, 352 device_supported: false, 353 target: { 354 darwin: { 355 enabled: false, // No python3. 356 }, 357 }, 358} 359 360genrule { 361 name: "art-check-debug-apex-gen", 362 srcs: [":com.android.runtime.debug"], 363 tools: [ 364 "art-apex-tester", 365 "debugfs", 366 ], 367 cmd: "$(location art-apex-tester)" 368 + " --debugfs $(location debugfs)" 369 + " --tmpdir $(genDir)" 370 + " --debug" 371 + " $(in)" 372 + " && touch $(out)", 373 out: ["art-check-debug-apex-gen.dummy"], 374} 375cc_prebuilt_binary { 376 name: "art-check-debug-apex-gen-fakebin", 377 srcs: [":art-check-debug-apex-gen"], 378 host_supported: true, 379 device_supported: false, 380 target: { 381 darwin: { 382 enabled: false, // No python3. 383 }, 384 }, 385} 386 387// Pre-install scripts. 388 389sh_binary { 390 name: "art_preinstall_hook", 391 src: "art_preinstall_hook.sh", 392} 393sh_binary { 394 name: "art_preinstall_hook_boot", 395 src: "art_preinstall_hook_boot.sh", 396} 397sh_binary { 398 name: "art_preinstall_hook_system_server", 399 src: "art_preinstall_hook_system_server.sh", 400} 401sh_binary { 402 name: "art_prepostinstall_utils", 403 src: "art_prepostinstall_utils.sh", 404} 405sh_binary { 406 name: "art_postinstall_hook", 407 src: "art_postinstall_hook.sh", 408} 409 410sh_binary { 411 name: "art_apex_boot_integrity", 412 src: "art_apex_boot_integrity.sh", 413 init_rc: ["art_apex_boot_integrity.rc"], 414} 415