Merge "Include /product_services software in NOTICE."
diff --git a/core/Makefile b/core/Makefile
index 8bb905e..7d28c54 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -2594,7 +2594,15 @@
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
endif
-endif
+endif # BOARD_PREBUILT_DTBOIMAGE
+
+# Returns a list of image targets corresponding to the given list of partitions. For example, it
+# returns "$(INSTALLED_PRODUCTIMAGE_TARGET)" for "product", or "$(INSTALLED_SYSTEMIMAGE_TARGET)
+# $(INSTALLED_VENDORIMAGE_TARGET)" for "system vendor".
+# (1): list of partitions like "system", "vendor" or "system product product_services".
+define images-for-partitions
+$(strip $(foreach item,$(1),$(INSTALLED_$(call to-upper,$(item))IMAGE_TARGET)))
+endef
# -----------------------------------------------------------------
# vbmeta image
@@ -2611,8 +2619,9 @@
BOARD_AVB_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
endif
-INTERNAL_AVB_SIGNING_ARGS := \
- --algorithm $(BOARD_AVB_ALGORITHM) --key $(BOARD_AVB_KEY_PATH)
+ifndef BOARD_BOOTIMAGE_PARTITION_SIZE
+$(error BOARD_BOOTIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
+endif
BOOT_FOOTER_ARGS := BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS
DTBO_FOOTER_ARGS := BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS
@@ -2623,11 +2632,11 @@
PRODUCT_SERVICES_FOOTER_ARGS := BOARD_AVB_PRODUCT_SERVICES_ADD_HASHTREE_FOOTER_ARGS
ODM_FOOTER_ARGS := BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
-# Check and set required build variables for a chain partition.
-# $(1): the partition to enable AVB chain, e.g., BOOT or SYSTEM.
-define check-and-set-avb-chain-args
-$(eval PART := $(1))
-$(eval part=$(call to-lower,$(PART)))
+# Helper function that checks and sets required build variables for an AVB chained partition.
+# $(1): the partition to enable AVB chain, e.g., boot or system.
+define _check-and-set-avb-chain-args
+$(eval part := $(1))
+$(eval PART=$(call to-upper,$(part)))
$(eval _key_path := BOARD_AVB_$(PART)_KEY_PATH)
$(eval _signing_algorithm := BOARD_AVB_$(PART)_ALGORITHM)
@@ -2651,77 +2660,46 @@
$(eval $($(_footer_args)) += --rollback_index $($(_rollback_index)))
endef
+# Checks and sets the required build variables for an AVB partition. The partition will be
+# configured as a chained partition, if BOARD_AVB_<partition>_KEY_PATH is defined. Otherwise the
+# image descriptor will be included into vbmeta.img.
+# $(1): Partition name, e.g. boot or system.
+define check-and-set-avb-args
+$(if $(BOARD_AVB_$(call to-upper,$(1))_KEY_PATH),\
+ $(call _check-and-set-avb-chain-args,$(1)),\
+ $(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
+ --include_descriptors_from_image $(call images-for-partitions,$(1))))
+endef
+
ifdef INSTALLED_BOOTIMAGE_TARGET
-ifdef BOARD_AVB_BOOT_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,BOOT))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_BOOTIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,boot))
endif
-ifdef BOARD_AVB_SYSTEM_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,SYSTEM))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_SYSTEMIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,system))
ifdef INSTALLED_VENDORIMAGE_TARGET
-ifdef BOARD_AVB_VENDOR_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,VENDOR))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_VENDORIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,vendor))
endif
ifdef INSTALLED_PRODUCTIMAGE_TARGET
-ifdef BOARD_AVB_PRODUCT_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,PRODUCT))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_PRODUCTIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,product))
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
+$(eval $(call check-and-set-avb-args,product_services))
endif
ifdef INSTALLED_ODMIMAGE_TARGET
-ifdef BOARD_AVB_ODM_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,ODM))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_ODMIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,odm))
endif
ifdef INSTALLED_DTBOIMAGE_TARGET
-ifdef BOARD_AVB_DTBO_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,DTBO))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_DTBOIMAGE_TARGET)
-endif
+$(eval $(call check-and-set-avb-args,dtbo))
endif
ifdef INSTALLED_RECOVERYIMAGE_TARGET
-ifdef BOARD_AVB_RECOVERY_KEY_PATH
-$(eval $(call check-and-set-avb-chain-args,RECOVERY))
-else
-INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
- --include_descriptors_from_image $(INSTALLED_RECOVERYIMAGE_TARGET)
+$(eval $(call check-and-set-avb-args,recovery))
endif
-endif
-
-BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
# Add kernel cmdline descriptor for kernel to mount system.img as root with
# dm-verity. This works when system.img is either chained or not-chained:
@@ -2733,6 +2711,8 @@
BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS += --setup_as_rootfs_from_kernel
endif
+BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
+
ifdef BOARD_AVB_ROLLBACK_INDEX
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --rollback_index $(BOARD_AVB_ROLLBACK_INDEX)
endif
@@ -2741,10 +2721,6 @@
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --set_hashtree_disabled_flag
endif
-ifndef BOARD_BOOTIMAGE_PARTITION_SIZE
- $(error BOARD_BOOTIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
-endif
-
# $(1): the directory to extract public keys to
define extract-avb-chain-public-keys
$(if $(BOARD_AVB_BOOT_KEY_PATH),\
@@ -2779,13 +2755,16 @@
$(call extract-avb-chain-public-keys, $(AVB_CHAIN_KEY_DIR))
$(hide) $(AVBTOOL) make_vbmeta_image \
$(INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS) \
- $(INTERNAL_AVB_SIGNING_ARGS) \
+ $(PRIVATE_AVB_VBMETA_SIGNING_ARGS) \
$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) \
--output $@
$(hide) rm -rf $(AVB_CHAIN_KEY_DIR)
endef
INSTALLED_VBMETAIMAGE_TARGET := $(BUILT_VBMETAIMAGE_TARGET)
+$(INSTALLED_VBMETAIMAGE_TARGET): PRIVATE_AVB_VBMETA_SIGNING_ARGS := \
+ --algorithm $(BOARD_AVB_ALGORITHM) --key $(BOARD_AVB_KEY_PATH)
+
$(INSTALLED_VBMETAIMAGE_TARGET): \
$(AVBTOOL) \
$(INSTALLED_BOOTIMAGE_TARGET) \
@@ -2816,14 +2795,6 @@
# -----------------------------------------------------------------
# super partition image
-# Returns a list of image targets corresponding to the given list of partitions. For example, it
-# returns "$(INSTALLED_PRODUCTIMAGE_TARGET)" for "product", or "$(INSTALLED_SYSTEMIMAGE_TARGET)
-# $(INSTALLED_VENDORIMAGE_TARGET)" for "system vendor".
-# (1): list of partitions like "system", "vendor" or "system product product_services".
-define images-for-partitions
-$(strip $(foreach item,$(1),$(INSTALLED_$(call to-upper,$(item))IMAGE_TARGET)))
-endef
-
# (1): list of items like "system", "vendor", "product", "product_services"
# return: map each item into a command ( wrapped in $$() ) that reads the size
define read-size-of-partitions
diff --git a/core/apidiff.mk b/core/apidiff.mk
index 23da624..8887ea4 100644
--- a/core/apidiff.mk
+++ b/core/apidiff.mk
@@ -64,8 +64,8 @@
_module_name :=
endif
else
- LOCAL_JAVA_LIBRARIES := core-oj core-libart ext framework $(LOCAL_JAVA_LIBRARIES)
- $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, core-oj):$(call java-lib-files, core-libart)
+ LOCAL_JAVA_LIBRARIES := core-oj core-libart core-simple ext framework $(LOCAL_JAVA_LIBRARIES)
+ $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, core-oj):$(call java-lib-files, core-libart):$(call java-lib-files, core-simple)
endif # LOCAL_SDK_VERSION
LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES))
diff --git a/core/binary.mk b/core/binary.mk
index a28561c..c454e4a 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -1450,6 +1450,11 @@
my_warn_types :=
my_allowed_types := native:vendor native:vndk
endif
+else ifneq ($(filter $(TARGET_RECOVERY_OUT)/%,$(LOCAL_MODULE_PATH)),)
+my_link_type := native:recovery
+my_warn_types :=
+# TODO(b/113303515) remove native:platform and my_allowed_ndk_types
+my_allowed_types := native:recovery native:platform $(my_allowed_ndk_types)
else
my_link_type := native:platform
my_warn_types := $(my_warn_ndk_types)
@@ -1737,7 +1742,7 @@
# Disable clang-tidy if clang is disabled.
my_tidy_enabled := false
else
- tidy_only: $(cpp_objects) $(c_objects)
+ tidy_only: $(cpp_objects) $(c_objects) $(gen_c_objects) $(gen_cpp_objects)
# Set up global default checks
my_tidy_checks := $(WITH_TIDY_CHECKS)
ifeq ($(my_tidy_checks),)
@@ -1776,6 +1781,15 @@
my_tidy_checks := $(subst $(space),,$(my_tidy_checks))
+# Add dependency of clang-tidy and clang-tidy.sh
+ifneq ($(my_tidy_checks),)
+ my_clang_tidy_programs := $(PATH_TO_CLANG_TIDY) $(PATH_TO_CLANG_TIDY_SHELL)
+ $(cpp_objects): $(intermediates)/%.o: $(my_clang_tidy_programs)
+ $(c_objects): $(intermediates)/%.o: $(my_clang_tidy_programs)
+ $(gen_cpp_objects): $(intermediates)/%.o: $(my_clang_tidy_programs)
+ $(gen_c_objects): $(intermediates)/%.o: $(my_clang_tidy_programs)
+endif
+
# Move -l* entries from ldflags to ldlibs, and everything else to ldflags
my_ldlib_flags := $(my_ldflags) $(my_ldlibs)
my_ldlibs := $(filter -l%,$(my_ldlib_flags))
diff --git a/core/clang/tidy.mk b/core/clang/tidy.mk
index 36c6931..868f7bc 100644
--- a/core/clang/tidy.mk
+++ b/core/clang/tidy.mk
@@ -14,19 +14,6 @@
# 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/combo/HOST_darwin-x86.mk b/core/combo/HOST_darwin-x86.mk
deleted file mode 100644
index 9a55cb5..0000000
--- a/core/combo/HOST_darwin-x86.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Copyright (C) 2006 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.
-#
-
-# Configuration for Darwin (Mac OS X) on x86.
-# Included by combo/select.mk
-
-define $(combo_var_prefix)transform-shared-lib-to-toc
-$(call _gen_toc_command_for_macho,$(1),$(2))
-endef
-
-$(combo_2nd_arch_prefix)HOST_GLOBAL_ARFLAGS := cqs
-
-############################################################
-## Macros after this line are shared by the 64-bit config.
-
-HOST_CUSTOM_LD_COMMAND := true
-
-define transform-host-o-to-shared-lib-inner
-$(hide) $(PRIVATE_CXX) \
- -dynamiclib -single_module -read_only_relocs suppress \
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(PRIVATE_HOST_GLOBAL_LDFLAGS) \
- ) \
- $(PRIVATE_ALL_OBJECTS) \
- $(addprefix -force_load , $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
- $(PRIVATE_ALL_SHARED_LIBRARIES) \
- $(PRIVATE_ALL_STATIC_LIBRARIES) \
- $(PRIVATE_LDLIBS) \
- -o $@ \
- -install_name @rpath/$(notdir $@) \
- -Wl,-rpath,@loader_path/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
- -Wl,-rpath,@loader_path/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
- $(PRIVATE_LDFLAGS)
-endef
-
-define transform-host-o-to-executable-inner
-$(hide) $(PRIVATE_CXX) \
- $(foreach path,$(PRIVATE_RPATHS), \
- -Wl,-rpath,@loader_path/$(path)) \
- -o $@ \
- -Wl,-headerpad_max_install_names \
- $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(PRIVATE_HOST_GLOBAL_LDFLAGS) \
- ) \
- $(PRIVATE_ALL_SHARED_LIBRARIES) \
- $(PRIVATE_ALL_OBJECTS) \
- $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \
- $(PRIVATE_ALL_STATIC_LIBRARIES) \
- $(PRIVATE_LDFLAGS) \
- $(PRIVATE_LDLIBS)
-endef
-
-# $(1): The file to check
-define get-file-size
-stat -f "%z" $(1)
-endef
diff --git a/core/combo/HOST_darwin-x86_64.mk b/core/combo/HOST_darwin-x86_64.mk
index 6cca167..07f8d9f 100644
--- a/core/combo/HOST_darwin-x86_64.mk
+++ b/core/combo/HOST_darwin-x86_64.mk
@@ -23,7 +23,44 @@
HOST_GLOBAL_ARFLAGS := cqs
-# We Reuse the following functions with the same name from HOST_darwin-x86.mk:
-# transform-host-o-to-shared-lib-inner
-# transform-host-o-to-executable-inner
-# get-file-size
+HOST_CUSTOM_LD_COMMAND := true
+
+define transform-host-o-to-shared-lib-inner
+$(hide) $(PRIVATE_CXX) \
+ -dynamiclib -single_module -read_only_relocs suppress \
+ $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
+ $(PRIVATE_HOST_GLOBAL_LDFLAGS) \
+ ) \
+ $(PRIVATE_ALL_OBJECTS) \
+ $(addprefix -force_load , $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ $(PRIVATE_ALL_SHARED_LIBRARIES) \
+ $(PRIVATE_ALL_STATIC_LIBRARIES) \
+ $(PRIVATE_LDLIBS) \
+ -o $@ \
+ -install_name @rpath/$(notdir $@) \
+ -Wl,-rpath,@loader_path/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
+ -Wl,-rpath,@loader_path/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
+ $(PRIVATE_LDFLAGS)
+endef
+
+define transform-host-o-to-executable-inner
+$(hide) $(PRIVATE_CXX) \
+ $(foreach path,$(PRIVATE_RPATHS), \
+ -Wl,-rpath,@loader_path/$(path)) \
+ -o $@ \
+ -Wl,-headerpad_max_install_names \
+ $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
+ $(PRIVATE_HOST_GLOBAL_LDFLAGS) \
+ ) \
+ $(PRIVATE_ALL_SHARED_LIBRARIES) \
+ $(PRIVATE_ALL_OBJECTS) \
+ $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \
+ $(PRIVATE_ALL_STATIC_LIBRARIES) \
+ $(PRIVATE_LDFLAGS) \
+ $(PRIVATE_LDLIBS)
+endef
+
+# $(1): The file to check
+define get-file-size
+stat -f "%z" $(1)
+endef
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 333e825..9ef2570 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -370,6 +370,11 @@
endif
endif
+# If local module needs HWASAN, add compiler flags.
+ifneq ($(filter hwaddress,$(my_sanitize)),)
+ my_cflags += $(HWADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
+endif
+
# Use minimal diagnostics when integer overflow is enabled; never do it for HOST or AUX modules
ifeq ($(LOCAL_IS_HOST_MODULE)$(LOCAL_IS_AUX_MODULE),)
# Pre-emptively add UBSAN minimal runtime incase a static library dependency requires it
diff --git a/core/definitions.mk b/core/definitions.mk
index 80a6312..3d9c140 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -105,8 +105,6 @@
# All tests that should be skipped in presubmit check.
ALL_DISABLED_PRESUBMIT_TESTS :=
-sanitize_tidy_cflags = $(filter-out $(CLANG_TIDY_UNKNOWN_CFLAGS),$1)
-
###########################################################
## Debugging; prints a variable list to stdout
###########################################################
@@ -1252,10 +1250,16 @@
$(PRIVATE_CPPFLAGS_NO_OVERRIDE)
endef
+# PATH_TO_CLANG_TIDY_SHELL is defined in build/soong
+define call-clang-tidy
+CLANG_TIDY=$(PATH_TO_CLANG_TIDY) \
+ $(PATH_TO_CLANG_TIDY_SHELL) \
+ $(PRIVATE_TIDY_FLAGS) \
+ -checks=$(PRIVATE_TIDY_CHECKS)
+endef
+
define clang-tidy-cpp
-$(hide) $(PATH_TO_CLANG_TIDY) $(PRIVATE_TIDY_FLAGS) \
- -checks=$(PRIVATE_TIDY_CHECKS) \
- $< -- $(call sanitize_tidy_cflags,$(transform-cpp-to-o-compiler-args))
+$(hide) $(call-clang-tidy) $< -- $(transform-cpp-to-o-compiler-args)
endef
ifneq (,$(filter 1 true,$(WITH_TIDY_ONLY)))
@@ -1301,9 +1305,7 @@
endef
define clang-tidy-c
-$(hide) $(PATH_TO_CLANG_TIDY) $(PRIVATE_TIDY_FLAGS) \
- -checks=$(PRIVATE_TIDY_CHECKS) \
- $< -- $(call sanitize_tidy_cflags,$(transform-c-to-o-compiler-args))
+$(hide) $(call-clang-tidy) $< -- $(transform-c-to-o-compiler-args)
endef
ifneq (,$(filter 1 true,$(WITH_TIDY_ONLY)))
@@ -1371,9 +1373,7 @@
endef
define clang-tidy-host-cpp
-$(hide) $(PATH_TO_CLANG_TIDY) $(PRIVATE_TIDY_FLAGS) \
- -checks=$(PRIVATE_TIDY_CHECKS) \
- $< -- $(call sanitize_tidy_cflags,$(transform-host-cpp-to-o-compiler-args))
+$(hide) $(call-clang-tidy) $< -- $(transform-host-cpp-to-o-compiler-args)
endef
ifneq (,$(filter 1 true,$(WITH_TIDY_ONLY)))
@@ -1423,9 +1423,7 @@
endef
define clang-tidy-host-c
-$(hide) $(PATH_TO_CLANG_TIDY) $(PRIVATE_TIDY_FLAGS) \
- -checks=$(PRIVATE_TIDY_CHECKS) \
- $< -- $(call sanitize_tidy_cflags,$(transform-host-c-to-o-compiler-args))
+$(hide) $(call-clang-tidy) $< -- $(transform-host-c-to-o-compiler-args)
endef
ifneq (,$(filter 1 true,$(WITH_TIDY_ONLY)))
diff --git a/core/dex_preopt_libart.mk b/core/dex_preopt_libart.mk
index ce060f2..504cc57 100644
--- a/core/dex_preopt_libart.mk
+++ b/core/dex_preopt_libart.mk
@@ -77,8 +77,7 @@
$(dir $(2))$(1)/$(notdir $(2))
endef
-# note we use core-libart.jar in place of core.jar for ART.
-LIBART_TARGET_BOOT_JARS := $(patsubst core, core-libart,$(DEXPREOPT_BOOT_JARS_MODULES))
+LIBART_TARGET_BOOT_JARS := $(DEXPREOPT_BOOT_JARS_MODULES)
LIBART_TARGET_BOOT_DEX_LOCATIONS := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),/$(DEXPREOPT_BOOT_JAR_DIR)/$(jar).jar)
LIBART_TARGET_BOOT_DEX_FILES := $(foreach jar,$(LIBART_TARGET_BOOT_JARS),$(call intermediates-dir-for,JAVA_LIBRARIES,$(jar),,COMMON)/javalib.jar)
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 39b9552..29f2f55 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -147,6 +147,11 @@
endif
endif
+ifeq ($(HOST_OS),darwin)
+ # Mac no longer supports 32-bit executables
+ HOST_2ND_ARCH :=
+endif
+
BUILD_ARCH := $(HOST_ARCH)
BUILD_2ND_ARCH := $(HOST_2ND_ARCH)
@@ -236,7 +241,7 @@
#################################################################
# Set up minimal BOOTCLASSPATH list of jars to build/execute
# java code with dalvikvm/art.
-TARGET_CORE_JARS := core-oj core-libart conscrypt okhttp bouncycastle apache-xml
+TARGET_CORE_JARS := core-oj core-libart core-simple conscrypt okhttp bouncycastle apache-xml
ifeq ($(EMMA_INSTRUMENT),true)
ifneq ($(EMMA_INSTRUMENT_STATIC),true)
# For instrumented build, if Jacoco is not being included statically
diff --git a/core/main.mk b/core/main.mk
index 25887d0..2b30616 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -922,7 +922,9 @@
define resolve-product-relative-paths
$(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),\
$(subst $(_product_path_placeholder),$(TARGET_COPY_OUT_PRODUCT),\
- $(foreach p,$(1),$(call append-path,$(PRODUCT_OUT),$(p)$(2)))))
+ $(subst $(_product_services_path_placeholder),$(TARGET_COPY_OUT_PRODUCT_SERVICES),\
+ $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),\
+ $(foreach p,$(1),$(call append-path,$(PRODUCT_OUT),$(p)$(2)))))))
endef
# Lists most of the files a particular product installs, including:
diff --git a/core/pdk_config.mk b/core/pdk_config.mk
index 57afa3f..4c582e3 100644
--- a/core/pdk_config.mk
+++ b/core/pdk_config.mk
@@ -22,6 +22,7 @@
target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates \
target/common/obj/JAVA_LIBRARIES/core-oj_intermediates \
target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
+ target/common/obj/JAVA_LIBRARIES/core-simple_intermediates \
target/common/obj/JAVA_LIBRARIES/legacy-test_intermediates \
target/common/obj/JAVA_LIBRARIES/legacy-android-test_intermediates \
target/common/obj/JAVA_LIBRARIES/ext_intermediates \
diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk
index 2f3c7a4..78da421 100644
--- a/core/prebuilt_internal.mk
+++ b/core/prebuilt_internal.mk
@@ -188,6 +188,8 @@
else
my_link_type := native:vendor
endif
+else ifneq ($(filter $(TARGET_RECOVERY_OUT)/%,$(LOCAL_MODULE_PATH)),)
+my_link_type := native:recovery
else
my_link_type := native:platform
endif
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 38c73fd..08f1791 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -237,6 +237,10 @@
makeint("boot_size")
makeint("fstab_version")
+ # We changed recovery.fstab path in Q, from ../RAMDISK/etc/recovery.fstab to
+ # ../RAMDISK/system/etc/recovery.fstab. LoadInfoDict() has to handle both
+ # cases, since it may load the info_dict from an old build (e.g. when
+ # generating incremental OTAs from that build).
system_root_image = d.get("system_root_image") == "true"
if d.get("no_recovery") != "true":
recovery_fstab_path = "RECOVERY/RAMDISK/system/etc/recovery.fstab"
diff --git a/tools/releasetools/test_common.py b/tools/releasetools/test_common.py
index 2a28db4..f56f368 100644
--- a/tools/releasetools/test_common.py
+++ b/tools/releasetools/test_common.py
@@ -14,6 +14,7 @@
# limitations under the License.
#
+import copy
import os
import subprocess
import tempfile
@@ -783,6 +784,120 @@
self.assertRaises(
AssertionError, common.GetAvbChainedPartitionArg, 'system', info_dict)
+ INFO_DICT_DEFAULT = {
+ 'recovery_api_version': 3,
+ 'fstab_version': 2,
+ 'system_root_image': 'true',
+ 'no_recovery' : 'true',
+ 'recovery_as_boot': 'true',
+ }
+
+ @staticmethod
+ def _test_LoadInfoDict_createTargetFiles(info_dict, fstab_path):
+ target_files = common.MakeTempFile(prefix='target_files-', suffix='.zip')
+ with zipfile.ZipFile(target_files, 'w') as target_files_zip:
+ info_values = ''.join(
+ ['{}={}\n'.format(k, v) for k, v in sorted(info_dict.iteritems())])
+ common.ZipWriteStr(target_files_zip, 'META/misc_info.txt', info_values)
+
+ FSTAB_TEMPLATE = "/dev/block/system {} ext4 ro,barrier=1 defaults"
+ if info_dict.get('system_root_image') == 'true':
+ fstab_values = FSTAB_TEMPLATE.format('/')
+ else:
+ fstab_values = FSTAB_TEMPLATE.format('/system')
+ common.ZipWriteStr(target_files_zip, fstab_path, fstab_values)
+ return target_files
+
+ def test_LoadInfoDict(self):
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ self.INFO_DICT_DEFAULT,
+ 'BOOT/RAMDISK/system/etc/recovery.fstab')
+ with zipfile.ZipFile(target_files, 'r') as target_files_zip:
+ loaded_dict = common.LoadInfoDict(target_files_zip)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_legacyRecoveryFstabPath(self):
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ self.INFO_DICT_DEFAULT,
+ 'BOOT/RAMDISK/etc/recovery.fstab')
+ with zipfile.ZipFile(target_files, 'r') as target_files_zip:
+ loaded_dict = common.LoadInfoDict(target_files_zip)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_dirInput(self):
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ self.INFO_DICT_DEFAULT,
+ 'BOOT/RAMDISK/system/etc/recovery.fstab')
+ unzipped = common.UnzipTemp(target_files)
+ loaded_dict = common.LoadInfoDict(unzipped)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_dirInput_legacyRecoveryFstabPath(self):
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ self.INFO_DICT_DEFAULT,
+ 'BOOT/RAMDISK/system/etc/recovery.fstab')
+ unzipped = common.UnzipTemp(target_files)
+ loaded_dict = common.LoadInfoDict(unzipped)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_systemRootImageFalse(self):
+ # Devices not using system-as-root nor recovery-as-boot. Non-A/B devices
+ # launched prior to P will likely have this config.
+ info_dict = copy.copy(self.INFO_DICT_DEFAULT)
+ del info_dict['no_recovery']
+ del info_dict['system_root_image']
+ del info_dict['recovery_as_boot']
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ info_dict,
+ 'RECOVERY/RAMDISK/system/etc/recovery.fstab')
+ with zipfile.ZipFile(target_files, 'r') as target_files_zip:
+ loaded_dict = common.LoadInfoDict(target_files_zip)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertNotIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_recoveryAsBootFalse(self):
+ # Devices using system-as-root, but with standalone recovery image. Non-A/B
+ # devices launched since P will likely have this config.
+ info_dict = copy.copy(self.INFO_DICT_DEFAULT)
+ del info_dict['no_recovery']
+ del info_dict['recovery_as_boot']
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ info_dict,
+ 'RECOVERY/RAMDISK/system/etc/recovery.fstab')
+ with zipfile.ZipFile(target_files, 'r') as target_files_zip:
+ loaded_dict = common.LoadInfoDict(target_files_zip)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIn('/', loaded_dict['fstab'])
+ self.assertIn('/system', loaded_dict['fstab'])
+
+ def test_LoadInfoDict_noRecoveryTrue(self):
+ # Device doesn't have a recovery partition at all.
+ info_dict = copy.copy(self.INFO_DICT_DEFAULT)
+ del info_dict['recovery_as_boot']
+ target_files = self._test_LoadInfoDict_createTargetFiles(
+ info_dict,
+ 'RECOVERY/RAMDISK/system/etc/recovery.fstab')
+ with zipfile.ZipFile(target_files, 'r') as target_files_zip:
+ loaded_dict = common.LoadInfoDict(target_files_zip)
+ self.assertEqual(3, loaded_dict['recovery_api_version'])
+ self.assertEqual(2, loaded_dict['fstab_version'])
+ self.assertIsNone(loaded_dict['fstab'])
+
class InstallRecoveryScriptFormatTest(unittest.TestCase):
"""Checks the format of install-recovery.sh.