Merge "Adjust partition size checks for recovery resources" into rvc-dev
diff --git a/core/local_systemsdk.mk b/core/local_systemsdk.mk
index 2b73f93..460073d 100644
--- a/core/local_systemsdk.mk
+++ b/core/local_systemsdk.mk
@@ -15,7 +15,7 @@
#
ifdef BOARD_SYSTEMSDK_VERSIONS
- # Apps and jars in vendor or odm partition are forced to build against System SDK.
+ # Apps and jars in vendor, product or odm partition are forced to build against System SDK.
_cannot_use_platform_apis :=
ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE)))
# Note: no need to check LOCAL_MODULE_PATH* since LOCAL_[VENDOR|ODM|OEM]_MODULE is already
@@ -29,9 +29,9 @@
ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS)))
ifndef LOCAL_SDK_VERSION
ifeq ($(_cannot_use_platform_apis),true)
- ifeq (,$(findstring __auto_generated_rro_,$(LOCAL_MODULE)))
+ ifeq (,$(LOCAL_IS_RUNTIME_RESOURCE_OVERLAY))
# Runtime resource overlays are exempted from building against System SDK.
- # TODO(b/35859726): remove this exception
+ # TODO(b/155027019): remove this, after no product/vendor apps rely on this behavior.
LOCAL_SDK_VERSION := system_current
endif
endif
diff --git a/core/main.mk b/core/main.mk
index 9d2b7cb..f8b06b9 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -1173,13 +1173,13 @@
# Verify the artifact path requirements made by included products.
is_asan := $(if $(filter address,$(SANITIZE_TARGET)),true)
ifneq (true,$(or $(is_asan),$(DISABLE_ARTIFACT_PATH_REQUIREMENTS)))
- # Fakes don't get installed, host files are irrelevant, and NDK stubs aren't installed to device.
- static_whitelist_patterns := $(TARGET_OUT_FAKE)/% $(HOST_OUT)/% $(SOONG_OUT_DIR)/ndk/%
+ # Fakes don't get installed, and NDK stubs aren't installed to device.
+ static_whitelist_patterns := $(TARGET_OUT_FAKE)/% $(SOONG_OUT_DIR)/ndk/%
# RROs become REQUIRED by the source module, but are always placed on the vendor partition.
static_whitelist_patterns += %__auto_generated_rro_product.apk
static_whitelist_patterns += %__auto_generated_rro_vendor.apk
# Auto-included targets are not considered
- static_whitelist_patterns += $(call module-installed-files,$(call auto-included-modules))
+ static_whitelist_patterns += $(call product-installed-files,)
# $(PRODUCT_OUT)/apex is where shared libraries in APEXes get installed.
# The path can be considered as a fake path, as the shared libraries
# are installed there just to have symbols files for them under
diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk
index 190a7ed..7853890 100644
--- a/core/soong_cc_prebuilt.mk
+++ b/core/soong_cc_prebuilt.mk
@@ -128,10 +128,11 @@
$(same_vndk_variants_stamp): PRIVATE_TOOLS_PREFIX := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)TOOLS_PREFIX)
$(same_vndk_variants_stamp): $(my_core_shared_lib) $(LOCAL_PREBUILT_MODULE_FILE)
- $(call verify-vndk-libs-identical,\
- $(PRIVATE_CORE_VARIANT),\
- $(PRIVATE_VENDOR_VARIANT),\
- $(PRIVATE_TOOLS_PREFIX))
+ $(call verify-vndk-libs-identical,\
+ $(PRIVATE_CORE_VARIANT),\
+ $(PRIVATE_VENDOR_VARIANT),\
+ $(PRIVATE_TOOLS_PREFIX))
+ touch $@
$(LOCAL_BUILT_MODULE): $(same_vndk_variants_stamp)
endif
diff --git a/core/tasks/vts-core-tests.mk b/core/tasks/vts-core-tests.mk
index 08663c2..4e83de5 100644
--- a/core/tasks/vts-core-tests.mk
+++ b/core/tasks/vts-core-tests.mk
@@ -21,8 +21,28 @@
# Some repo may not include vts project.
-include test/vts/tools/build/tasks/framework/vts_for_core_suite.mk
+# Copy kernel test modules to testcases directories
+kernel_test_host_out := $(HOST_OUT_TESTCASES)/vts_kernel_tests
+kernel_test_vts_out := $(HOST_OUT)/$(test_suite_name)/android-$(test_suite_name)/testcases/vts_kernel_tests
+kernel_test_modules := \
+ $(kselftest_modules) \
+ ltp \
+ $(ltp_packages)
+
+kernel_test_copy_pairs := \
+ $(call target-native-copy-pairs,$(kernel_test_modules),$(kernel_test_vts_out)) \
+ $(call target-native-copy-pairs,$(kernel_test_modules),$(kernel_test_host_out))
+
+copy_kernel_tests := $(call copy-many-files,$(kernel_test_copy_pairs))
+
+# PHONY target to be used to build and test `vts_kernel_tests` without building full vts
+.PHONY: vts_kernel_tests
+vts_kernel_tests: $(copy_kernel_tests)
+
include $(BUILD_SYSTEM)/tasks/tools/compatibility.mk
+$(compatibility_zip): $(copy_kernel_tests)
+
.PHONY: vts
$(compatibility_zip): $(vts_test_artifact_paths)
vts: $(compatibility_zip)
diff --git a/target/board/generic_arm64/BoardConfig.mk b/target/board/generic_arm64/BoardConfig.mk
index 91d5692..d793c38 100644
--- a/target/board/generic_arm64/BoardConfig.mk
+++ b/target/board/generic_arm64/BoardConfig.mk
@@ -54,6 +54,8 @@
include build/make/target/board/BoardConfigGsiCommon.mk
+BOARD_EXT4_SHARE_DUP_BLOCKS := true
+
TARGET_NO_KERNEL := false
TARGET_NO_VENDOR_BOOT := true
BOARD_USES_RECOVERY_AS_BOOT := true
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 536d47f..df57e37 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -335,8 +335,11 @@
_RO_PRODUCT_RESOLVE_PROPS = ["ro.product.brand", "ro.product.device",
"ro.product.manufacturer", "ro.product.model",
"ro.product.name"]
- _RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER = ["product", "odm", "vendor",
- "system_ext", "system"]
+ _RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_CURRENT = [
+ "product", "odm", "vendor", "system_ext", "system"]
+ _RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_ANDROID_10 = [
+ "product", "product_services", "odm", "vendor", "system"]
+ _RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_LEGACY = []
def __init__(self, info_dict, oem_dicts=None):
"""Initializes a BuildInfo instance with the given dicts.
@@ -446,16 +449,16 @@
if prop_val:
return prop_val
+ default_source_order = self._GetRoProductPropsDefaultSourceOrder()
source_order_val = self.info_dict.get("build.prop", {}).get(
"ro.product.property_source_order")
if source_order_val:
source_order = source_order_val.split(",")
else:
- source_order = BuildInfo._RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER
+ source_order = default_source_order
# Check that all sources in ro.product.property_source_order are valid
- if any([x not in BuildInfo._RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER
- for x in source_order]):
+ if any([x not in default_source_order for x in source_order]):
raise ExternalError(
"Invalid ro.product.property_source_order '{}'".format(source_order))
@@ -469,6 +472,27 @@
raise ExternalError("couldn't resolve {}".format(prop))
+ def _GetRoProductPropsDefaultSourceOrder(self):
+ # NOTE: refer to CDDs and android.os.Build.VERSION for the definition and
+ # values of these properties for each Android release.
+ android_codename = self.info_dict.get("build.prop", {}).get(
+ "ro.build.version.codename")
+ if android_codename == "REL":
+ android_version = self.info_dict.get("build.prop", {}).get(
+ "ro.build.version.release")
+ if android_version == "10":
+ return BuildInfo._RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_ANDROID_10
+ # NOTE: float() conversion of android_version will have rounding error.
+ # We are checking for "9" or less, and using "< 10" is well outside of
+ # possible floating point rounding.
+ try:
+ android_version_val = float(android_version)
+ except ValueError:
+ android_version_val = 0
+ if android_version_val < 10:
+ return BuildInfo._RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_LEGACY
+ return BuildInfo._RO_PRODUCT_PROPS_DEFAULT_SOURCE_ORDER_CURRENT
+
def GetOemProperty(self, key):
if self.oem_props is not None and key in self.oem_props:
return self.oem_dicts[0][key]
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 2126d11..92a46a2 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -318,7 +318,7 @@
common.RunAndCheckOutput(cmd)
with open(out_signature_size_file) as f:
signature_size = f.read().rstrip()
- logger.info("% outputs the maximum signature size: %", cmd[0],
+ logger.info("%s outputs the maximum signature size: %s", cmd[0],
signature_size)
return int(signature_size)
diff --git a/tools/releasetools/test_common.py b/tools/releasetools/test_common.py
index 7ba0d1a..029d46f 100644
--- a/tools/releasetools/test_common.py
+++ b/tools/releasetools/test_common.py
@@ -107,6 +107,51 @@
},
]
+ TEST_INFO_DICT_PROPERTY_SOURCE_ORDER = {
+ 'build.prop' : {
+ 'ro.build.fingerprint' : 'build-fingerprint',
+ 'ro.product.property_source_order' :
+ 'product,odm,vendor,system_ext,system',
+ },
+ 'system.build.prop' : {
+ 'ro.product.system.device' : 'system-product-device',
+ },
+ 'vendor.build.prop' : {
+ 'ro.product.vendor.device' : 'vendor-product-device',
+ },
+ }
+
+ TEST_INFO_DICT_PROPERTY_SOURCE_ORDER_ANDROID_10 = {
+ 'build.prop' : {
+ 'ro.build.fingerprint' : 'build-fingerprint',
+ 'ro.product.property_source_order' :
+ 'product,product_services,odm,vendor,system',
+ 'ro.build.version.release' : '10',
+ 'ro.build.version.codename' : 'REL',
+ },
+ 'system.build.prop' : {
+ 'ro.product.system.device' : 'system-product-device',
+ },
+ 'vendor.build.prop' : {
+ 'ro.product.vendor.device' : 'vendor-product-device',
+ },
+ }
+
+ TEST_INFO_DICT_PROPERTY_SOURCE_ORDER_ANDROID_9 = {
+ 'build.prop' : {
+ 'ro.product.device' : 'product-device',
+ 'ro.build.fingerprint' : 'build-fingerprint',
+ 'ro.build.version.release' : '9',
+ 'ro.build.version.codename' : 'REL',
+ },
+ 'system.build.prop' : {
+ 'ro.product.system.device' : 'system-product-device',
+ },
+ 'vendor.build.prop' : {
+ 'ro.product.vendor.device' : 'vendor-product-device',
+ },
+ }
+
def test_init(self):
target_info = common.BuildInfo(self.TEST_INFO_DICT, None)
self.assertEqual('product-device', target_info.device)
@@ -253,6 +298,41 @@
],
script_writer.lines)
+ def test_ResolveRoProductProperty_FromVendor(self):
+ info_dict = copy.deepcopy(self.TEST_INFO_DICT_PROPERTY_SOURCE_ORDER)
+ info = common.BuildInfo(info_dict, None)
+ self.assertEqual('vendor-product-device',
+ info.GetBuildProp('ro.product.device'))
+
+ def test_ResolveRoProductProperty_FromSystem(self):
+ info_dict = copy.deepcopy(self.TEST_INFO_DICT_PROPERTY_SOURCE_ORDER)
+ del info_dict['vendor.build.prop']['ro.product.vendor.device']
+ info = common.BuildInfo(info_dict, None)
+ self.assertEqual('system-product-device',
+ info.GetBuildProp('ro.product.device'))
+
+ def test_ResolveRoProductProperty_InvalidPropertySearchOrder(self):
+ info_dict = copy.deepcopy(self.TEST_INFO_DICT_PROPERTY_SOURCE_ORDER)
+ info_dict['build.prop']['ro.product.property_source_order'] = 'bad-source'
+ with self.assertRaisesRegexp(common.ExternalError,
+ 'Invalid ro.product.property_source_order'):
+ info = common.BuildInfo(info_dict, None)
+ info.GetBuildProp('ro.product.device')
+
+ def test_ResolveRoProductProperty_Android10PropertySearchOrder(self):
+ info_dict = copy.deepcopy(
+ self.TEST_INFO_DICT_PROPERTY_SOURCE_ORDER_ANDROID_10)
+ info = common.BuildInfo(info_dict, None)
+ self.assertEqual('vendor-product-device',
+ info.GetBuildProp('ro.product.device'))
+
+ def test_ResolveRoProductProperty_Android9PropertySearchOrder(self):
+ info_dict = copy.deepcopy(
+ self.TEST_INFO_DICT_PROPERTY_SOURCE_ORDER_ANDROID_9)
+ info = common.BuildInfo(info_dict, None)
+ self.assertEqual('product-device',
+ info.GetBuildProp('ro.product.device'))
+
class CommonZipTest(test_utils.ReleaseToolsTestCase):