#
# Copyright (C) 2013 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Provides a functioning ART environment without Android frameworks

$(call inherit-product, $(SRC_TARGET_DIR)/product/default_art_config.mk)

# Additional mixins to the boot classpath.
PRODUCT_PACKAGES += \
    android.test.base \

# Why are we pulling in ext, which is frameworks/base, depending on tagsoup and nist-sip?
PRODUCT_PACKAGES += \
    ext \

# Runtime (Bionic) APEX module.
PRODUCT_PACKAGES += com.android.runtime

# ART APEX module.
#
# Select either release (com.android.art) or debug (com.android.art.debug)
# variant of the ART APEX. By default, "user" build variants contain the release
# module, while the "eng" build variant contain the debug module. However, if
# `PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD` is defined, it overrides the previous
# logic:
# - if `PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD` is set to `false`, the
#   build will include the release module (whatever the build
#   variant);
# - if `PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD` is set to `true`, the
#   build will include the debug module (whatever the build variant).
#
# Note that the ART APEX package includes the minimal boot classpath JARs
# (listed in ART_APEX_JARS), which should no longer be added directly to
# PRODUCT_PACKAGES.

art_target_include_debug_build := $(PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD)
ifneq (false,$(art_target_include_debug_build))
  ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT)))
    art_target_include_debug_build := true
  endif
endif

ifeq (true,$(art_target_include_debug_build))
  PRODUCT_PACKAGES += com.android.art.debug
  apex_test_module := art-check-debug-apex-gen-fakebin
else
  PRODUCT_PACKAGES += com.android.art
  apex_test_module := art-check-release-apex-gen-fakebin
endif

ifeq (true,$(SOONG_CONFIG_art_module_source_build)
  PRODUCT_HOST_PACKAGES += $(apex_test_module)
endif

art_target_include_debug_build :=
apex_test_module :=

# Certificates.
PRODUCT_PACKAGES += \
    cacerts \

PRODUCT_PACKAGES += \
    hiddenapi-package-whitelist.xml \

# The dalvik.vm.dexopt.thermal-cutoff property must contain one of the values
# listed here:
#
# https://source.android.com/devices/architecture/hidl/thermal-mitigation#thermal-api
#
# If the thermal status of the device reaches or exceeds the value set here
# background dexopt will be terminated and rescheduled using an exponential
# backoff polcy.
#
# The thermal cutoff value is currently set to THERMAL_STATUS_MODERATE.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.usejit=true \
    dalvik.vm.usejitprofiles=true \
    dalvik.vm.dexopt.secondary=true \
    dalvik.vm.dexopt.thermal-cutoff=2 \
    dalvik.vm.appimageformat=lz4

PRODUCT_SYSTEM_PROPERTIES += \
    ro.dalvik.vm.native.bridge=0

# Different dexopt types for different package update/install times.
# On eng builds, make "boot" reasons only extract for faster turnaround.
ifeq (eng,$(TARGET_BUILD_VARIANT))
    PRODUCT_SYSTEM_PROPERTIES += \
        pm.dexopt.first-boot?=extract \
        pm.dexopt.boot-after-ota?=extract
else
    PRODUCT_SYSTEM_PROPERTIES += \
        pm.dexopt.first-boot?=verify \
        pm.dexopt.boot-after-ota?=verify
endif

# The install filter is speed-profile in order to enable the use of
# profiles from the dex metadata files. Note that if a profile is not provided
# or if it is empty speed-profile is equivalent to (quicken + empty app image).
PRODUCT_SYSTEM_PROPERTIES += \
    pm.dexopt.post-boot?=extract \
    pm.dexopt.install?=speed-profile \
    pm.dexopt.install-fast?=skip \
    pm.dexopt.install-bulk?=speed-profile \
    pm.dexopt.install-bulk-secondary?=verify \
    pm.dexopt.install-bulk-downgraded?=verify \
    pm.dexopt.install-bulk-secondary-downgraded?=extract \
    pm.dexopt.bg-dexopt?=speed-profile \
    pm.dexopt.ab-ota?=speed-profile \
    pm.dexopt.inactive?=verify \
    pm.dexopt.shared?=speed

# Pass file with the list of updatable boot class path packages to dex2oat.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.dex2oat-updatable-bcp-packages-file=/system/etc/updatable-bcp-packages.txt

# Enable resolution of startup const strings.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.dex2oat-resolve-startup-strings=true

# Specify default block size of 512K to enable parallel image decompression.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.dex2oat-max-image-block-size=524288

# Enable minidebuginfo generation unless overridden.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.minidebuginfo=true \
    dalvik.vm.dex2oat-minidebuginfo=true

# Two other device configs are added to IORap besides "ro.iorapd.enable".
# IORap by default is off and starts when
# (https://source.corp.google.com/android/system/iorap/iorapd.rc?q=iorapd.rc)
#
# * "ro.iorapd.enable" is true excluding unset
# * One of the device configs is true.
#
# "ro.iorapd.enable" has to be set to true, so that iorap can be started.
PRODUCT_SYSTEM_PROPERTIES += \
    ro.iorapd.enable?=true

# Enable Madvising of the whole art, odex and vdex files to MADV_WILLNEED.
# The size specified here is the size limit of how much of the file
# (in bytes) is madvised.
# We madvise the whole .art file to MADV_WILLNEED with UINT_MAX limit.
# For odex and vdex files, we limit madvising to 100MB.
PRODUCT_SYSTEM_PROPERTIES += \
    dalvik.vm.madvise.vdexfile.size=104857600 \
    dalvik.vm.madvise.odexfile.size=104857600 \
    dalvik.vm.madvise.artfile.size=4294967295
