1# 2# Copyright (C) 2011 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17LOCAL_PATH := $(call my-dir) 18 19art_path := $(LOCAL_PATH) 20 21include $(art_path)/build/Android.common_path.mk 22 23######################################################################## 24# cpplint rules to style check art source files 25 26include $(art_path)/build/Android.cpplint.mk 27 28######################################################################## 29# product rules 30 31include $(art_path)/tools/ahat/Android.mk 32 33ART_HOST_DEPENDENCIES := \ 34 $(ART_HOST_EXECUTABLES) \ 35 $(ART_HOST_DEX_DEPENDENCIES) \ 36 $(ART_HOST_SHARED_LIBRARY_DEPENDENCIES) 37 38ifeq ($(ART_BUILD_HOST_DEBUG),true) 39ART_HOST_DEPENDENCIES += $(ART_HOST_SHARED_LIBRARY_DEBUG_DEPENDENCIES) 40endif 41 42ART_TARGET_DEPENDENCIES := \ 43 $(ART_TARGET_DEX_DEPENDENCIES) 44 45######################################################################## 46# test rules 47 48# All the dependencies that must be built ahead of sync-ing them onto the target device. 49TEST_ART_TARGET_SYNC_DEPS := $(ADB_EXECUTABLE) 50 51include $(art_path)/build/Android.common_test.mk 52include $(art_path)/build/Android.gtest.mk 53include $(art_path)/test/Android.run-test.mk 54 55TEST_ART_TARGET_SYNC_DEPS += $(ART_TEST_TARGET_GTEST_DEPENDENCIES) $(ART_TEST_TARGET_RUN_TEST_DEPENDENCIES) 56 57# "mm test-art" to build and run all tests on host and device 58.PHONY: test-art 59test-art: 60 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 61 62.PHONY: test-art-gtest 63test-art-gtest: 64 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 65 66.PHONY: test-art-run-test 67test-art-run-test: 68 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 69 70######################################################################## 71# host test rules 72 73test-art: test-art-host 74test-art-gtest: test-art-host-gtest 75test-art-run-test: test-art-host-run-test 76 77VIXL_TEST_DEPENDENCY := 78# We can only run the vixl tests on 64-bit hosts (vixl testing issue) when its a 79# top-level build (to declare the vixl test rule). 80ifneq ($(HOST_PREFER_32_BIT),true) 81ifeq ($(ONE_SHOT_MAKEFILE),) 82VIXL_TEST_DEPENDENCY := run-vixl-tests 83endif 84endif 85 86.PHONY: test-art-host-vixl 87test-art-host-vixl: $(VIXL_TEST_DEPENDENCY) 88 89# "mm test-art-host" to build and run all host tests. 90.PHONY: test-art-host 91test-art-host: test-art-host-gtest test-art-host-run-test \ 92 test-art-host-vixl test-art-host-dexdump 93 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 94 95# All host tests that run solely with the default compiler. 96.PHONY: test-art-host-default 97test-art-host-default: test-art-host-run-test-default 98 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 99 100# All host tests that run solely with the optimizing compiler. 101.PHONY: test-art-host-optimizing 102test-art-host-optimizing: test-art-host-run-test-optimizing 103 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 104 105# All host tests that run solely on the interpreter. 106.PHONY: test-art-host-interpreter 107test-art-host-interpreter: test-art-host-run-test-interpreter 108 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 109 110# All host tests that run solely on the jit. 111.PHONY: test-art-host-jit 112test-art-host-jit: test-art-host-run-test-jit 113 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 114 115# Primary host architecture variants: 116.PHONY: test-art-host$(ART_PHONY_TEST_HOST_SUFFIX) 117test-art-host$(ART_PHONY_TEST_HOST_SUFFIX): test-art-host-gtest$(ART_PHONY_TEST_HOST_SUFFIX) \ 118 test-art-host-run-test$(ART_PHONY_TEST_HOST_SUFFIX) 119 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 120 121.PHONY: test-art-host-default$(ART_PHONY_TEST_HOST_SUFFIX) 122test-art-host-default$(ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-default$(ART_PHONY_TEST_HOST_SUFFIX) 123 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 124 125.PHONY: test-art-host-optimizing$(ART_PHONY_TEST_HOST_SUFFIX) 126test-art-host-optimizing$(ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-optimizing$(ART_PHONY_TEST_HOST_SUFFIX) 127 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 128 129.PHONY: test-art-host-interpreter$(ART_PHONY_TEST_HOST_SUFFIX) 130test-art-host-interpreter$(ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-interpreter$(ART_PHONY_TEST_HOST_SUFFIX) 131 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 132 133.PHONY: test-art-host-jit$(ART_PHONY_TEST_HOST_SUFFIX) 134test-art-host-jit$(ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-jit$(ART_PHONY_TEST_HOST_SUFFIX) 135 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 136 137# Secondary host architecture variants: 138ifneq ($(HOST_PREFER_32_BIT),true) 139.PHONY: test-art-host$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 140test-art-host$(2ND_ART_PHONY_TEST_HOST_SUFFIX): test-art-host-gtest$(2ND_ART_PHONY_TEST_HOST_SUFFIX) \ 141 test-art-host-run-test$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 142 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 143 144.PHONY: test-art-host-default$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 145test-art-host-default$(2ND_ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-default$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 146 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 147 148.PHONY: test-art-host-optimizing$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 149test-art-host-optimizing$(2ND_ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-optimizing$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 150 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 151 152.PHONY: test-art-host-interpreter$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 153test-art-host-interpreter$(2ND_ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-interpreter$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 154 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 155 156.PHONY: test-art-host-jit$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 157test-art-host-jit$(2ND_ART_PHONY_TEST_HOST_SUFFIX): test-art-host-run-test-jit$(2ND_ART_PHONY_TEST_HOST_SUFFIX) 158 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 159endif 160 161# Dexdump/list regression test. 162.PHONY: test-art-host-dexdump 163test-art-host-dexdump: $(addprefix $(HOST_OUT_EXECUTABLES)/, dexdump dexlist) 164 ANDROID_HOST_OUT=$(realpath $(HOST_OUT)) art/test/dexdump/run-all-tests 165 166######################################################################## 167# target test rules 168 169test-art: test-art-target 170test-art-gtest: test-art-target-gtest 171test-art-run-test: test-art-target-run-test 172 173# "mm test-art-target" to build and run all target tests. 174.PHONY: test-art-target 175test-art-target: test-art-target-gtest test-art-target-run-test 176 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 177 178# All target tests that run solely with the default compiler. 179.PHONY: test-art-target-default 180test-art-target-default: test-art-target-run-test-default 181 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 182 183# All target tests that run solely with the optimizing compiler. 184.PHONY: test-art-target-optimizing 185test-art-target-optimizing: test-art-target-run-test-optimizing 186 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 187 188# All target tests that run solely on the interpreter. 189.PHONY: test-art-target-interpreter 190test-art-target-interpreter: test-art-target-run-test-interpreter 191 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 192 193# All target tests that run solely on the jit. 194.PHONY: test-art-target-jit 195test-art-target-jit: test-art-target-run-test-jit 196 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 197 198# Primary target architecture variants: 199.PHONY: test-art-target$(ART_PHONY_TEST_TARGET_SUFFIX) 200test-art-target$(ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-gtest$(ART_PHONY_TEST_TARGET_SUFFIX) \ 201 test-art-target-run-test$(ART_PHONY_TEST_TARGET_SUFFIX) 202 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 203 204.PHONY: test-art-target-default$(ART_PHONY_TEST_TARGET_SUFFIX) 205test-art-target-default$(ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-default$(ART_PHONY_TEST_TARGET_SUFFIX) 206 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 207 208.PHONY: test-art-target-optimizing$(ART_PHONY_TEST_TARGET_SUFFIX) 209test-art-target-optimizing$(ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-optimizing$(ART_PHONY_TEST_TARGET_SUFFIX) 210 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 211 212.PHONY: test-art-target-interpreter$(ART_PHONY_TEST_TARGET_SUFFIX) 213test-art-target-interpreter$(ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-interpreter$(ART_PHONY_TEST_TARGET_SUFFIX) 214 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 215 216.PHONY: test-art-target-jit$(ART_PHONY_TEST_TARGET_SUFFIX) 217test-art-target-jit$(ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-jit$(ART_PHONY_TEST_TARGET_SUFFIX) 218 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 219 220# Secondary target architecture variants: 221ifdef 2ND_ART_PHONY_TEST_TARGET_SUFFIX 222.PHONY: test-art-target$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 223test-art-target$(2ND_ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-gtest$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) \ 224 test-art-target-run-test$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 225 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 226 227.PHONY: test-art-target-default$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 228test-art-target-default$(2ND_ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-default$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 229 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 230 231.PHONY: test-art-target-optimizing$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 232test-art-target-optimizing$(2ND_ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-optimizing$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 233 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 234 235.PHONY: test-art-target-interpreter$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 236test-art-target-interpreter$(2ND_ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-interpreter$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 237 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 238 239.PHONY: test-art-target-jit$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 240test-art-target-jit$(2ND_ART_PHONY_TEST_TARGET_SUFFIX): test-art-target-run-test-jit$(2ND_ART_PHONY_TEST_TARGET_SUFFIX) 241 $(hide) $(call ART_TEST_PREREQ_FINISHED,$@) 242endif 243 244####################### 245# Reset LOCAL_PATH because previous includes may override its value. 246# Keep this after all "include $(art_path)/..." are done, and before any 247# "include $(BUILD_...)". 248LOCAL_PATH := $(art_path) 249 250######################################################################## 251# "m build-art" for quick minimal build 252.PHONY: build-art 253 254build-art: build-art-host 255 256# For host, we extract the ICU data from the apex and install it to HOST_OUT/I18N_APEX. 257$(HOST_I18N_DATA): $(TARGET_OUT)/apex/$(I18N_APEX).apex $(HOST_OUT)/bin/deapexer 258 $(call extract-from-apex,$(I18N_APEX)) 259 rm -rf $(HOST_OUT)/$(I18N_APEX) 260 mkdir -p $(HOST_OUT)/$(I18N_APEX)/ 261 cp -R $(TARGET_OUT)/apex/$(I18N_APEX)/etc/ $(HOST_OUT)/$(I18N_APEX)/ 262 touch $@ 263 264$(HOST_TZDATA_DATA): $(TARGET_OUT)/apex/$(TZDATA_APEX).apex $(HOST_OUT)/bin/deapexer 265 $(call extract-from-apex,$(TZDATA_APEX)) 266 rm -rf $(HOST_OUT)/$(TZDATA_APEX) 267 mkdir -p $(HOST_OUT)/$(TZDATA_APEX)/ 268 cp -R $(TARGET_OUT)/apex/$(TZDATA_APEX)/etc/ $(HOST_OUT)/$(TZDATA_APEX)/ 269 touch $@ 270 271.PHONY: build-art-host 272build-art-host: $(HOST_OUT_EXECUTABLES)/art $(ART_HOST_DEPENDENCIES) $(HOST_CORE_IMG_OUTS) $(HOST_I18N_DATA) $(HOST_TZDATA_DATA) 273 274build-art: build-art-target 275 276.PHONY: build-art-target 277build-art-target: $(TARGET_OUT_EXECUTABLES)/art $(ART_TARGET_DEPENDENCIES) $(TARGET_CORE_IMG_OUTS) 278 279PRIVATE_ART_APEX_DEPENDENCY_FILES := \ 280 bin/dalvikvm32 \ 281 bin/dalvikvm64 \ 282 bin/dalvikvm \ 283 bin/dex2oat32 \ 284 bin/dex2oat64 \ 285 bin/dexdump \ 286 287PRIVATE_ART_APEX_DEPENDENCY_LIBS := \ 288 lib/libadbconnection.so \ 289 lib/libandroidio.so \ 290 lib/libartbase.so \ 291 lib/libart-dexlayout.so \ 292 lib/libart-disassembler.so \ 293 lib/libartpalette.so \ 294 lib/libart.so \ 295 lib/libdexfile.so \ 296 lib/libdt_fd_forward.so \ 297 lib/libdt_socket.so \ 298 lib/libexpat.so \ 299 lib/libjavacore.so \ 300 lib/libjdwp.so \ 301 lib/liblzma.so \ 302 lib/libmeminfo.so \ 303 lib/libnativebridge.so \ 304 lib/libnativehelper.so \ 305 lib/libnativeloader.so \ 306 lib/libnpt.so \ 307 lib/libopenjdkjvm.so \ 308 lib/libopenjdkjvmti.so \ 309 lib/libopenjdk.so \ 310 lib/libpac.so \ 311 lib/libprocinfo.so \ 312 lib/libprofile.so \ 313 lib/libsigchain.so \ 314 lib/libunwindstack.so \ 315 lib64/libadbconnection.so \ 316 lib64/libandroidio.so \ 317 lib64/libartbase.so \ 318 lib64/libart-dexlayout.so \ 319 lib64/libart-disassembler.so \ 320 lib64/libartpalette.so \ 321 lib64/libart.so \ 322 lib64/libdexfile.so \ 323 lib64/libdt_fd_forward.so \ 324 lib64/libdt_socket.so \ 325 lib64/libexpat.so \ 326 lib64/libjavacore.so \ 327 lib64/libjdwp.so \ 328 lib64/liblzma.so \ 329 lib64/libmeminfo.so \ 330 lib64/libnativebridge.so \ 331 lib64/libnativehelper.so \ 332 lib64/libnativeloader.so \ 333 lib64/libnpt.so \ 334 lib64/libopenjdkjvm.so \ 335 lib64/libopenjdkjvmti.so \ 336 lib64/libopenjdk.so \ 337 lib64/libpac.so \ 338 lib64/libprocinfo.so \ 339 lib64/libprofile.so \ 340 lib64/libsigchain.so \ 341 lib64/libunwindstack.so \ 342 343PRIVATE_RUNTIME_APEX_DEPENDENCY_FILES := \ 344 bin/linker \ 345 bin/linker64 \ 346 lib/bionic/libc.so \ 347 lib/bionic/libdl.so \ 348 lib/bionic/libdl_android.so \ 349 lib/bionic/libm.so \ 350 lib64/bionic/libc.so \ 351 lib64/bionic/libdl.so \ 352 lib64/bionic/libdl_android.so \ 353 lib64/bionic/libm.so \ 354 355PRIVATE_CONSCRYPT_APEX_DEPENDENCY_LIBS := \ 356 lib/libcrypto.so \ 357 lib/libjavacrypto.so \ 358 lib/libssl.so \ 359 lib64/libcrypto.so \ 360 lib64/libjavacrypto.so \ 361 lib64/libssl.so \ 362 363PRIVATE_I18N_APEX_DEPENDENCY_LIBS := \ 364 lib/libicu.so \ 365 lib/libicui18n.so \ 366 lib/libicu_jni.so \ 367 lib/libicuuc.so \ 368 lib64/libicu.so \ 369 lib64/libicui18n.so \ 370 lib64/libicu_jni.so \ 371 lib64/libicuuc.so \ 372 373PRIVATE_STATSD_APEX_DEPENDENCY_LIBS := \ 374 lib/libstatspull.so \ 375 lib/libstatssocket.so \ 376 lib64/libstatspull.so \ 377 lib64/libstatssocket.so \ 378 379# Extracts files from an APEX into a location. The APEX can be either a .apex or 380# .capex file in $(TARGET_OUT)/apex, or a directory in the same location. Files 381# are extracted to $(TARGET_OUT) with the same relative paths as under the APEX 382# root. 383# $(1): APEX base name 384# $(2): List of files to extract, with paths relative to the APEX root 385# 386# "cp -d" below doesn't work on Darwin, but this is only used for Golem builds 387# and won't run on mac anyway. 388define extract-from-apex 389 apex_root=$(TARGET_OUT)/apex && \ 390 apex_file=$$apex_root/$(1).apex && \ 391 apex_dir=$$apex_root/$(1) && \ 392 if [ ! -f $$apex_file ]; then \ 393 apex_file=$$apex_root/$(1).capex; \ 394 fi && \ 395 if [ -f $$apex_file ]; then \ 396 rm -rf $$apex_dir && \ 397 mkdir -p $$apex_dir && \ 398 debugfs=$(HOST_OUT)/bin/debugfs_static && \ 399 fsckerofs=$(HOST_OUT)/bin/fsck.erofs && \ 400 $(HOST_OUT)/bin/deapexer --debugfs_path $$debugfs \ 401 --fsckerofs_path $$fsckerofs extract $$apex_file $$apex_dir; \ 402 fi && \ 403 for f in $(2); do \ 404 sf=$$apex_dir/$$f && \ 405 df=$(TARGET_OUT)/$$f && \ 406 if [ -f $$sf -o -h $$sf ]; then \ 407 mkdir -p $$(dirname $$df) && \ 408 cp -fd $$sf $$df; \ 409 fi || exit 1; \ 410 done 411endef 412 413# Copy or extract some required files from APEXes to the `system` (TARGET_OUT) 414# directory. This is dangerous as these files could inadvertently stay in this 415# directory and be included in a system image. 416# 417# This target is only used by Golem now. 418# 419# NB Android build does not use cp from: 420# $ANDROID_BUILD_TOP/prebuilts/build-tools/path/{linux-x86,darwin-x86} 421# which has a non-standard set of command-line flags. 422# 423# TODO(b/129332183): Remove this when Golem has full support for the 424# ART APEX. 425# 426# TODO(b/129332183): This approach is flawed: We mix DSOs from prebuilt APEXes 427# with source built ones, and some of them don't have stable ABIs. libbase.so in 428# particular is such a problematic dependency. When those dependencies 429# eventually don't work anymore we don't have much choice but to update all 430# prebuilts. 431.PHONY: standalone-apex-files 432standalone-apex-files: deapexer \ 433 $(RELEASE_ART_APEX) \ 434 $(RUNTIME_APEX) \ 435 $(CONSCRYPT_APEX) \ 436 $(I18N_APEX) \ 437 $(STATSD_APEX) \ 438 $(TZDATA_APEX) \ 439 $(HOST_OUT)/bin/generate-boot-image64 \ 440 $(HOST_OUT)/bin/dex2oat64 \ 441 libartpalette_fake \ 442 art_fake_heapprofd_client_api 443 $(call extract-from-apex,$(RELEASE_ART_APEX),\ 444 $(PRIVATE_ART_APEX_DEPENDENCY_LIBS) $(PRIVATE_ART_APEX_DEPENDENCY_FILES)) 445 # The Runtime APEX has the Bionic libs in ${LIB}/bionic subdirectories, 446 # so we need to move them up a level after extraction. 447 # Also, copy fake platform libraries. 448 $(call extract-from-apex,$(RUNTIME_APEX),\ 449 $(PRIVATE_RUNTIME_APEX_DEPENDENCY_FILES)) && \ 450 libdir=$(TARGET_OUT)/lib$$(expr $(TARGET_ARCH) : '.*\(64\)' || :) && \ 451 if [ -d $$libdir/bionic ]; then \ 452 mv -f $$libdir/bionic/*.so $$libdir; \ 453 fi && \ 454 cp $$libdir/art_fake/*.so $$libdir 455 $(call extract-from-apex,$(CONSCRYPT_APEX),\ 456 $(PRIVATE_CONSCRYPT_APEX_DEPENDENCY_LIBS)) 457 $(call extract-from-apex,$(I18N_APEX),\ 458 $(PRIVATE_I18N_APEX_DEPENDENCY_LIBS)) 459 $(call extract-from-apex,$(STATSD_APEX),\ 460 $(PRIVATE_STATSD_APEX_DEPENDENCY_LIBS)) 461 $(call extract-from-apex,$(TZDATA_APEX),) 462 rm -rf $(PRODUCT_OUT)/apex/art_boot_images && \ 463 mkdir -p $(PRODUCT_OUT)/apex/art_boot_images/javalib && \ 464 $(HOST_OUT)/bin/generate-boot-image64 \ 465 --output-dir=$(PRODUCT_OUT)/apex/art_boot_images/javalib \ 466 --compiler-filter=speed \ 467 --use-profile=false \ 468 --dex2oat-bin=$(HOST_OUT)/bin/dex2oat64 \ 469 --android-root=$(TARGET_OUT) \ 470 --instruction-set=$(TARGET_ARCH) 471 472######################################################################## 473# Phony target for only building what go/lem requires for pushing ART on /data. 474 475.PHONY: build-art-target-golem 476 477ART_TARGET_PLATFORM_LIBS := \ 478 libcutils \ 479 libprocessgroup \ 480 libprocinfo \ 481 libselinux \ 482 libtombstoned_client \ 483 libz \ 484 485ART_TARGET_PLATFORM_DEPENDENCIES := \ 486 $(TARGET_OUT)/etc/public.libraries.txt \ 487 $(foreach lib,$(ART_TARGET_PLATFORM_LIBS), $(TARGET_OUT_SHARED_LIBRARIES)/$(lib).so) 488ifdef TARGET_2ND_ARCH 489ART_TARGET_PLATFORM_DEPENDENCIES += \ 490 $(foreach lib,$(ART_TARGET_PLATFORM_LIBS), $(2ND_TARGET_OUT_SHARED_LIBRARIES)/$(lib).so) 491endif 492 493# Despite `liblz4` being included in the ART apex, Golem benchmarks need another one in /system/ . 494ART_TARGET_PLATFORM_DEPENDENCIES_GOLEM= \ 495 $(TARGET_OUT_SHARED_LIBRARIES)/liblz4.so 496 497# Also include libartbenchmark, we always include it when running golem. 498# libstdc++ is needed when building for ART_TARGET_LINUX. 499ART_TARGET_SHARED_LIBRARY_BENCHMARK := $(TARGET_OUT_SHARED_LIBRARIES)/libartbenchmark.so 500 501build-art-target-golem: $(RELEASE_ART_APEX) com.android.runtime $(CONSCRYPT_APEX) \ 502 $(TARGET_OUT_EXECUTABLES)/art \ 503 $(TARGET_OUT_EXECUTABLES)/dex2oat_wrapper \ 504 $(ART_TARGET_PLATFORM_DEPENDENCIES) \ 505 $(ART_TARGET_PLATFORM_DEPENDENCIES_GOLEM) \ 506 $(ART_TARGET_SHARED_LIBRARY_BENCHMARK) \ 507 $(TARGET_OUT_SHARED_LIBRARIES)/libgolemtiagent.so \ 508 standalone-apex-files 509 # remove debug libraries from public.libraries.txt because golem builds 510 # won't have it. 511 sed -i '/libartd.so/d' $(TARGET_OUT)/etc/public.libraries.txt 512 sed -i '/libdexfiled.so/d' $(TARGET_OUT)/etc/public.libraries.txt 513 sed -i '/libprofiled.so/d' $(TARGET_OUT)/etc/public.libraries.txt 514 sed -i '/libartbased.so/d' $(TARGET_OUT)/etc/public.libraries.txt 515 516######################################################################## 517# Phony target for building what go/lem requires on host. 518 519.PHONY: build-art-host-golem 520# Also include libartbenchmark, we always include it when running golem. 521ART_HOST_SHARED_LIBRARY_BENCHMARK := $(ART_HOST_OUT_SHARED_LIBRARIES)/libartbenchmark.so 522build-art-host-golem: build-art-host \ 523 $(ART_HOST_SHARED_LIBRARY_BENCHMARK) \ 524 $(ART_HOST_OUT_SHARED_LIBRARIES)/libgolemtiagent.so \ 525 $(HOST_OUT_EXECUTABLES)/dex2oat_wrapper 526 527######################################################################## 528# Rules for building all dependencies for tests. 529 530.PHONY: build-art-host-gtests build-art-host-run-tests build-art-host-tests 531 532build-art-host-gtests: build-art-host $(ART_TEST_HOST_GTEST_DEPENDENCIES) 533 534build-art-host-run-tests: build-art-host \ 535 $(TEST_ART_RUN_TEST_DEPENDENCIES) \ 536 $(ART_TEST_HOST_RUN_TEST_DEPENDENCIES) \ 537 art-run-test-host-data \ 538 art-run-test-jvm-data 539 540build-art-host-tests: build-art-host-gtests build-art-host-run-tests 541 542.PHONY: build-art-target-gtests build-art-target-run-tests build-art-target-tests 543 544build-art-target-gtests: build-art-target \ 545 $(ART_TEST_TARGET_GTEST_DEPENDENCIES) \ 546 $(ART_TARGET_PLATFORM_DEPENDENCIES) 547 548build-art-target-run-tests: build-art-target \ 549 $(TEST_ART_RUN_TEST_DEPENDENCIES) \ 550 $(ART_TEST_TARGET_RUN_TEST_DEPENDENCIES) \ 551 $(ART_TARGET_PLATFORM_DEPENDENCIES) \ 552 art-run-test-target-data 553 554build-art-target-tests: build-art-target-gtests build-art-target-run-tests 555 556######################################################################## 557 558# Clear locally used variables. 559TEST_ART_TARGET_SYNC_DEPS := 560 561# These files only exist if this flag is off. WITH_DEXPREOPT_ART_BOOT_IMG_ONLY is the 562# minimal dexpreopt mode we use on eng builds for build speed. 563ifneq ($(WITH_DEXPREOPT_ART_BOOT_IMG_ONLY),true) 564 565# Helper target that depends on boot image creation. 566# 567# Can be used, for example, to dump initialization failures: 568# m art-boot-image ART_BOOT_IMAGE_EXTRA_ARGS=--dump-init-failures=fails.txt 569.PHONY: art-boot-image 570art-boot-image: $(DEXPREOPT_IMAGE_boot_$(TARGET_ARCH)) 571 572.PHONY: art-job-images 573art-job-images: \ 574 art-boot-image \ 575 $(2ND_DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) \ 576 $(HOST_OUT_EXECUTABLES)/dex2oats \ 577 $(HOST_OUT_EXECUTABLES)/dex2oatds \ 578 $(HOST_OUT_EXECUTABLES)/profman 579 580endif # TARGET_BUILD_VARIANT == eng 581 582######################################################################## 583 584# Build a target that contains dex public SDK stubs for SDK version in the list. 585# Zip files structure: 586# public-sdk-28-stub.zip 587# classes.dex 588# public-sdk-29-stub.zip 589# classes.dex 590# public-sdk-30-stub.zip 591# classes.dex 592MIN_SDK_VERSION := 28 593SDK_VERSIONS := $(call numbers_greater_or_equal_to,$(MIN_SDK_VERSION),$(TARGET_AVAIALBLE_SDK_VERSIONS)) 594 595# Create dex public SDK stubs. 596define get_public_sdk_stub_dex 597$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/public_sdk_$(1)_stub_intermediates/classes.dex 598endef 599 600# The input is the SDK version. 601define create_public_sdk_dex 602public_sdk_$(1)_stub := $$(call get_public_sdk_stub_dex,$(1)) 603$$(public_sdk_$(1)_stub): PRIVATE_MIN_SDK_VERSION := $(1) 604$$(public_sdk_$(1)_stub): $$(call resolve-prebuilt-sdk-jar-path,$(1)) $$(D8) $$(ZIP2ZIP) 605 $$(transform-classes.jar-to-dex) 606 607$$(call declare-1p-target,$$(public_sdk_$(1)_stub),art) 608endef 609 610$(foreach version,$(SDK_VERSIONS),$(eval $(call create_public_sdk_dex,$(version)))) 611 612# Create dex public SDK stubs zip. 613define get_public_sdk_stub_zip 614$(call intermediates-dir-for,PACKAGING,public_sdk_stub,HOST)/public-sdk-$(1)-stub.zip 615endef 616 617define create_public_sdk_zip 618PUBLIC_SDK_$(1)_STUB_ZIP_PATH := $$(call get_public_sdk_stub_zip,$(1)) 619$$(PUBLIC_SDK_$(1)_STUB_ZIP_PATH): PRIVATE_SDK_STUBS_DEX_DIR := $$(dir $$(public_sdk_$(1)_stub)) 620$$(PUBLIC_SDK_$(1)_STUB_ZIP_PATH): $$(SOONG_ZIP) $$(public_sdk_$(1)_stub) 621 rm -f $$@ 622 $$(SOONG_ZIP) -o $$@ -C $$(PRIVATE_SDK_STUBS_DEX_DIR) -D $$(PRIVATE_SDK_STUBS_DEX_DIR) 623 624$$(call declare-1p-container,$$(PUBLIC_SDK_$(1)_STUB_ZIP_PATH),art) 625$$(call declare-container-license-deps,$$(PUBLIC_SDK_$(1)_STUB_ZIP_PATH),$$(public_sdk_$(1)_stub),$$(PUBLIC_SDK_$(1)_STUB_PATH):) 626endef 627 628$(foreach version,$(SDK_VERSIONS),$(eval $(call create_public_sdk_zip,$(version)))) 629 630# Make the zip files available for prebuilts. 631$(foreach version,$(SDK_VERSIONS),$(call dist-for-goals,sdk,$(call get_public_sdk_stub_zip,$(version)))) 632 633STUB_ZIP_FILES = $(foreach version,$(SDK_VERSIONS),$(call get_public_sdk_stub_zip,$(version))) 634 635.PHONY: public_sdk_stubs 636public_sdk_stubs: $(STUB_ZIP_FILES) 637 638MIN_SDK_VERSION := 639SDK_VERSIONS := 640