Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09207360 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Determine whether to enable userfaultfd GC at build time."

parents 72d74e2a d6c6e3a9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
per-file *dex_preopt*.* = ngeoffray@google.com,skvadrik@google.com
per-file *dex_preopt*.* = jiakaiz@google.com,ngeoffray@google.com,skvadrik@google.com
per-file art_*.* = jiakaiz@google.com,ngeoffray@google.com,skvadrik@google.com
per-file verify_uses_libraries.sh = ngeoffray@google.com,skvadrik@google.com

# For global Proguard rules

core/art_config.mk

0 → 100644
+46 −0
Original line number Diff line number Diff line
# ART configuration that has to be determined after product config is resolved.
#
# Inputs:
# PRODUCT_ENABLE_UFFD_GC: See comments in build/make/core/product.mk.
# OVERRIDE_ENABLE_UFFD_GC: Overrides PRODUCT_ENABLE_UFFD_GC. Can be passed from the commandline for
# debugging purposes.
# BOARD_API_LEVEL: See comments in build/make/core/main.mk.
# BOARD_SHIPPING_API_LEVEL: See comments in build/make/core/main.mk.
# PRODUCT_SHIPPING_API_LEVEL: See comments in build/make/core/product.mk.
#
# Outputs:
# ENABLE_UFFD_GC: Whether to use userfaultfd GC.

config_enable_uffd_gc := \
  $(firstword $(OVERRIDE_ENABLE_UFFD_GC) $(PRODUCT_ENABLE_UFFD_GC))

ifeq (,$(filter-out default,$(config_enable_uffd_gc)))
  ENABLE_UFFD_GC := true

  # Disable userfaultfd GC if the device doesn't support it (i.e., if
  # `min(ro.board.api_level ?? ro.board.first_api_level ?? MAX_VALUE,
  #      ro.product.first_api_level ?? ro.build.version.sdk ?? MAX_VALUE) < 31`)
  # This logic aligns with how `ro.vendor.api_level` is calculated in
  # `system/core/init/property_service.cpp`.
  # We omit the check on `ro.build.version.sdk` here because we are on the latest build system.
  board_api_level := $(firstword $(BOARD_API_LEVEL) $(BOARD_SHIPPING_API_LEVEL))
  ifneq (,$(board_api_level))
    ifeq (true,$(call math_lt,$(board_api_level),31))
      ENABLE_UFFD_GC := false
    endif
  endif

  ifneq (,$(PRODUCT_SHIPPING_API_LEVEL))
    ifeq (true,$(call math_lt,$(PRODUCT_SHIPPING_API_LEVEL),31))
      ENABLE_UFFD_GC := false
    endif
  endif
else ifeq (true,$(config_enable_uffd_gc))
  ENABLE_UFFD_GC := true
else ifeq (false,$(config_enable_uffd_gc))
  ENABLE_UFFD_GC := false
else
  $(error Unknown PRODUCT_ENABLE_UFFD_GC value: $(config_enable_uffd_gc))
endif

ADDITIONAL_PRODUCT_PROPERTIES += ro.dalvik.vm.enable_uffd_gc=$(ENABLE_UFFD_GC)
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ ifeq ($(WRITE_SOONG_VARIABLES),true)
  $(call add_json_str,  Dex2oatXmx,                              $(DEX2OAT_XMX))
  $(call add_json_str,  Dex2oatXms,                              $(DEX2OAT_XMS))
  $(call add_json_str,  EmptyDirectory,                          $(OUT_DIR)/empty)
  $(call add_json_bool, EnableUffdGc,                            $(ENABLE_UFFD_GC))

ifdef TARGET_ARCH
  $(call add_json_map,  CpuVariant)
+2 −0
Original line number Diff line number Diff line
@@ -493,6 +493,8 @@ endif
# Typical build; include any Android.mk files we can find.
#

include $(BUILD_SYSTEM)/art_config.mk

# Bring in dex_preopt.mk
# This creates some modules so it needs to be included after
# should-install-to-system is defined (in order for base_rules.mk to function
+12 −0
Original line number Diff line number Diff line
@@ -370,6 +370,18 @@ _product_single_value_vars += PRODUCT_MODULE_BUILD_FROM_SOURCE
# If true, installs a full version of com.android.virt APEX.
_product_single_value_vars += PRODUCT_AVF_ENABLED

# Whether to use userfaultfd GC.
# Possible values are:
# - "default" or empty: both the build system and the runtime determine whether to use userfaultfd
#   GC based on the vendor API level
# - "true": forces the build system to use userfaultfd GC regardless of the vendor API level; the
#   runtime determines whether to use userfaultfd GC based on the kernel support. Note that the
#   device may have to re-compile everything on the first boot if the kernel doesn't support
#   userfaultfd
# - "false": disallows the build system and the runtime to use userfaultfd GC even if the device
#   supports it
_product_single_value_vars += PRODUCT_ENABLE_UFFD_GC

.KATI_READONLY := _product_single_value_vars _product_list_vars
_product_var_list :=$= $(_product_single_value_vars) $(_product_list_vars)

Loading