Merge "A/B update: Replace the zip FileHeader mechanism for update package"
diff --git a/core/Makefile b/core/Makefile
index f11e3a6..7a6c9fc 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -2669,6 +2669,15 @@
endif
endif
+ifdef INSTALLED_PRODUCT_SERVICESIMAGE_TARGET
+ifdef BOARD_AVB_PRODUCT_SERVICES_KEY_PATH
+$(eval $(call check-and-set-avb-chain-args,PRODUCT_SERVICES))
+else
+INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
+ --include_descriptors_from_image $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET)
+endif
+endif
+
ifdef INSTALLED_ODMIMAGE_TARGET
ifdef BOARD_AVB_ODM_KEY_PATH
$(eval $(call check-and-set-avb-chain-args,ODM))
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 3a1f396..7d96224 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -573,6 +573,42 @@
$(eval my_compat_dist_config_$(suite) := ))
+# Auto-generate build config.
+ifneq (,$(LOCAL_FULL_TEST_CONFIG))
+ test_config := $(LOCAL_FULL_TEST_CONFIG)
+else ifneq (,$(LOCAL_TEST_CONFIG))
+ test_config := $(LOCAL_PATH)/$(LOCAL_TEST_CONFIG)
+else
+ test_config := $(wildcard $(LOCAL_PATH)/AndroidTest.xml)
+endif
+ifeq (,$(test_config))
+ ifneq (true,$(is_native))
+ is_instrumentation_test := true
+ ifeq (true, $(LOCAL_IS_HOST_MODULE))
+ is_instrumentation_test := false
+ endif
+ # If LOCAL_MODULE_CLASS is not APPS, it's certainly not an instrumentation
+ # test. However, some packages for test data also have LOCAL_MODULE_CLASS
+ # set to APPS. These will require flag LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG
+ # to disable auto-generating test config file.
+ ifneq (APPS, $(LOCAL_MODULE_CLASS))
+ is_instrumentation_test := false
+ endif
+ endif
+ # CTS modules can be used for test data, so test config files must be
+ # explicitly created using AndroidTest.xml
+ ifeq (,$(filter cts, $(LOCAL_COMPATIBILITY_SUITE)))
+ ifneq (true, $(LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG))
+ ifeq (true, $(filter true,$(is_native) $(is_instrumentation_test)))
+ include $(BUILD_SYSTEM)/autogen_test_config.mk
+ test_config := $(autogen_test_config_file)
+ autogen_test_config_file :=
+ endif
+ endif
+ endif
+endif
+is_instrumentation_test :=
+
# Make sure we only add the files once for multilib modules.
ifdef $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files
# Sync the auto_test_config value for multilib modules.
@@ -589,41 +625,6 @@
$(eval n := $(or $(word 2,$(p)),$(notdir $(word 1, $(p))))) \
$(foreach dir, $(call compatibility_suite_dirs,$(suite)), \
$(s):$(dir)/$(n)))))
- ifneq (,$(LOCAL_FULL_TEST_CONFIG))
- test_config := $(LOCAL_FULL_TEST_CONFIG)
- else ifneq (,$(LOCAL_TEST_CONFIG))
- test_config := $(LOCAL_PATH)/$(LOCAL_TEST_CONFIG)
- else
- test_config := $(wildcard $(LOCAL_PATH)/AndroidTest.xml)
- endif
- ifeq (,$(test_config))
- ifneq (true,$(is_native))
- is_instrumentation_test := true
- ifeq (true, $(LOCAL_IS_HOST_MODULE))
- is_instrumentation_test := false
- endif
- # If LOCAL_MODULE_CLASS is not APPS, it's certainly not an instrumentation
- # test. However, some packages for test data also have LOCAL_MODULE_CLASS
- # set to APPS. These will require flag LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG
- # to disable auto-generating test config file.
- ifneq (APPS, $(LOCAL_MODULE_CLASS))
- is_instrumentation_test := false
- endif
- endif
- # CTS modules can be used for test data, so test config files must be
- # explicitly created using AndroidTest.xml
- ifeq (,$(filter cts, $(LOCAL_COMPATIBILITY_SUITE)))
- ifneq (true, $(LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG))
- ifeq (true, $(filter true,$(is_native) $(is_instrumentation_test)))
- include $(BUILD_SYSTEM)/autogen_test_config.mk
- test_config := $(autogen_test_config_file)
- autogen_test_config_file :=
- endif
- endif
- endif
- endif
-
- is_instrumentation_test :=
ifneq (,$(test_config))
$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \
@@ -631,8 +632,6 @@
$(test_config):$(dir)/$(LOCAL_MODULE).config)))
endif
- test_config :=
-
ifneq (,$(wildcard $(LOCAL_PATH)/DynamicConfig.xml))
$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \
$(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \
@@ -647,19 +646,17 @@
endif
endif # $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files
-# HACK: pretend a soong LOCAL_FULL_TEST_CONFIG is autogenerated by copying it to
-# the location autogenerated test configs use and setting the flag in
+# HACK: pretend a soong LOCAL_FULL_TEST_CONFIG is autogenerated by setting the flag in
# module-info.json
-ifdef LOCAL_FULL_TEST_CONFIG
+# TODO: (b/113029686) Add explicit flag from Soong to determine if a test was
+# autogenerated.
+ifneq (,$(filter $(SOONG_OUT_DIR)%,$(LOCAL_FULL_TEST_CONFIG)))
ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK))
- my_test_config_file := $(dir $(LOCAL_BUILT_MODULE))$(LOCAL_MODULE).config
- $(eval $(call copy-one-file,$(LOCAL_FULL_TEST_CONFIG),$(my_test_config_file)))
- $(call add-dependency,$(LOCAL_BUILT_MODULE),$(my_test_config_file))
ALL_MODULES.$(my_register_name).auto_test_config := true
- my_test_config_file :=
endif
endif
+
ifneq ($(my_test_data_file_pairs),)
$(foreach pair, $(my_test_data_file_pairs), \
$(eval parts := $(subst :,$(space),$(pair))) \
@@ -771,6 +768,8 @@
ALL_MODULES.$(my_register_name).FOR_HOST_CROSS := $(my_host_cross)
ALL_MODULES.$(my_register_name).MODULE_NAME := $(LOCAL_MODULE)
ALL_MODULES.$(my_register_name).COMPATIBILITY_SUITES := $(LOCAL_COMPATIBILITY_SUITE)
+ALL_MODULES.$(my_register_name).TEST_CONFIG := $(test_config)
+test_config :=
INSTALLABLE_FILES.$(LOCAL_INSTALLED_MODULE).MODULE := $(my_register_name)
diff --git a/core/clang/tidy.mk b/core/clang/tidy.mk
index 868f7bc..36c6931 100644
--- a/core/clang/tidy.mk
+++ b/core/clang/tidy.mk
@@ -14,6 +14,19 @@
# limitations under the License.
#
+# clang-tidy doesn't recognize every flag that clang does. This is unlikely to
+# be a complete list, but we can populate this with the ones we know to avoid
+# issues with clang-diagnostic-unused-command-line-argument.
+# b/111885396: -flto affected header include directory;
+# -fsanitize and -fwhole-program-vtables need -flto.
+CLANG_TIDY_UNKNOWN_CFLAGS := \
+ -Wa,% \
+ -flto \
+ -flto=% \
+ -fsanitize=% \
+ -fsanitize-% \
+ -fwhole-program-vtables \
+
# Returns 2nd word of $(1) if $(2) has prefix of the 1st word of $(1).
define find_default_local_tidy_check2
$(if $(filter $(word 1,$(1))%,$(2)/),$(word 2,$(1)))
diff --git a/core/definitions.mk b/core/definitions.mk
index d36e7f0..4d2f5e6 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -105,7 +105,6 @@
# All tests that should be skipped in presubmit check.
ALL_DISABLED_PRESUBMIT_TESTS :=
-# CLANG_TIDY_UNKNOWN_CFLAGS is generated by build/soong.
sanitize_tidy_cflags = $(filter-out $(CLANG_TIDY_UNKNOWN_CFLAGS),$1)
###########################################################
diff --git a/core/dex_preopt.mk b/core/dex_preopt.mk
index a7caac1..8299988 100644
--- a/core/dex_preopt.mk
+++ b/core/dex_preopt.mk
@@ -21,7 +21,13 @@
# The default filter for which files go into the system_other image (if it is
# being used). To bundle everything one should set this to '%'
-SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/% product/app/% product/priv-app/%
+SYSTEM_OTHER_ODEX_FILTER ?= \
+ app/% \
+ priv-app/% \
+ product_services/app/% \
+ product_services/priv-app/% \
+ product/app/% \
+ product/priv-app/% \
# Method returning whether the install path $(1) should be for system_other.
# Under SANITIZE_LITE, we do not want system_other. Just put things under /data/asan.
diff --git a/core/envsetup.mk b/core/envsetup.mk
index a748f91..39b9552 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -370,7 +370,7 @@
else ifeq ($(filter product_services system/product_services,$(TARGET_COPY_OUT_PRODUCT_SERVICES)),)
$(error TARGET_COPY_OUT_PRODUCT_SERVICES must be either 'product_services' or 'system/product_services', seeing '$(TARGET_COPY_OUT_PRODUCT_SERVICES)'.)
endif
-PRODUCT_SERVICES_COPY_FILES := $(subst $(_product_services_path_placeholder),$(TARGET_COPY_OUT_PRODUCT_SERVICES),$(PRODUCT_SERVICES_COPY_FILES))
+PRODUCT_COPY_FILES := $(subst $(_product_services_path_placeholder),$(TARGET_COPY_OUT_PRODUCT_SERVICES),$(PRODUCT_COPY_FILES))
BOARD_USES_PRODUCT_SERVICESIMAGE :=
ifdef BOARD_PREBUILT_PRODUCT_SERVICESIMAGE
diff --git a/core/tasks/module-info.mk b/core/tasks/module-info.mk
index 38149d7..37e4831 100644
--- a/core/tasks/module-info.mk
+++ b/core/tasks/module-info.mk
@@ -14,6 +14,7 @@
'"compatibility_suites": [$(foreach w,$(sort $(ALL_MODULES.$(m).COMPATIBILITY_SUITES)),"$(w)", )], ' \
'"auto_test_config": [$(ALL_MODULES.$(m).auto_test_config)], ' \
'"module_name": ["$(ALL_MODULES.$(m).MODULE_NAME)"], ' \
+ '"test_config": [$(if $(ALL_MODULES.$(m).TEST_CONFIG),"$(ALL_MODULES.$(m).TEST_CONFIG)")], ' \
'},\n' \
) | sed -e 's/, *\]/]/g' -e 's/, *\}/ }/g' -e '$$s/,$$//' >> $@
$(hide) echo '}' >> $@
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index e543857..38c73fd 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -240,12 +240,28 @@
system_root_image = d.get("system_root_image") == "true"
if d.get("no_recovery") != "true":
recovery_fstab_path = "RECOVERY/RAMDISK/system/etc/recovery.fstab"
+ if isinstance(input_file, zipfile.ZipFile):
+ if recovery_fstab_path not in input_file.namelist():
+ recovery_fstab_path = "RECOVERY/RAMDISK/etc/recovery.fstab"
+ else:
+ path = os.path.join(input_file, *recovery_fstab_path.split("/"))
+ if not os.path.exists(path):
+ recovery_fstab_path = "RECOVERY/RAMDISK/etc/recovery.fstab"
d["fstab"] = LoadRecoveryFSTab(
read_helper, d["fstab_version"], recovery_fstab_path, system_root_image)
+
elif d.get("recovery_as_boot") == "true":
recovery_fstab_path = "BOOT/RAMDISK/system/etc/recovery.fstab"
+ if isinstance(input_file, zipfile.ZipFile):
+ if recovery_fstab_path not in input_file.namelist():
+ recovery_fstab_path = "BOOT/RAMDISK/etc/recovery.fstab"
+ else:
+ path = os.path.join(input_file, *recovery_fstab_path.split("/"))
+ if not os.path.exists(path):
+ recovery_fstab_path = "BOOT/RAMDISK/etc/recovery.fstab"
d["fstab"] = LoadRecoveryFSTab(
read_helper, d["fstab_version"], recovery_fstab_path, system_root_image)
+
else:
d["fstab"] = None