From 1083f3681841f79903c56a31504ce1a00f5e5501 Mon Sep 17 00:00:00 2001 From: Juan Yescas Date: Fri, 14 Jul 2023 10:42:31 -0700 Subject: [PATCH] 16k: core: Add flag to make AOSP page size agnostic The new boolean flag will be PRODUCT_PAGE_SIZE_AGNOSTIC. When PRODUCT_PAGE_SIZE_AGNOSTIC is true: - AOSP will use getpagesize() to retrieve the page size. - The flag `TARGET_MAX_PAGE_SIZE_SUPPORTED` has to be equals to `65536`. - AOSP will be able to use 4k/16k page size Linux kernels When PRODUCT_PAGE_SIZE_AGNOSTIC is false: - AOSP will only support 4k page size kernels. Test: source build/envsetup.sh lunch aosp_raven_64-userdebug get_build_var TARGET_PAGE_SIZE_AGNOSTIC get_build_var PRODUCT_MAX_PAGE_SIZE_SUPPORTED 65536 source build/envsetup.sh lunch aosp_raven_64-userdebug build/make/core/config.mk:414: error: TARGET_MAX_PAGE_SIZE_SUPPORTED has to be 65536 to support page size agnostic. 10:32:55 dumpvars failed with: exit status 1 Bug: 289419664 Change-Id: If8fc243a3e2cad77414a53a29805c7b6d349d4dd --- core/config.mk | 14 ++++++++++++++ core/product.mk | 4 ++++ core/soong_config.mk | 1 + 3 files changed, 19 insertions(+) diff --git a/core/config.mk b/core/config.mk index 55ff6baaa7..920e4575b5 100644 --- a/core/config.mk +++ b/core/config.mk @@ -425,6 +425,7 @@ ifdef PRODUCT_SHIPPING_API_LEVEL endif # Set TARGET_MAX_PAGE_SIZE_SUPPORTED. +# TARGET_MAX_PAGE_SIZE_SUPPORTED indicates the alignment of the ELF segments. ifdef PRODUCT_MAX_PAGE_SIZE_SUPPORTED TARGET_MAX_PAGE_SIZE_SUPPORTED := $(PRODUCT_MAX_PAGE_SIZE_SUPPORTED) else ifeq ($(strip $(call is-low-mem-device)),true) @@ -440,6 +441,19 @@ else endif .KATI_READONLY := TARGET_MAX_PAGE_SIZE_SUPPORTED +# Boolean variable determining if AOSP is page size agnostic. This means +# that AOSP can use a kernel configured with 4k/16k/64k PAGE SIZES. +TARGET_PAGE_SIZE_AGNOSTIC := false +ifdef PRODUCT_PAGE_SIZE_AGNOSTIC + TARGET_PAGE_SIZE_AGNOSTIC := $(PRODUCT_PAGE_SIZE_AGNOSTIC) + ifeq ($(TARGET_PAGE_SIZE_AGNOSTIC),true) + ifneq ($(TARGET_MAX_PAGE_SIZE_SUPPORTED),65536) + $(error TARGET_MAX_PAGE_SIZE_SUPPORTED has to be 65536 to support page size agnostic) + endif + endif +endif +.KATI_READONLY := TARGET_PAGE_SIZE_AGNOSTIC + # Pruned directory options used when using findleaves.py # See envsetup.mk for a description of SCAN_EXCLUDE_DIRS FIND_LEAVES_EXCLUDES := $(addprefix --prune=, $(SCAN_EXCLUDE_DIRS) .repo .git) diff --git a/core/product.mk b/core/product.mk index 99b3dea439..b66f1e2e69 100644 --- a/core/product.mk +++ b/core/product.mk @@ -33,6 +33,10 @@ _product_single_value_vars += PRODUCT_MODEL_FOR_ATTESTATION # 4096, 16384 and 65536. _product_single_value_vars += PRODUCT_MAX_PAGE_SIZE_SUPPORTED +# Indicates that AOSP can use a kernel configured with 4k/16k/64k page sizes. +# The possible values are true or false. +_product_single_value_vars += PRODUCT_PAGE_SIZE_AGNOSTIC + # The resource configuration options to use for this product. _product_list_vars += PRODUCT_LOCALES _product_list_vars += PRODUCT_AAPT_CONFIG diff --git a/core/soong_config.mk b/core/soong_config.mk index d8b18e731a..f150660582 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -150,6 +150,7 @@ $(call add_json_bool, Malloc_zero_contents, $(call invert_bool,$(fi $(call add_json_bool, Malloc_pattern_fill_contents, $(MALLOC_PATTERN_FILL_CONTENTS)) $(call add_json_str, Override_rs_driver, $(OVERRIDE_RS_DRIVER)) $(call add_json_str, DeviceMaxPageSizeSupported, $(TARGET_MAX_PAGE_SIZE_SUPPORTED)) +$(call add_json_bool, Device_page_size_agnostic, $(filter true,$(TARGET_PAGE_SIZE_AGNOSTIC))) $(call add_json_bool, UncompressPrivAppDex, $(call invert_bool,$(filter true,$(DONT_UNCOMPRESS_PRIV_APPS_DEXS)))) $(call add_json_list, ModulesLoadedByPrivilegedModules, $(PRODUCT_LOADED_BY_PRIVILEGED_MODULES))