aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-11-11 21:14:39 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-11-11 21:14:39 +0000
commit9b789bbdb594d08c581e385928a729eb670a6301 (patch)
treee5c856e4cb7f1d0b1161c1f0c151dac848b7fd85
parenta3a9dec14cd9265df9abf9c61b13e24d5f1263d6 (diff)
parentafb0ff8fea3d8cfa6c44f7d7b62a4f71d62a88da (diff)
downloadbuild-android10-mainline-resolv-release.tar.gz
Snap for 6001391 from afb0ff8fea3d8cfa6c44f7d7b62a4f71d62a88da to qt-aml-resolv-releaseandroid-mainline-10.0.0_r8android10-mainline-resolv-release
Change-Id: Ife33beccd903b7a0124e86f57f538a2f60ce6c8a
-rw-r--r--CleanSpec.mk10
-rw-r--r--core/Makefile196
-rw-r--r--core/base_rules.mk2
-rw-r--r--core/clear_vars.mk1
-rw-r--r--core/config.mk11
-rw-r--r--core/config_sanitizers.mk4
-rw-r--r--core/cxx_stl_setup.mk2
-rw-r--r--core/definitions.mk8
-rw-r--r--core/dex_preopt_config.mk2
-rw-r--r--core/envsetup.mk8
-rw-r--r--core/java.mk2
-rw-r--r--core/java_common.mk3
-rw-r--r--core/local_systemsdk.mk14
-rw-r--r--core/main.mk85
-rw-r--r--core/notice_files.mk5
-rw-r--r--core/pdk_config.mk2
-rw-r--r--core/product-graph.mk61
-rw-r--r--core/product.mk9
-rw-r--r--core/product_config.mk12
-rw-r--r--core/soong_cc_prebuilt.mk9
-rw-r--r--core/soong_config.mk4
-rw-r--r--core/tasks/vndk.mk82
-rw-r--r--core/tasks/with-license.mk51
-rw-r--r--envsetup.sh21
-rw-r--r--target/product/aosp_arm64.mk3
-rw-r--r--target/product/aosp_x86_64.mk3
-rw-r--r--target/product/base_system.mk8
-rw-r--r--target/product/emulator.mk2
-rw-r--r--target/product/emulator_vendor.mk15
-rw-r--r--target/product/gsi/Android.mk25
-rw-r--r--target/product/gsi/current.txt15
-rw-r--r--target/product/gsi_arm64.mk3
-rw-r--r--target/product/gsi_release.mk16
-rw-r--r--target/product/mainline_arm64.mk18
-rw-r--r--target/product/mainline_system.mk7
-rw-r--r--target/product/mainline_system_arm64.mk10
-rw-r--r--target/product/mainline_system_x86.mk8
-rw-r--r--target/product/mainline_system_x86_arm.mk8
-rw-r--r--target/product/sdk_phone_x86_64.mk3
-rw-r--r--target/product/telephony_system.mk1
-rw-r--r--tools/Android.bp26
-rw-r--r--tools/releasetools/Android.bp14
-rw-r--r--tools/releasetools/check_partition_sizes.py276
-rwxr-xr-xtools/releasetools/ota_from_target_files.py4
-rw-r--r--tools/releasetools/test_check_partition_sizes.py128
45 files changed, 788 insertions, 409 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 949e88dc08..6c5ecd901d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -689,6 +689,16 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/*app/*/oat)
# that they live in the ART APEX (b/142944799).
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/*.jar)
+# Remove symlinks for VNDK apexes
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/vndk-*)
+
+# Switch to symlinks for VNDK libs
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/vndk-*)
+
+# Remove Android Core Library artifacts from the system partition
+# again, as the original change removing them was reverted.
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/*.jar)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/core/Makefile b/core/Makefile
index 9c60855d4a..3a0c0cd1dd 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -3616,36 +3616,6 @@ ifeq (,$(TARGET_BUILD_APPS))
ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION))
-# (1): list of items like "system", "vendor", "product", "system_ext"
-# return: map each item into a command ( wrapped in $$() ) that reads the size
-define read-size-of-partitions
-$(foreach image,$(call images-for-partitions,$(1)),$$($(SPARSE_IMG) --get_partition_size $(image)))
-endef
-
-# round result to BOARD_SUPER_PARTITION_ALIGNMENT
-#$(1): the calculated size
-ifeq (,$(BOARD_SUPER_PARTITION_ALIGNMENT))
-define round-partition-size
-$(1)
-endef
-else
-define round-partition-size
-$$((($(1)+$(BOARD_SUPER_PARTITION_ALIGNMENT)-1)/$(BOARD_SUPER_PARTITION_ALIGNMENT)*$(BOARD_SUPER_PARTITION_ALIGNMENT)))
-endef
-endif
-
-define super-slot-suffix
-$(if $(filter true,$(AB_OTA_UPDATER)),$(if $(filter true,$(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS)),,_a))
-endef
-
-ifndef BOARD_SUPER_PARTITION_WARN_LIMIT
-BOARD_SUPER_PARTITION_WARN_LIMIT := $$(($(BOARD_SUPER_PARTITION_SIZE) * 95 / 100))
-endif
-
-ifndef BOARD_SUPER_PARTITION_ERROR_LIMIT
-BOARD_SUPER_PARTITION_ERROR_LIMIT := $(BOARD_SUPER_PARTITION_SIZE)
-endif
-
droid_targets: check-all-partition-sizes
.PHONY: check-all-partition-sizes check-all-partition-sizes-nodeps
@@ -3654,103 +3624,28 @@ check_all_partition_sizes_file := $(call intermediates-dir-for,PACKAGING,check-a
check-all-partition-sizes: $(check_all_partition_sizes_file)
-# Add image dependencies so that generated_*_image_info.txt are written before checking.
$(check_all_partition_sizes_file): \
- $(SPARSE_IMG) \
+ $(CHECK_PARTITION_SIZES) \
$(call images-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))
-ifeq ($(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS),true)
-# Check sum(super partition block devices) == super partition
-# Non-retrofit devices already defines BOARD_SUPER_PARTITION_SUPER_DEVICE_SIZE = BOARD_SUPER_PARTITION_SIZE
-define check-super-partition-size
- size_list="$(foreach device,$(call to-upper,$(BOARD_SUPER_PARTITION_BLOCK_DEVICES)),$(BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE))"; \
- sum_sizes_expr=$$(sed -e 's/ /+/g' <<< "$${size_list}"); \
- max_size_expr="$(BOARD_SUPER_PARTITION_SIZE)"; \
- if [ $$(( $${sum_sizes_expr} )) -ne $$(( $${max_size_expr} )) ]; then \
- echo "The sum of super partition block device sizes is not equal to BOARD_SUPER_PARTITION_SIZE:"; \
- echo $${sum_sizes_expr} '!=' $${max_size_expr}; \
- exit 1; \
- else \
- echo "The sum of super partition block device sizes is equal to BOARD_SUPER_PARTITION_SIZE:"; \
- echo $${sum_sizes_expr} '==' $${max_size_expr}; \
- fi
-endef
-endif
-
-# $(1): human-readable max size string
-# $(2): max size expression
-# $(3): list of partition names
-# $(4): human-readable warn size string
-# $(5): warn size expression
-# $(6): human readable error size string
-# $(7): error size expression
-define check-sum-of-partition-sizes
- partition_size_list="$$(for i in $(call read-size-of-partitions,$(3)); do \
- echo $(call round-partition-size,$${i}); \
- done)"; \
- sum_sizes_expr=$$(tr '\n' '+' <<< "$${partition_size_list}" | sed 's/+$$//'); \
- if [ $$(( $${sum_sizes_expr} )) -gt $$(( $(2) )) ]; then \
- echo "The sum of sizes of [$(strip $(3))] is larger than $(strip $(1)):"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' "$(2)" '==' $$(( $(2) )); \
- exit 1; \
- else \
- if [[ ! -z "$(7)" ]] && [ $$(( $${sum_sizes_expr} )) -gt $$(( $(7) )) ]; then \
- echo "!!!! ERROR !!!! The sum of sizes of [$(strip $(3))] is larger than $(strip $(6)):"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' "$(7)" '==' $$(( $(7) )); \
- echo "Super partition is" $$(( $$(( $$(( $${sum_sizes_expr} )) * 100)) / $$(( $(2) )) )) "percent occupied!"; \
- exit 1; \
- fi; \
- if [[ ! -z "$(5)" ]] && [ $$(( $${sum_sizes_expr} )) -gt $$(( $(5) )) ]; then \
- echo "!!!! WARNING !!!! The sum of sizes of [$(strip $(3))] is larger than $(strip $(4)):"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' "$(5)" '==' $$(( $(5) )); \
- echo "Super partition is" $$(( $$(( $$(( $${sum_sizes_expr} )) * 100)) / $$(( $(2) )) )) "percent occupied!"; \
- fi; \
- echo "The sum of sizes of [$(strip $(3))] is within $(strip $(1)):"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '<=' "$(2)" '==' $$(( $(2) )); \
- fi;
-endef
-
+# $(1): misc_info.txt
define check-all-partition-sizes-target
- # Check sum(all partitions) <= super partition (/ 2 for A/B devices launched with dynamic partitions)
- $(if $(BOARD_SUPER_PARTITION_SIZE),$(if $(BOARD_SUPER_PARTITION_PARTITION_LIST), \
- $(call check-sum-of-partition-sizes,BOARD_SUPER_PARTITION_SIZE$(if $(call super-slot-suffix), / 2), \
- $(BOARD_SUPER_PARTITION_SIZE)$(if $(call super-slot-suffix), / 2),$(BOARD_SUPER_PARTITION_PARTITION_LIST), \
- BOARD_SUPER_PARTITION_WARN_LIMIT$(if $(call super-slot-suffix), / 2), \
- $(BOARD_SUPER_PARTITION_WARN_LIMIT)$(if $(call super-slot-suffix), / 2), \
- BOARD_SUPER_PARTITION_ERROR_LIMIT$(if $(call super-slot-suffix), / 2), \
- $(BOARD_SUPER_PARTITION_ERROR_LIMIT)$(if $(call super-slot-suffix), / 2)) \
- ))
-
- # For each group, check sum(partitions in group) <= group size
- $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \
- $(if $(BOARD_$(group)_SIZE),$(if $(BOARD_$(group)_PARTITION_LIST), \
- $(call check-sum-of-partition-sizes,BOARD_$(group)_SIZE,$(BOARD_$(group)_SIZE),$(BOARD_$(group)_PARTITION_LIST)))))
-
- # Check sum(all group sizes) <= super partition (/ 2 for A/B devices launched with dynamic partitions)
- if [[ ! -z $(BOARD_SUPER_PARTITION_SIZE) ]]; then \
- group_size_list="$(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)),$(BOARD_$(group)_SIZE))"; \
- sum_sizes_expr=$$(sed -e 's/ /+/g' <<< "$${group_size_list}"); \
- max_size_tail=$(if $(call super-slot-suffix)," / 2"); \
- max_size_expr="$(BOARD_SUPER_PARTITION_SIZE)$${max_size_tail}"; \
- if [ $$(( $${sum_sizes_expr} )) -gt $$(( $${max_size_expr} )) ]; then \
- echo "The sum of sizes of [$(strip $(BOARD_SUPER_PARTITION_GROUPS))] is larger than BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' $${max_size_expr} '==' $$(( $${max_size_expr} )); \
- exit 1; \
- else \
- echo "The sum of sizes of [$(strip $(BOARD_SUPER_PARTITION_GROUPS))] is within BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
- echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '<=' $${max_size_expr} '==' $$(( $${max_size_expr} )); \
- fi \
- fi
+ mkdir -p $(dir $(1))
+ rm -f $(1)
+ $(call dump-super-image-info, $(1))
+ $(foreach partition,$(BOARD_SUPER_PARTITION_PARTITION_LIST), \
+ echo "$(partition)_image="$(call images-for-partitions,$(partition)) >> $(1);)
+ $(CHECK_PARTITION_SIZES) -v $(1)
endef
$(check_all_partition_sizes_file):
- $(call check-all-partition-sizes-target)
- $(call check-super-partition-size)
+ $(call check-all-partition-sizes-target, \
+ $(call intermediates-dir-for,PACKAGING,check-all-partition-sizes)/misc_info.txt)
touch $@
check-all-partition-sizes-nodeps:
- $(call check-all-partition-sizes-target)
- $(call check-super-partition-size)
+ $(call check-all-partition-sizes-target, \
+ $(call intermediates-dir-for,PACKAGING,check-all-partition-sizes-nodeps)/misc_info.txt)
endif # PRODUCT_BUILD_SUPER_PARTITION
@@ -4161,6 +4056,15 @@ define fs_config
(cd $(1); find . -type d | sed 's,$$,/,'; find . \! -type d) | cut -c 3- | sort | sed 's,^,$(2),' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) -R "$(2)"
endef
+# Filter out vendor from the list for AOSP targets.
+# $(1): list
+define filter-out-missing-vendor
+$(if $(INSTALLED_VENDORIMAGE_TARGET),$(1),$(filter-out vendor,$(1)))
+endef
+
+# Information related to dynamic partitions and virtual A/B. This information
+# is needed for building the super image (see dump-super-image-info) and
+# building OTA packages.
# $(1): file
define dump-dynamic-partitions-info
$(if $(filter true,$(PRODUCT_USE_DYNAMIC_PARTITIONS)), \
@@ -4178,17 +4082,29 @@ define dump-dynamic-partitions-info
$(foreach device,$(BOARD_SUPER_PARTITION_BLOCK_DEVICES), \
echo "super_$(device)_device_size=$(BOARD_SUPER_PARTITION_$(call to-upper,$(device))_DEVICE_SIZE)" >> $(1);)
$(if $(BOARD_SUPER_PARTITION_PARTITION_LIST), \
- echo "dynamic_partition_list=$(BOARD_SUPER_PARTITION_PARTITION_LIST)" >> $(1))
+ echo "dynamic_partition_list=$(call filter-out-missing-vendor, $(BOARD_SUPER_PARTITION_PARTITION_LIST))" >> $(1))
$(if $(BOARD_SUPER_PARTITION_GROUPS),
echo "super_partition_groups=$(BOARD_SUPER_PARTITION_GROUPS)" >> $(1))
$(foreach group,$(BOARD_SUPER_PARTITION_GROUPS), \
echo "super_$(group)_group_size=$(BOARD_$(call to-upper,$(group))_SIZE)" >> $(1); \
$(if $(BOARD_$(call to-upper,$(group))_PARTITION_LIST), \
- echo "super_$(group)_partition_list=$(BOARD_$(call to-upper,$(group))_PARTITION_LIST)" >> $(1);))
+ echo "super_$(group)_partition_list=$(call filter-out-missing-vendor, $(BOARD_$(call to-upper,$(group))_PARTITION_LIST))" >> $(1);))
$(if $(filter true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED)), \
echo "build_non_sparse_super_partition=true" >> $(1))
$(if $(filter true,$(BOARD_SUPER_IMAGE_IN_UPDATE_PACKAGE)), \
echo "super_image_in_update_package=true" >> $(1))
+ $(if $(BOARD_SUPER_PARTITION_SIZE), \
+ echo "super_partition_size=$(BOARD_SUPER_PARTITION_SIZE)" >> $(1))
+ $(if $(BOARD_SUPER_PARTITION_ALIGNMENT), \
+ echo "super_partition_alignment=$(BOARD_SUPER_PARTITION_ALIGNMENT)" >> $(1))
+ $(if $(BOARD_SUPER_PARTITION_WARN_LIMIT), \
+ echo "super_partition_warn_limit=$(BOARD_SUPER_PARTITION_WARN_LIMIT)" >> $(1))
+ $(if $(BOARD_SUPER_PARTITION_ERROR_LIMIT), \
+ echo "super_partition_error_limit=$(BOARD_SUPER_PARTITION_ERROR_LIMIT)" >> $(1))
+ $(if $(filter true,$(PRODUCT_VIRTUAL_AB_OTA)), \
+ echo "virtual_ab=true" >> $(1))
+ $(if $(filter true,$(PRODUCT_VIRTUAL_AB_OTA_RETROFIT)), \
+ echo "virtual_ab_retrofit=true" >> $(1))
endef
# By conditionally including the dependency of the target files package on the
@@ -4509,21 +4425,10 @@ endif
ifdef BUILT_KERNEL_VERSION_FILE
$(hide) cp $(BUILT_KERNEL_VERSION_FILE) $(zip_root)/META/kernel_version.txt
endif
-ifneq ($(BOARD_SUPER_PARTITION_GROUPS),)
- $(hide) echo "super_partition_groups=$(BOARD_SUPER_PARTITION_GROUPS)" > $(zip_root)/META/dynamic_partitions_info.txt
- @# Remove 'vendor' from the group partition list if the image is not available. This should only
- @# happen to AOSP targets built without vendor.img. We can't remove the partition from the
- @# BoardConfig file, as it's still needed elsewhere (e.g. when creating super_empty.img).
- $(foreach group,$(BOARD_SUPER_PARTITION_GROUPS), \
- $(eval _group_partition_list := $(BOARD_$(call to-upper,$(group))_PARTITION_LIST)) \
- $(if $(INSTALLED_VENDORIMAGE_TARGET),,$(eval _group_partition_list := $(filter-out vendor,$(_group_partition_list)))) \
- echo "$(group)_size=$(BOARD_$(call to-upper,$(group))_SIZE)" >> $(zip_root)/META/dynamic_partitions_info.txt; \
- $(if $(_group_partition_list), \
- echo "$(group)_partition_list=$(_group_partition_list)" >> $(zip_root)/META/dynamic_partitions_info.txt;))
-endif # BOARD_SUPER_PARTITION_GROUPS
-ifeq ($(PRODUCT_VIRTUAL_AB_OTA),true)
- echo "virtual_ab=true" >> $(zip_root)/META/dynamic_partitions_info.txt
-endif # PRODUCT_VIRTUAL_AB_OTA
+ rm -rf $(zip_root)/META/dynamic_partitions_info.txt
+ifeq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS))
+ $(call dump-dynamic-partitions-info, $(zip_root)/META/dynamic_partitions_info.txt)
+endif
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH MKBOOTIMG=$(MKBOOTIMG) \
$(ADD_IMG_TO_TARGET_FILES) -a -v -p $(HOST_OUT) $(zip_root)
ifeq ($(BUILD_QEMU_IMAGES),true)
@@ -4815,6 +4720,8 @@ define build-superimage-target
$(call dump-super-image-info,$(2))
$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST), \
echo "$(p)_image=$(INSTALLED_$(call to-upper,$(p))IMAGE_TARGET)" >> $(2);)
+ $(if $(BUILDING_SYSTEM_OTHER_IMAGE), $(if $(filter system,$(BOARD_SUPER_PARTITION_PARTITION_LIST)), \
+ echo "system_other_image=$(INSTALLED_SYSTEMOTHERIMAGE_TARGET)" >> $(2);))
mkdir -p $(dir $(1))
PATH=$(dir $(LPMAKE)):$$PATH \
$(BUILD_SUPER_IMAGE) -v $(2) $(1)
@@ -4824,6 +4731,12 @@ INSTALLED_SUPERIMAGE_TARGET := $(PRODUCT_OUT)/super.img
INSTALLED_SUPERIMAGE_DEPENDENCIES := $(LPMAKE) $(BUILD_SUPER_IMAGE) \
$(foreach p, $(BOARD_SUPER_PARTITION_PARTITION_LIST), $(INSTALLED_$(call to-upper,$(p))IMAGE_TARGET))
+ifdef BUILDING_SYSTEM_OTHER_IMAGE
+ifneq ($(filter system,$(BOARD_SUPER_PARTITION_PARTITION_LIST)),)
+INSTALLED_SUPERIMAGE_DEPENDENCIES += $(INSTALLED_SYSTEMOTHERIMAGE_TARGET)
+endif
+endif
+
# If BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT is set, super.img is built from images in the
# $(PRODUCT_OUT) directory, and is built to $(PRODUCT_OUT)/super.img. Also, it will
# be built for non-dist builds. This is useful for devices that uses super.img directly, e.g.
@@ -5184,6 +5097,19 @@ include $(TOPDIR)development/build/tools/sdk_repo.mk
endif
# -----------------------------------------------------------------
+# Soong generates the list of all shared libraries that are depended on by fuzz
+# targets. It saves this list as a source:destination pair to
+# FUZZ_TARGET_SHARED_DEPS_INSTALL_PAIRS, where the source is the path to the
+# build of the unstripped shared library, and the destination is the
+# /data/fuzz/$ARCH/lib (for device) or /fuzz/$ARCH/lib (for host) directory
+# where fuzz target shared libraries are to be "reinstalled". The
+# copy-many-files below generates the rules to copy the unstripped shared
+# libraries to the device or host "reinstallation" directory. These rules are
+# depended on by each module in soong_cc_prebuilt.mk, where the module will have
+# a dependency on each shared library that it needs to be "reinstalled".
+FUZZ_SHARED_DEPS := $(call copy-many-files,$(strip $(FUZZ_TARGET_SHARED_DEPS_INSTALL_PAIRS)))
+
+# -----------------------------------------------------------------
# The rule to build all fuzz targets, and package them.
# Note: The packages are created in Soong, and in a perfect world,
# we'd be able to create the phony rule there. But, if we want to
@@ -5194,5 +5120,5 @@ endif
# directory`, because kati will see 'fuzz' as being a file, not a
# phony target.
.PHONY: fuzz
-fuzz: $(SOONG_FUZZ_PACKAGING_ARCH_MODULES)
+fuzz: $(SOONG_FUZZ_PACKAGING_ARCH_MODULES) $(ALL_FUZZ_TARGETS)
$(call dist-for-goals,fuzz,$(SOONG_FUZZ_PACKAGING_ARCH_MODULES))
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 32c580734a..6b80a1580d 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -321,6 +321,8 @@ ifneq ($(LOCAL_OVERRIDES_MODULES),)
EXECUTABLES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES))
else ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES)
SHARED_LIBRARIES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES))
+ else ifeq ($(LOCAL_MODULE_CLASS),ETC)
+ ETC.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES))
else
$(call pretty-error,LOCAL_MODULE_CLASS := $(LOCAL_MODULE_CLASS) cannot use LOCAL_OVERRIDES_MODULES)
endif
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 4818c01172..9ff978bee1 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -106,6 +106,7 @@ LOCAL_FULL_LIBS_MANIFEST_FILES:=
LOCAL_FULL_MANIFEST_FILE:=
LOCAL_FULL_TEST_CONFIG:=
LOCAL_FUZZ_ENGINE:=
+LOCAL_FUZZ_INSTALLED_SHARED_DEPS:=
LOCAL_GCNO_FILES:=
LOCAL_GENERATED_SOURCES:=
# Group static libraries with "-Wl,--start-group" and "-Wl,--end-group" when linking.
diff --git a/core/config.mk b/core/config.mk
index 241ac8d071..a1bbe1802e 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -602,6 +602,7 @@ IMG_FROM_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/img_from_target_files$(HOST_EXE
MAKE_RECOVERY_PATCH := $(HOST_OUT_EXECUTABLES)/make_recovery_patch$(HOST_EXECUTABLE_SUFFIX)
OTA_FROM_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/ota_from_target_files$(HOST_EXECUTABLE_SUFFIX)
SPARSE_IMG := $(HOST_OUT_EXECUTABLES)/sparse_img$(HOST_EXECUTABLE_SUFFIX)
+CHECK_PARTITION_SIZES := $(HOST_OUT_EXECUTABLES)/check_partition_sizes$(HOST_EXECUTABLE_SUFFIX)
PROGUARD_HOME := external/proguard
PROGUARD := $(PROGUARD_HOME)/bin/proguard.sh
@@ -627,16 +628,6 @@ JETIFIER := prebuilts/sdk/tools/jetifier/jetifier-standalone/bin/jetifier-standa
EXTRACT_KERNEL := build/make/tools/extract_kernel.py
-USE_OPENJDK9 := true
-
-ifeq ($(EXPERIMENTAL_JAVA_LANGUAGE_LEVEL_9),)
-TARGET_OPENJDK9 := true
-else ifeq ($(EXPERIMENTAL_JAVA_LANGUAGE_LEVEL_9),true)
-TARGET_OPENJDK9 := true
-else ifeq ($(EXPERIMENTAL_JAVA_LANGUAGE_LEVEL_9),false)
-TARGET_OPENJDK9 :=
-endif
-
# Path to tools.jar
HOST_JDK_TOOLS_JAR := $(ANDROID_JAVA8_HOME)/lib/tools.jar
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 2439f7962a..efb21e7c6a 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -182,7 +182,9 @@ ifneq ($(filter hwaddress,$(my_sanitize)),)
my_shared_libraries += $($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_RUNTIME_LIBRARY)
ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
- my_static_libraries := $(my_static_libraries) $($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_STATIC_LIBRARY)
+ my_static_libraries := $(my_static_libraries) \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)HWADDRESS_SANITIZER_STATIC_LIBRARY) \
+ libdl
endif
endif
endif
diff --git a/core/cxx_stl_setup.mk b/core/cxx_stl_setup.mk
index 95b1090811..6571d99be5 100644
--- a/core/cxx_stl_setup.mk
+++ b/core/cxx_stl_setup.mk
@@ -82,7 +82,7 @@ ifneq ($(filter $(my_cxx_stl),libc++ libc++_static),)
endif
ifeq ($(my_link_type),static)
- my_static_libraries += libm libc libdl
+ my_static_libraries += libm libc
endif
endif
else ifeq ($(my_cxx_stl),ndk)
diff --git a/core/definitions.mk b/core/definitions.mk
index 1bf7fa9f31..8eb1142bf0 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2099,8 +2099,12 @@ $(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) -o -n "$(PRIVATE_SRCJARS)" ] ; then
--output $@.premerged --temp_dir $(dir $@)/classes-turbine \
--sources \@$(PRIVATE_JAVA_SOURCE_LIST) --source_jars $(PRIVATE_SRCJARS) \
--javacopts $(PRIVATE_JAVACFLAGS) $(COMMON_JDK_FLAGS) -- \
- $(addprefix --bootclasspath ,$(strip $(PRIVATE_BOOTCLASSPATH))) \
- $(addprefix --classpath ,$(strip $(PRIVATE_ALL_JAVA_HEADER_LIBRARIES))) \
+ $(if $(PRIVATE_USE_SYSTEM_MODULES), \
+ --system $(PRIVATE_SYSTEM_MODULES_DIR), \
+ --bootclasspath $(strip $(PRIVATE_BOOTCLASSPATH))) \
+ --classpath $(strip $(if $(PRIVATE_USE_SYSTEM_MODULES), \
+ $(filter-out $(PRIVATE_SYSTEM_MODULES_LIBS),$(PRIVATE_BOOTCLASSPATH))) \
+ $(PRIVATE_ALL_JAVA_HEADER_LIBRARIES)) \
|| ( rm -rf $(dir $@)/classes-turbine ; exit 41 ) && \
$(MERGE_ZIPS) -j --ignore-duplicates -stripDir META-INF $@.tmp $@.premerged $(PRIVATE_STATIC_JAVA_HEADER_LIBRARIES) ; \
else \
diff --git a/core/dex_preopt_config.mk b/core/dex_preopt_config.mk
index 387581533d..64ad8d9a3c 100644
--- a/core/dex_preopt_config.mk
+++ b/core/dex_preopt_config.mk
@@ -80,7 +80,7 @@ ifeq ($(WRITE_SOONG_VARIABLES),true)
$(call json_start)
- $(call add_json_bool, DisablePreopt, $(call invert_bool,$(filter true,$(WITH_DEXPREOPT))))
+ $(call add_json_bool, DisablePreopt, $(call invert_bool,$(and $(filter true,$(PRODUCT_USES_DEFAULT_ART_CONFIG)),$(filter true,$(WITH_DEXPREOPT)))))
$(call add_json_list, DisablePreoptModules, $(DEXPREOPT_DISABLED_MODULES))
$(call add_json_bool, OnlyPreoptBootImageAndSystemServer, $(filter true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY)))
$(call add_json_bool, GenerateApexImage, $(filter true,$(DEXPREOPT_GENERATE_APEX_IMAGE)))
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 0c58cd6ae0..d35cb7e9bb 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -259,14 +259,6 @@ endef
# Java libraries in the ART apex build rule.
ART_APEX_JARS := core-oj core-libart core-icu4j okhttp bouncycastle apache-xml
TARGET_CORE_JARS := $(ART_APEX_JARS) conscrypt
-ifeq ($(EMMA_INSTRUMENT),true)
- ifneq ($(EMMA_INSTRUMENT_STATIC),true)
- # For instrumented build, if Jacoco is not being included statically
- # in instrumented packages then include Jacoco classes into the
- # bootclasspath.
- TARGET_CORE_JARS += jacocoagent
- endif # EMMA_INSTRUMENT_STATIC
-endif # EMMA_INSTRUMENT
HOST_CORE_JARS := $(addsuffix -hostdex,$(TARGET_CORE_JARS))
#################################################################
diff --git a/core/java.mk b/core/java.mk
index d08045032b..99774cf1bd 100644
--- a/core/java.mk
+++ b/core/java.mk
@@ -358,9 +358,7 @@ include $(BUILD_SYSTEM)/jacoco.mk
# Temporarily enable --multi-dex until proguard supports v53 class files
# ( http://b/67673860 ) or we move away from proguard altogether.
-ifdef TARGET_OPENJDK9
LOCAL_DX_FLAGS := $(filter-out --multi-dex,$(LOCAL_DX_FLAGS)) --multi-dex
-endif
full_classes_pre_proguard_jar := $(LOCAL_FULL_CLASSES_JACOCO_JAR)
diff --git a/core/java_common.mk b/core/java_common.mk
index dfe75f3257..f6e01d226f 100644
--- a/core/java_common.mk
+++ b/core/java_common.mk
@@ -33,8 +33,7 @@ ifeq (,$(LOCAL_JAVA_LANGUAGE_VERSION))
# TODO(ccross): allow 1.9 for current and unbundled once we have SDK system modules
LOCAL_JAVA_LANGUAGE_VERSION := 1.8
else
- # DEFAULT_JAVA_LANGUAGE_VERSION is 1.8, unless TARGET_OPENJDK9 in which case it is 1.9
- LOCAL_JAVA_LANGUAGE_VERSION := $(DEFAULT_JAVA_LANGUAGE_VERSION)
+ LOCAL_JAVA_LANGUAGE_VERSION := 1.9
endif
endif
LOCAL_JAVACFLAGS += -source $(LOCAL_JAVA_LANGUAGE_VERSION) -target $(LOCAL_JAVA_LANGUAGE_VERSION)
diff --git a/core/local_systemsdk.mk b/core/local_systemsdk.mk
index 6c022f2daf..2b73f93209 100644
--- a/core/local_systemsdk.mk
+++ b/core/local_systemsdk.mk
@@ -16,16 +16,20 @@
ifdef BOARD_SYSTEMSDK_VERSIONS
# Apps and jars in vendor or odm partition are forced to build against System SDK.
- _is_vendor_app :=
+ _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
# set correctly before this is included.
- _is_vendor_app := true
+ _cannot_use_platform_apis := true
+ else ifeq ($(LOCAL_PRODUCT_MODULE),true)
+ ifeq ($(PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE),true)
+ _cannot_use_platform_apis := true
+ endif
endif
ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS)))
ifndef LOCAL_SDK_VERSION
- ifeq ($(_is_vendor_app),true)
- ifeq (,$(filter %__auto_generated_rro_vendor,$(LOCAL_MODULE)))
+ ifeq ($(_cannot_use_platform_apis),true)
+ ifeq (,$(findstring __auto_generated_rro_,$(LOCAL_MODULE)))
# Runtime resource overlays are exempted from building against System SDK.
# TODO(b/35859726): remove this exception
LOCAL_SDK_VERSION := system_current
@@ -39,7 +43,7 @@ endif
# The range of support versions becomes narrower when BOARD_SYSTEMSDK_VERSIONS
# is set, which is a subset of PLATFORM_SYSTEMSDK_VERSIONS.
ifneq (,$(call has-system-sdk-version,$(LOCAL_SDK_VERSION)))
- ifneq ($(_is_vendor_app),true)
+ ifneq ($(_cannot_use_platform_apis),true)
# apps bundled in system partition can use all system sdk versions provided by the platform
_supported_systemsdk_versions := $(PLATFORM_SYSTEMSDK_VERSIONS)
else ifdef BOARD_SYSTEMSDK_VERSIONS
diff --git a/core/main.mk b/core/main.mk
index a5e2456156..730cbd0cd3 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -220,9 +220,6 @@ ifneq ($(TARGET_BUILD_VARIANT),user)
ADDITIONAL_BUILD_PROPERTIES += persist.debug.dalvik.vm.core_platform_api_policy=just-warn
endif
-# Define ro.sanitize.<name> properties for all global sanitizers.
-ADDITIONAL_BUILD_PROPERTIES += $(foreach s,$(SANITIZE_TARGET),ro.sanitize.$(s)=true)
-
# Sets the default value of ro.postinstall.fstab.prefix to /system.
# Device board config should override the value to /product when needed by:
#
@@ -970,7 +967,7 @@ $(foreach export,$(EXPORTS_LIST),$(eval $(call add-dependency,$$(EXPORTS.$$(expo
# Expand a list of modules to the modules that they override (if any)
# $(1): The list of modules.
define module-overrides
-$(foreach m,$(1),$(PACKAGES.$(m).OVERRIDES) $(EXECUTABLES.$(m).OVERRIDES) $(SHARED_LIBRARIES.$(m).OVERRIDES))
+$(foreach m,$(1),$(PACKAGES.$(m).OVERRIDES) $(EXECUTABLES.$(m).OVERRIDES) $(SHARED_LIBRARIES.$(m).OVERRIDES) $(ETC.$(m).OVERRIDES))
endef
###########################################################
@@ -1045,14 +1042,13 @@ endef
# 32-bit variant, if it exits. See the select-bitness-of-required-modules definition.
# $(1): product makefile
define product-installed-files
- $(eval _mk := $(strip $(1))) \
$(eval _pif_modules := \
- $(PRODUCTS.$(_mk).PRODUCT_PACKAGES) \
- $(if $(filter eng,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_ENG)) \
- $(if $(filter debug,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_DEBUG)) \
- $(if $(filter tests,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_TESTS)) \
- $(if $(filter asan,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_DEBUG_ASAN)) \
- $(if $(filter java_coverage,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_DEBUG_JAVA_COVERAGE)) \
+ $(call get-product-var,$(1),PRODUCT_PACKAGES) \
+ $(if $(filter eng,$(tags_to_install)),$(call get-product-var,$(1),PRODUCT_PACKAGES_ENG)) \
+ $(if $(filter debug,$(tags_to_install)),$(call get-product-var,$(1),PRODUCT_PACKAGES_DEBUG)) \
+ $(if $(filter tests,$(tags_to_install)),$(call get-product-var,$(1),PRODUCT_PACKAGES_TESTS)) \
+ $(if $(filter asan,$(tags_to_install)),$(call get-product-var,$(1),PRODUCT_PACKAGES_DEBUG_ASAN)) \
+ $(if $(filter java_coverage,$(tags_to_install)),$(call get-product-var,$(1),PRODUCT_PACKAGES_DEBUG_JAVA_COVERAGE)) \
$(call auto-included-modules) \
) \
$(eval ### Filter out the overridden packages and executables before doing expansion) \
@@ -1071,13 +1067,13 @@ define product-installed-files
$(call expand-required-modules,_pif_modules,$(_pif_modules),$(_pif_overrides)) \
$(filter-out $(HOST_OUT_ROOT)/%,$(call module-installed-files, $(_pif_modules))) \
$(call resolve-product-relative-paths,\
- $(foreach cf,$(PRODUCTS.$(_mk).PRODUCT_COPY_FILES),$(call word-colon,2,$(cf))))
+ $(foreach cf,$(call get-product-var,$(1),PRODUCT_COPY_FILES),$(call word-colon,2,$(cf))))
endef
# Similar to product-installed-files above, but handles PRODUCT_HOST_PACKAGES instead
# This does support the :32 / :64 syntax, but does not support module overrides.
define host-installed-files
- $(eval _hif_modules := $(PRODUCTS.$(strip $(1)).PRODUCT_HOST_PACKAGES)) \
+ $(eval _hif_modules := $(call get-product-var,$(1),PRODUCT_HOST_PACKAGES)) \
$(eval ### Resolve the :32 :64 module name) \
$(eval _hif_modules_32 := $(patsubst %:32,%,$(filter %:32, $(_hif_modules)))) \
$(eval _hif_modules_64 := $(patsubst %:64,%,$(filter %:64, $(_hif_modules)))) \
@@ -1109,11 +1105,11 @@ $(if $(strip $(1)), \
endef
# Check that libraries that should only be in APEXes don't end up in the system
-# image. For the Runtime APEX this complements the checks in
+# image. For the ART APEX this complements the checks in
# art/build/apex/art_apex_test.py.
# TODO(b/128708192): Implement this restriction in Soong instead.
-# Runtime APEX libraries
+# ART APEX (native) libraries
APEX_MODULE_LIBS := \
libadbconnection.so \
libadbconnectiond.so \
@@ -1129,14 +1125,10 @@ APEX_MODULE_LIBS := \
libartd-dexlayout.so \
libartd.so \
libartpalette.so \
- libc.so \
- libc_malloc_debug.so \
- libc_malloc_hooks.so \
libdexfile.so \
libdexfile_external.so \
libdexfiled.so \
libdexfiled_external.so \
- libdl.so \
libdt_fd_forward.so \
libdt_socket.so \
libicui18n.so \
@@ -1144,11 +1136,9 @@ APEX_MODULE_LIBS := \
libicu_jni.so \
libjavacore.so \
libjdwp.so \
- libm.so \
libnativebridge.so \
libnativehelper.so \
libnativeloader.so \
- libneuralnetworks.so \
libnpt.so \
libopenjdk.so \
libopenjdkjvm.so \
@@ -1160,16 +1150,45 @@ APEX_MODULE_LIBS := \
libprofiled.so \
libsigchain.so \
+# Runtime (Bionic) APEX (native) libraries
+APEX_MODULE_LIBS += \
+ libc.so \
+ libc_malloc_debug.so \
+ libc_malloc_hooks.so \
+ libdl.so \
+ libm.so \
+
# Conscrypt APEX libraries
APEX_MODULE_LIBS += \
libjavacrypto.so \
+# Android Neural Network API (NNAPI) APEX (native) libraries
+APEX_MODULE_LIBS += \
+ libneuralnetworks.so \
+
+# ART APEX JARs (Java libraries)
+APEX_MODULE_LIBS += \
+ apache-xml.jar \
+ bouncycastle.jar \
+ core-icu4j.jar \
+ core-libart.jar \
+ core-oj.jar \
+ okhttp.jar \
+
+# Conscrypt APEX JARs (Java libraries)
+APEX_MODULE_LIBS += \
+ conscrypt.jar \
+
# An option to disable the check below, for local use since some build targets
# still may create these libraries in /system (b/129006418).
DISABLE_APEX_LIBS_ABSENCE_CHECK ?=
+# Allow APEX libraries under /system/apex, which happens when APEX flattening
+# is enabled.
+APEX_LIBS_ABSENCE_CHECK_EXCLUDE := apex
+
# Bionic should not be in /system, except for the bootstrap instance.
-APEX_LIBS_ABSENCE_CHECK_EXCLUDE := lib/bootstrap lib64/bootstrap
+APEX_LIBS_ABSENCE_CHECK_EXCLUDE += lib/bootstrap lib64/bootstrap
# Exclude lib/arm and lib64/arm64 which contain the native bridge proxy libs. They
# are compiled for the guest architecture and used with an entirely different
@@ -1216,12 +1235,14 @@ else
# APEX might be misconfigured or something is wrong in the build system.
# Please reach out to the APEX package owners and/or soong-team@, or
# android-building@googlegroups.com externally.
+ #
+ # Likewise, we check for the absence of APEX Java libraries (JARs).
define check-apex-libs-absence
$(call maybe-print-list-and-error, \
$(filter $(foreach lib,$(APEX_MODULE_LIBS),%/$(lib)), \
$(filter-out $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE), \
$(TARGET_OUT)/$(if $(findstring %,$(dir)),$(dir),$(dir)/%)), \
- $(filter $(TARGET_OUT)/lib/% $(TARGET_OUT)/lib64/%,$(1)))), \
+ $(filter $(TARGET_OUT),$(1)))), \
APEX libraries found in product_target_FILES (see comment for check-apex-libs-absence in \
build/make/core/main.mk for details))
endef
@@ -1235,11 +1256,13 @@ else
# try "m installclean && m systemimage" to get a correct system image. For
# local work you can also disable the check with the
# DISABLE_APEX_LIBS_ABSENCE_CHECK environment variable.
+ #
+ # Likewise, we check for the absence of APEX Java libraries (JARs).
define check-apex-libs-absence-on-disk
$(hide) ( \
cd $(TARGET_OUT) && \
- findres=$$(find lib* \
- $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE),-path "$(subst %,*,$(dir))" -prune -o) \
+ findres=$$(find . \
+ $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE),-path "./$(subst %,*,$(dir))" -prune -o) \
-type f \( -false $(foreach lib,$(APEX_MODULE_LIBS),-o -name $(lib)) \) \
-print) && \
if [ -n "$$findres" ]; then \
@@ -1253,8 +1276,6 @@ else
endef
endif
-# TODO(b/142944799): Implement Java library absence check for Core Libraries.
-
ifdef FULL_BUILD
ifneq (true,$(ALLOW_MISSING_DEPENDENCIES))
# Check to ensure that all modules in PRODUCT_PACKAGES exist (opt in per product)
@@ -1293,11 +1314,11 @@ ifdef FULL_BUILD
# Some modules produce only host installed files when building with TARGET_BUILD_APPS
ifeq ($(TARGET_BUILD_APPS),)
- _modules := $(foreach m,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \
- $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG) \
- $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG_ASAN) \
- $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG) \
- $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS),\
+ _modules := $(foreach m,$(PRODUCT_PACKAGES) \
+ $(PRODUCT_PACKAGES_DEBUG) \
+ $(PRODUCT_PACKAGES_DEBUG_ASAN) \
+ $(PRODUCT_PACKAGES_ENG) \
+ $(PRODUCT_PACKAGES_TESTS),\
$(if $(ALL_MODULES.$(m).INSTALLED),\
$(if $(filter-out $(HOST_OUT_ROOT)/%,$(ALL_MODULES.$(m).INSTALLED)),,\
$(m))))
diff --git a/core/notice_files.mk b/core/notice_files.mk
index 680a0b1c4f..9df1c1125a 100644
--- a/core/notice_files.mk
+++ b/core/notice_files.mk
@@ -71,8 +71,11 @@ else
# javalib.jar is the default name for the build module (and isn't meaningful)
# If that's what we have, substitute the module name instead. These files
# aren't included on the device, so this name is synthetic anyway.
+ # Extra path "static" is added to try to avoid name conflict between the notice file of
+ # this 'uninstallable' Java module and the notice file for another 'installable' Java module
+ # whose stem is the same as this module's name.
ifneq ($(filter javalib.jar,$(module_leaf)),)
- module_leaf := $(LOCAL_MODULE).jar
+ module_leaf := static/$(LOCAL_MODULE).jar
endif
module_installed_filename := \
$(patsubst $(PRODUCT_OUT)/%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(module_leaf)
diff --git a/core/pdk_config.mk b/core/pdk_config.mk
index 4a069d3d10..922e0ef2d6 100644
--- a/core/pdk_config.mk
+++ b/core/pdk_config.mk
@@ -22,7 +22,7 @@ PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \
target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
target/common/obj/JAVA_LIBRARIES/core-icu4j_intermediates \
target/common/obj/JAVA_LIBRARIES/ext_intermediates \
- target/common/obj/JAVA_LIBRARIES/framework_intermediates \
+ target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates \
target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \
target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \
target/common/obj/JAVA_LIBRARIES/okhttp_intermediates \
diff --git a/core/product-graph.mk b/core/product-graph.mk
index b97a69d644..968d01be0f 100644
--- a/core/product-graph.mk
+++ b/core/product-graph.mk
@@ -33,7 +33,6 @@ define all-products-inner
)
endef
-
this_makefile := build/make/core/product-graph.mk
products_graph := $(OUT_DIR)/products.dot
@@ -71,7 +70,7 @@ endef
# $(2) the output file
define emit-product-node-props
$(hide) echo \"$(1)\" [ \
-label=\"$(dir $(1))\\n$(notdir $(1))\\n\\n$(subst $(close_parenthesis),,$(subst $(open_parethesis),,$(PRODUCTS.$(strip $(1)).PRODUCT_MODEL)))\\n$(PRODUCTS.$(strip $(1)).PRODUCT_DEVICE)\" \
+label=\"$(dir $(1))\\n$(notdir $(1))\\n\\n$(subst $(close_parenthesis),,$(subst $(open_parethesis),,$(call get-product-var,$(1),PRODUCT_MODEL)))\\n$(call get-product-var,$(1),PRODUCT_DEVICE)\" \
style=\"filled\" fillcolor=\"$(strip $(call node-color,$(1)))\" \
colorscheme=\"svg\" fontcolor=\"darkblue\" href=\"products/$(1).html\" \
] >> $(2)
@@ -105,35 +104,35 @@ $(OUT_DIR)/products/$(strip $(1)).txt: $(this_makefile)
$(hide) rm -f $$@
$(hide) mkdir -p $$(dir $$@)
$(hide) echo 'FILE=$(strip $(1))' >> $$@
- $(hide) echo 'PRODUCT_NAME=$$(PRODUCTS.$(strip $(1)).PRODUCT_NAME)' >> $$@
- $(hide) echo 'PRODUCT_MODEL=$$(PRODUCTS.$(strip $(1)).PRODUCT_MODEL)' >> $$@
- $(hide) echo 'PRODUCT_LOCALES=$$(PRODUCTS.$(strip $(1)).PRODUCT_LOCALES)' >> $$@
- $(hide) echo 'PRODUCT_AAPT_CONFIG=$$(PRODUCTS.$(strip $(1)).PRODUCT_AAPT_CONFIG)' >> $$@
- $(hide) echo 'PRODUCT_AAPT_PREF_CONFIG=$$(PRODUCTS.$(strip $(1)).PRODUCT_AAPT_PREF_CONFIG)' >> $$@
- $(hide) echo 'PRODUCT_PACKAGES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PACKAGES)' >> $$@
- $(hide) echo 'PRODUCT_DEVICE=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEVICE)' >> $$@
- $(hide) echo 'PRODUCT_MANUFACTURER=$$(PRODUCTS.$(strip $(1)).PRODUCT_MANUFACTURER)' >> $$@
- $(hide) echo 'PRODUCT_PROPERTY_OVERRIDES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PROPERTY_OVERRIDES)' >> $$@
- $(hide) echo 'PRODUCT_DEFAULT_PROPERTY_OVERRIDES=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_PROPERTY_OVERRIDES)' >> $$@
- $(hide) echo 'PRODUCT_SYSTEM_DEFAULT_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SYSTEM_DEFAULT_PROPERTIES)' >> $$@
- $(hide) echo 'PRODUCT_PRODUCT_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PRODUCT_PROPERTIES)' >> $$@
- $(hide) echo 'PRODUCT_SYSTEM_EXT_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SYSTEM_EXT_PROPERTIES)' >> $$@
- $(hide) echo 'PRODUCT_ODM_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_ODM_PROPERTIES)' >> $$@
- $(hide) echo 'PRODUCT_CHARACTERISTICS=$$(PRODUCTS.$(strip $(1)).PRODUCT_CHARACTERISTICS)' >> $$@
- $(hide) echo 'PRODUCT_COPY_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_COPY_FILES)' >> $$@
- $(hide) echo 'PRODUCT_OTA_PUBLIC_KEYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_OTA_PUBLIC_KEYS)' >> $$@
- $(hide) echo 'PRODUCT_EXTRA_RECOVERY_KEYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_EXTRA_RECOVERY_KEYS)' >> $$@
- $(hide) echo 'PRODUCT_PACKAGE_OVERLAYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_PACKAGE_OVERLAYS)' >> $$@
- $(hide) echo 'DEVICE_PACKAGE_OVERLAYS=$$(PRODUCTS.$(strip $(1)).DEVICE_PACKAGE_OVERLAYS)' >> $$@
- $(hide) echo 'PRODUCT_SDK_ADDON_NAME=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_NAME)' >> $$@
- $(hide) echo 'PRODUCT_SDK_ADDON_COPY_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_COPY_FILES)' >> $$@
- $(hide) echo 'PRODUCT_SDK_ADDON_COPY_MODULES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_COPY_MODULES)' >> $$@
- $(hide) echo 'PRODUCT_SDK_ADDON_DOC_MODULES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_DOC_MODULES)' >> $$@
- $(hide) echo 'PRODUCT_DEFAULT_WIFI_CHANNELS=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_WIFI_CHANNELS)' >> $$@
- $(hide) echo 'PRODUCT_DEFAULT_DEV_CERTIFICATE=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_DEV_CERTIFICATE)' >> $$@
- $(hide) echo 'PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES=$$(PRODUCTS.$(strip $(1)).PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES)' >> $$@
- $(hide) echo 'PRODUCT_RESTRICT_VENDOR_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_RESTRICT_VENDOR_FILES)' >> $$@
- $(hide) echo 'PRODUCT_VENDOR_KERNEL_HEADERS=$$(PRODUCTS.$(strip $(1)).PRODUCT_VENDOR_KERNEL_HEADERS)' >> $$@
+ $(hide) echo 'PRODUCT_NAME=$(call get-product-var,$(1),PRODUCT_NAME)' >> $$@
+ $(hide) echo 'PRODUCT_MODEL=$(call get-product-var,$(1),PRODUCT_MODEL)' >> $$@
+ $(hide) echo 'PRODUCT_LOCALES=$(call get-product-var,$(1),PRODUCT_LOCALES)' >> $$@
+ $(hide) echo 'PRODUCT_AAPT_CONFIG=$(call get-product-var,$(1),PRODUCT_AAPT_CONFIG)' >> $$@
+ $(hide) echo 'PRODUCT_AAPT_PREF_CONFIG=$(call get-product-var,$(1),PRODUCT_AAPT_PREF_CONFIG)' >> $$@
+ $(hide) echo 'PRODUCT_PACKAGES=$(call get-product-var,$(1),PRODUCT_PACKAGES)' >> $$@
+ $(hide) echo 'PRODUCT_DEVICE=$(call get-product-var,$(1),PRODUCT_DEVICE)' >> $$@
+ $(hide) echo 'PRODUCT_MANUFACTURER=$(call get-product-var,$(1),PRODUCT_MANUFACTURER)' >> $$@
+ $(hide) echo 'PRODUCT_PROPERTY_OVERRIDES=$(call get-product-var,$(1),PRODUCT_PROPERTY_OVERRIDES)' >> $$@
+ $(hide) echo 'PRODUCT_DEFAULT_PROPERTY_OVERRIDES=$(call get-product-var,$(1),PRODUCT_DEFAULT_PROPERTY_OVERRIDES)' >> $$@
+ $(hide) echo 'PRODUCT_SYSTEM_DEFAULT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_SYSTEM_DEFAULT_PROPERTIES)' >> $$@
+ $(hide) echo 'PRODUCT_PRODUCT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_PRODUCT_PROPERTIES)' >> $$@
+ $(hide) echo 'PRODUCT_SYSTEM_EXT_PROPERTIES=$(call get-product-var,$(1),PRODUCT_SYSTEM_EXT_PROPERTIES)' >> $$@
+ $(hide) echo 'PRODUCT_ODM_PROPERTIES=$(call get-product-var,$(1),PRODUCT_ODM_PROPERTIES)' >> $$@
+ $(hide) echo 'PRODUCT_CHARACTERISTICS=$(call get-product-var,$(1),PRODUCT_CHARACTERISTICS)' >> $$@
+ $(hide) echo 'PRODUCT_COPY_FILES=$(call get-product-var,$(1),PRODUCT_COPY_FILES)' >> $$@
+ $(hide) echo 'PRODUCT_OTA_PUBLIC_KEYS=$(call get-product-var,$(1),PRODUCT_OTA_PUBLIC_KEYS)' >> $$@
+ $(hide) echo 'PRODUCT_EXTRA_RECOVERY_KEYS=$(call get-product-var,$(1),PRODUCT_EXTRA_RECOVERY_KEYS)' >> $$@
+ $(hide) echo 'PRODUCT_PACKAGE_OVERLAYS=$(call get-product-var,$(1),PRODUCT_PACKAGE_OVERLAYS)' >> $$@
+ $(hide) echo 'DEVICE_PACKAGE_OVERLAYS=$(call get-product-var,$(1),DEVICE_PACKAGE_OVERLAYS)' >> $$@
+ $(hide) echo 'PRODUCT_SDK_ADDON_NAME=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_NAME)' >> $$@
+ $(hide) echo 'PRODUCT_SDK_ADDON_COPY_FILES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_COPY_FILES)' >> $$@
+ $(hide) echo 'PRODUCT_SDK_ADDON_COPY_MODULES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_COPY_MODULES)' >> $$@
+ $(hide) echo 'PRODUCT_SDK_ADDON_DOC_MODULES=$(call get-product-var,$(1),PRODUCT_SDK_ADDON_DOC_MODULES)' >> $$@
+ $(hide) echo 'PRODUCT_DEFAULT_WIFI_CHANNELS=$(call get-product-var,$(1),PRODUCT_DEFAULT_WIFI_CHANNELS)' >> $$@
+ $(hide) echo 'PRODUCT_DEFAULT_DEV_CERTIFICATE=$(call get-product-var,$(1),PRODUCT_DEFAULT_DEV_CERTIFICATE)' >> $$@
+ $(hide) echo 'PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES=$(call get-product-var,$(1),PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES)' >> $$@
+ $(hide) echo 'PRODUCT_RESTRICT_VENDOR_FILES=$(call get-product-var,$(1),PRODUCT_RESTRICT_VENDOR_FILES)' >> $$@
+ $(hide) echo 'PRODUCT_VENDOR_KERNEL_HEADERS=$(call get-product-var,$(1),PRODUCT_VENDOR_KERNEL_HEADERS)' >> $$@
$(call product-debug-filename, $(p)): \
$(OUT_DIR)/products/$(strip $(1)).txt \
diff --git a/core/product.mk b/core/product.mk
index 2c89fab4a6..102e6a5c19 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -376,13 +376,16 @@ _product_single_value_vars += PRODUCT_VIRTUAL_AB_OTA
# If set, device retrofits virtual A/B.
_product_single_value_vars += PRODUCT_VIRTUAL_AB_OTA_RETROFIT
+# If set, Java module in product partition cannot use hidden APIs.
+_product_single_value_vars += PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE
+
.KATI_READONLY := _product_single_value_vars _product_list_vars
_product_var_list :=$= $(_product_single_value_vars) $(_product_list_vars)
define dump-product
$(warning ==== $(1) ====)\
$(foreach v,$(_product_var_list),\
-$(warning PRODUCTS.$(1).$(v) := $(PRODUCTS.$(1).$(v))))\
+$(warning PRODUCTS.$(1).$(v) := $(call get-product-var,$(1),$(v))))\
$(warning --------)
endef
@@ -547,6 +550,8 @@ define readonly-final-product-vars
$(call readonly-variables,$(_readonly_late_variables))
endef
+# Macro re-defined inside strip-product-vars.
+get-product-var = $(PRODUCTS.$(strip $(1)).$(2))
#
# Strip the variables in _product_var_list and a few build-system
# internal variables, and assign the ones for the current product
@@ -558,6 +563,8 @@ $(foreach v,\
PRODUCT_ENFORCE_PACKAGES_EXIST \
PRODUCT_ENFORCE_PACKAGES_EXIST_WHITELIST, \
$(eval $(v) := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).$(v)))) \
+ $(eval get-product-var = $$(if $$(filter $$(1),$$(INTERNAL_PRODUCT)),$$($$(2)),$$(PRODUCTS.$$(strip $$(1)).$$(2)))) \
+ $(KATI_obsolete_var PRODUCTS.$(INTERNAL_PRODUCT).$(v),Use $(v) instead) \
)
endef
diff --git a/core/product_config.mk b/core/product_config.mk
index 1293c94fcf..4fc7bf6a2f 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -184,6 +184,18 @@ current_product_makefile :=
all_product_makefiles :=
all_product_configs :=
+# Jacoco agent JARS to be built and installed, if any.
+ifeq ($(EMMA_INSTRUMENT),true)
+ ifneq ($(EMMA_INSTRUMENT_STATIC),true)
+ # For instrumented build, if Jacoco is not being included statically
+ # in instrumented packages then include Jacoco classes into the
+ # bootclasspath.
+ $(foreach product,$(PRODUCTS),\
+ $(eval PRODUCTS.$(product).PRODUCT_PACKAGES += jacocoagent)\
+ $(eval PRODUCTS.$(product).PRODUCT_BOOT_JARS += jacocoagent))
+ endif # EMMA_INSTRUMENT_STATIC
+endif # EMMA_INSTRUMENT
+
############################################################################
# Strip and assign the PRODUCT_ variables.
$(call strip-product-vars)
diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk
index 9e3f0d3a17..2d5089d0e0 100644
--- a/core/soong_cc_prebuilt.mk
+++ b/core/soong_cc_prebuilt.mk
@@ -120,11 +120,12 @@ ifeq ($(LOCAL_VNDK_DEPEND_ON_CORE_VARIANT),true)
endif
ifeq ($(LOCAL_VNDK_DEPEND_ON_CORE_VARIANT),true)
+$(LOCAL_BUILT_MODULE): PRIVATE_TOOLS_PREFIX := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)TOOLS_PREFIX)
$(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) $(LIBRARY_IDENTITY_CHECK_SCRIPT)
$(call verify-vndk-libs-identical,\
$(PRIVATE_CORE_VARIANT),\
$<,\
- $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)TOOLS_PREFIX))
+ $(PRIVATE_TOOLS_PREFIX))
$(copy-file-to-target)
else
$(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE)
@@ -219,3 +220,9 @@ installed_static_library_notice_file_targets := \
$(notice_target): | $(installed_static_library_notice_file_targets)
$(LOCAL_INSTALLED_MODULE): | $(notice_target)
+
+# Reinstall shared library dependencies of fuzz targets to /data/fuzz/ (for
+# target) or /data/ (for host).
+ifdef LOCAL_IS_FUZZ_TARGET
+$(LOCAL_INSTALLED_MODULE): $(LOCAL_FUZZ_INSTALLED_SHARED_DEPS)
+endif
diff --git a/core/soong_config.mk b/core/soong_config.mk
index bcd025ba98..7ce59f1559 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -105,6 +105,8 @@ $(call add_json_bool, EnableXOM, $(call invert_bool,$(fi
$(call add_json_list, XOMExcludePaths, $(XOM_EXCLUDE_PATHS) $(PRODUCT_XOM_EXCLUDE_PATHS))
$(call add_json_list, IntegerOverflowExcludePaths, $(INTEGER_OVERFLOW_EXCLUDE_PATHS) $(PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS))
+$(call add_json_bool, Experimental_mte, $(filter true,$(TARGET_EXPERIMENTAL_MTE)))
+
$(call add_json_bool, DisableScudo, $(filter true,$(PRODUCT_DISABLE_SCUDO)))
$(call add_json_bool, ClangTidy, $(filter 1 true,$(WITH_TIDY)))
@@ -195,6 +197,8 @@ $(foreach namespace,$(SOONG_CONFIG_NAMESPACES),\
$(call end_json_map))
$(call end_json_map)
+$(call add_json_bool, EnforceProductPartitionInterface, $(PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE))
+
$(call json_end)
$(file >$(SOONG_VARIABLES).tmp,$(json_contents))
diff --git a/core/tasks/vndk.mk b/core/tasks/vndk.mk
index 3c4d942eed..dccb5f630f 100644
--- a/core/tasks/vndk.mk
+++ b/core/tasks/vndk.mk
@@ -23,88 +23,10 @@ ifneq (,$(PLATFORM_VNDK_VERSION))
# BOARD_VNDK_RUNTIME_DISABLE must not be set to 'true'.
ifneq ($(BOARD_VNDK_RUNTIME_DISABLE),true)
-# Returns list of src:dest paths of the intermediate objs
-#
-# Args:
-# $(1): list of module and filename pairs (e.g., ld.config.txt:ld.config.27.txt ...)
-define paths-of-intermediates
-$(strip \
- $(foreach pair,$(1), \
- $(eval module := $(call word-colon,1,$(pair))) \
- $(eval built := $(ALL_MODULES.$(module).BUILT_INSTALLED)) \
- $(eval filename := $(call word-colon,2,$(pair))) \
- $(if $(wordlist 2,100,$(built)), \
- $(error Unable to handle multiple built files ($(module)): $(built))) \
- $(if $(built),$(call word-colon,1,$(built)):$(filename)) \
- ) \
-)
-endef
-
-vndk_prebuilt_txts := \
- ld.config.txt \
- vndksp.libraries.txt \
- llndk.libraries.txt
-
-vndk_snapshot_top := $(call intermediates-dir-for,PACKAGING,vndk-snapshot)
-vndk_snapshot_out := $(vndk_snapshot_top)/vndk-snapshot
-vndk_snapshot_soong_dir := $(call intermediates-dir-for,PACKAGING,vndk-snapshot-soong)
-
-#######################################
-# vndk_snapshot_zip
-vndk_snapshot_variant := $(vndk_snapshot_out)/$(TARGET_ARCH)
-vndk_snapshot_zip := $(PRODUCT_OUT)/android-vndk-$(TARGET_PRODUCT).zip
-
-$(vndk_snapshot_zip): PRIVATE_VNDK_SNAPSHOT_OUT := $(vndk_snapshot_out)
-
-deps := $(call paths-of-intermediates,$(foreach txt,$(vndk_prebuilt_txts), \
- $(txt):$(patsubst %.txt,%.$(PLATFORM_VNDK_VERSION).txt,$(txt))))
-$(vndk_snapshot_zip): PRIVATE_CONFIGS_OUT := $(vndk_snapshot_variant)/configs
-$(vndk_snapshot_zip): PRIVATE_CONFIGS_INTERMEDIATES := $(deps)
-$(vndk_snapshot_zip): $(foreach d,$(deps),$(call word-colon,1,$(d)))
-deps :=
-
-vndk_snapshot_soong_files := $(call copy-many-files, $(SOONG_VNDK_SNAPSHOT_FILES), $(vndk_snapshot_soong_dir))
-
-$(vndk_snapshot_zip): PRIVATE_VNDK_SNAPSHOT_SOONG_DIR := $(vndk_snapshot_soong_dir)
-$(vndk_snapshot_zip): PRIVATE_VNDK_SNAPSHOT_SOONG_FILES := $(sort $(vndk_snapshot_soong_files))
-$(vndk_snapshot_zip): $(vndk_snapshot_soong_files)
-
-# Args
-# $(1): destination directory
-# $(2): list of files (src:dest) to copy
-$(vndk_snapshot_zip): private-copy-intermediates = \
- $(if $(2),$(strip \
- @mkdir -p $(1) && \
- $(foreach file,$(2), \
- cp $(call word-colon,1,$(file)) $(call append-path,$(1),$(call word-colon,2,$(file))) && \
- ) \
- true \
- ))
-
-$(vndk_snapshot_zip): $(SOONG_ZIP)
- @echo 'Generating VNDK snapshot: $@'
- @rm -f $@
- @rm -rf $(PRIVATE_VNDK_SNAPSHOT_OUT)
- @mkdir -p $(PRIVATE_VNDK_SNAPSHOT_OUT)
- $(call private-copy-intermediates, \
- $(PRIVATE_CONFIGS_OUT),$(PRIVATE_CONFIGS_INTERMEDIATES))
- $(hide) $(SOONG_ZIP) -o $@ -C $(PRIVATE_VNDK_SNAPSHOT_OUT) -D $(PRIVATE_VNDK_SNAPSHOT_OUT) \
- -C $(PRIVATE_VNDK_SNAPSHOT_SOONG_DIR) $(foreach f,$(PRIVATE_VNDK_SNAPSHOT_SOONG_FILES),-f $(f))
-
.PHONY: vndk
-vndk: $(vndk_snapshot_zip)
-
-$(call dist-for-goals, vndk, $(vndk_snapshot_zip))
+vndk: $(SOONG_VNDK_SNAPSHOT_ZIP)
-# clear global vars
-clang-ubsan-vndk-core :=
-paths-of-intermediates :=
-vndk_prebuilt_txts :=
-vndk_snapshot_top :=
-vndk_snapshot_out :=
-vndk_snapshot_soong_dir :=
-vndk_snapshot_soong_files :=
-vndk_snapshot_variant :=
+$(call dist-for-goals, vndk, $(SOONG_VNDK_SNAPSHOT_ZIP))
else # BOARD_VNDK_RUNTIME_DISABLE is set to 'true'
error_msg := "CANNOT generate VNDK snapshot. BOARD_VNDK_RUNTIME_DISABLE must not be set to 'true'."
diff --git a/core/tasks/with-license.mk b/core/tasks/with-license.mk
new file mode 100644
index 0000000000..1f7ae893c9
--- /dev/null
+++ b/core/tasks/with-license.mk
@@ -0,0 +1,51 @@
+# Copyright (C) 2019 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.
+
+
+.PHONY: with-license
+
+name := $(TARGET_PRODUCT)
+ifeq ($(TARGET_BUILD_TYPE),debug)
+ name := $(name)_debug
+endif
+
+name := $(name)-img-$(FILE_NAME_TAG)-with-license
+
+with_license_intermediates := \
+ $(call intermediates-dir-for,PACKAGING,with_license)
+
+# Create a with-license artifact target
+license_image_input_zip := $(with_license_intermediates)/$(name).zip
+$(license_image_input_zip) : $(BUILT_TARGET_FILES_PACKAGE) $(ZIP2ZIP)
+# DO NOT PROCEED without a license file.
+ifndef VENDOR_BLOBS_NOTICE
+ @echo "with-license requires VENDOR_BLOBS_NOTICE to be set."
+ exit 1
+else
+ $(ZIP2ZIP) -i $(BUILT_TARGET_FILES_PACKAGE) -o $@ \
+ RADIO/bootloader.img:bootloader.img RADIO/radio.img:radio.img \
+ IMAGES/system.img:system.img IMAGES/vendor.img:vendor.img \
+ IMAGES/boot.img:boot.img OTA/android-info.txt:android-info.txt
+endif
+with_license_zip := $(PRODUCT_OUT)/$(name).sh
+$(with_license_zip): PRIVATE_NAME := $(name)
+$(with_license_zip): PRIVATE_INPUT_ZIP := $(license_image_input_zip)
+$(with_license_zip): PRIVATE_VENDOR_BLOBS_NOTICE := $(VENDOR_BLOBS_NOTICE)
+$(with_license_zip): $(license_image_input_zip) $(VENDOR_BLOBS_NOTICE)
+$(with_license_zip): $(HOST_OUT_EXECUTABLES)/generate-self-extracting-archive
+ # Args: <output> <input archive> <comment> <license file>
+ $(HOST_OUT_EXECUTABLES)/generate-self-extracting-archive $@ \
+ $(PRIVATE_INPUT_ZIP) $(PRIVATE_NAME) $(PRIVATE_VENDOR_BLOBS_NOTICE)
+with-license : $(with_license_zip)
+$(call dist-for-goals, with-license, $(with_license_zip))
diff --git a/envsetup.sh b/envsetup.sh
index f0c6b9bb1d..a44cd5053d 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -11,14 +11,17 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y
- tapas: tapas [<App1> <App2> ...] [arm|x86|mips|arm64|x86_64|mips64] [eng|userdebug|user]
- croot: Changes directory to the top of the tree, or a subdirectory thereof.
- m: Makes from the top of the tree.
-- mm: Builds all of the modules in the current directory, but not their dependencies.
-- mmm: Builds all of the modules in the supplied directories, but not their dependencies.
+- mm: Builds and installs all of the modules in the current directory, and their
+ dependencies.
+- mmm: Builds and installs all of the modules in the supplied directories, and their
+ dependencies.
To limit the modules being built use the syntax: mmm dir/:target1,target2.
-- mma: Builds all of the modules in the current directory, and their dependencies.
-- mmma: Builds all of the modules in the supplied directories, and their dependencies.
+- mma: Same as 'mm'
+- mmma: Same as 'mmm'
- provision: Flash device with all required partitions. Options will be passed on to fastboot.
- cgrep: Greps on all local C/C++ files.
- ggrep: Greps on all local Gradle files.
+- gogrep: Greps on all local Go files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- mangrep: Greps on all local AndroidManifest.xml files.
@@ -968,6 +971,12 @@ function ggrep()
-exec grep --color -n "$@" {} +
}
+function gogrep()
+{
+ find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.go" \
+ -exec grep --color -n "$@" {} +
+}
+
function jgrep()
{
find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.java" \
@@ -1016,7 +1025,7 @@ case `uname -s` in
Darwin)
function mgrep()
{
- find -E . -name .repo -prune -o -name .git -prune -o -path ./out -prune -o \( -iregex '.*/(Makefile|Makefile\..*|.*\.make|.*\.mak|.*\.mk|.*\.bp)' -o -regex '(.*/)?soong/[^/]*.go' \) -type f \
+ find -E . -name .repo -prune -o -name .git -prune -o -path ./out -prune -o \( -iregex '.*/(Makefile|Makefile\..*|.*\.make|.*\.mak|.*\.mk|.*\.bp)' -o -regex '(.*/)?(build|soong)/.*[^/]*\.go' \) -type f \
-exec grep --color -n "$@" {} +
}
@@ -1030,7 +1039,7 @@ case `uname -s` in
*)
function mgrep()
{
- find . -name .repo -prune -o -name .git -prune -o -path ./out -prune -o \( -regextype posix-egrep -iregex '(.*\/Makefile|.*\/Makefile\..*|.*\.make|.*\.mak|.*\.mk|.*\.bp)' -o -regextype posix-extended -regex '(.*/)?soong/[^/]*.go' \) -type f \
+ find . -name .repo -prune -o -name .git -prune -o -path ./out -prune -o \( -regextype posix-egrep -iregex '(.*\/Makefile|.*\/Makefile\..*|.*\.make|.*\.mak|.*\.mk|.*\.bp)' -o -regextype posix-extended -regex '(.*/)?(build|soong)/.*[^/]*\.go' \) -type f \
-exec grep --color -n "$@" {} +
}
diff --git a/target/product/aosp_arm64.mk b/target/product/aosp_arm64.mk
index cc4785a24c..dda805fddf 100644
--- a/target/product/aosp_arm64.mk
+++ b/target/product/aosp_arm64.mk
@@ -39,9 +39,6 @@ ifeq (aosp_arm64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
endif
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
-
#
# All components inherited here go to product image
#
diff --git a/target/product/aosp_x86_64.mk b/target/product/aosp_x86_64.mk
index a47170207b..153f499a69 100644
--- a/target/product/aosp_x86_64.mk
+++ b/target/product/aosp_x86_64.mk
@@ -39,9 +39,6 @@ ifeq (aosp_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
endif
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
-
#
# All components inherited here go to product image
#
diff --git a/target/product/base_system.mk b/target/product/base_system.mk
index ae72e04aec..833bf0ffc1 100644
--- a/target/product/base_system.mk
+++ b/target/product/base_system.mk
@@ -16,7 +16,6 @@
# Base modules and settings for the system partition.
PRODUCT_PACKAGES += \
- adbd \
adbd_system_binaries \
am \
android.hidl.allocator@1.0-service \
@@ -48,6 +47,7 @@ PRODUCT_PACKAGES += \
cgroups.json \
charger \
cmd \
+ com.android.adbd \
com.android.apex.cts.shim.v1_prebuilt \
com.android.conscrypt \
com.android.i18n \
@@ -75,7 +75,7 @@ PRODUCT_PACKAGES += \
ExtServices \
ExtShared \
flags_health_check \
- framework \
+ framework-minus-apex \
framework-res \
framework-sysconfig.xml \
fsck_msdos \
@@ -206,7 +206,7 @@ PRODUCT_PACKAGES += \
mtpd \
ndc \
netd \
- NetworkStack \
+ NetworkStackNext \
org.apache.http.legacy \
otacerts \
PackageInstaller \
@@ -316,7 +316,7 @@ endif
# The order matters for runtime class lookup performance.
PRODUCT_BOOT_JARS := \
$(TARGET_CORE_JARS) \
- framework \
+ framework-minus-apex \
ext \
telephony-common \
voip-common \
diff --git a/target/product/emulator.mk b/target/product/emulator.mk
index 7ff01cd9f8..52fa1a7c91 100644
--- a/target/product/emulator.mk
+++ b/target/product/emulator.mk
@@ -20,8 +20,6 @@
# Device modules
PRODUCT_PACKAGES += \
- libGLES_android \
- vintf \
CarrierConfig \
# need this for gles libraries to load properly
diff --git a/target/product/emulator_vendor.mk b/target/product/emulator_vendor.mk
index e67124eb43..7891a2697e 100644
--- a/target/product/emulator_vendor.mk
+++ b/target/product/emulator_vendor.mk
@@ -21,21 +21,6 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
-# TODO(b/123495142): these files should be clean up
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST := \
- system/bin/vintf \
- system/etc/permissions/android.software.verified_boot.xml \
- system/etc/permissions/privapp-permissions-goldfish.xml \
- system/lib/egl/libGLES_android.so \
- system/lib64/egl/libGLES_android.so \
- system/priv-app/SdkSetup/SdkSetup.apk \
- system/priv-app/SdkSetup/oat/% \
-
-# Device modules
-PRODUCT_PACKAGES += \
- libGLES_android \
- vintf \
-
# need this for gles libraries to load properly
# after moving to /vendor/lib/
PRODUCT_PACKAGES += \
diff --git a/target/product/gsi/Android.mk b/target/product/gsi/Android.mk
index 2b288e6b24..536fe0c9a8 100644
--- a/target/product/gsi/Android.mk
+++ b/target/product/gsi/Android.mk
@@ -1,20 +1,8 @@
LOCAL_PATH:= $(call my-dir)
#####################################################################
-# Create the list of vndk libraries from the source code.
-INTERNAL_VNDK_LIB_LIST := $(call intermediates-dir-for,PACKAGING,vndk)/libs.txt
-$(INTERNAL_VNDK_LIB_LIST):
- @echo "Generate: $@"
- @mkdir -p $(dir $@)
- $(hide) echo -n > $@
- $(hide) $(foreach lib, $(filter-out libclang_rt.%,$(LLNDK_LIBRARIES)), \
- echo LLNDK: $(lib).so >> $@;)
- $(hide) $(foreach lib, $(VNDK_SAMEPROCESS_LIBRARIES), \
- echo VNDK-SP: $(lib).so >> $@;)
- $(hide) $(foreach lib, $(filter-out libclang_rt.%,$(VNDK_CORE_LIBRARIES)), \
- echo VNDK-core: $(lib).so >> $@;)
- $(hide) $(foreach lib, $(VNDK_PRIVATE_LIBRARIES), \
- echo VNDK-private: $(lib).so >> $@;)
+# list of vndk libraries from the source code.
+INTERNAL_VNDK_LIB_LIST := $(SOONG_VNDK_LIBRARIES_FILE)
#####################################################################
# This is the up-to-date list of vndk libs.
@@ -49,6 +37,9 @@ else ifeq ($(TARGET_BUILD_PDK),true)
check-vndk-list: ;
else ifeq ($(TARGET_SKIP_CURRENT_VNDK),true)
check-vndk-list: ;
+else ifeq ($(BOARD_VNDK_VERSION),)
+# b/143233626 do not check vndk-list when vndk libs are not built
+check-vndk-list: ;
else
check-vndk-list: $(check-vndk-list-timestamp)
ifneq ($(SKIP_ABI_CHECKS),true)
@@ -154,7 +145,8 @@ LOCAL_REQUIRED_MODULES += \
vndkprivate.libraries.txt \
vndkcorevariant.libraries.txt \
$(addsuffix .vendor,$(VNDK_CORE_LIBRARIES)) \
- $(addsuffix .vendor,$(VNDK_SAMEPROCESS_LIBRARIES))
+ $(addsuffix .vendor,$(VNDK_SAMEPROCESS_LIBRARIES)) \
+ com.android.vndk.current
endif
include $(BUILD_PHONY_PACKAGE)
@@ -166,8 +158,11 @@ ifneq ($(TARGET_IS_64_BIT),true)
_binder32 := _binder32
endif
endif
+# Phony targets are installed for **.libraries.txt files.
+# TODO(b/141450808): remove following VNDK phony targets when **.libraries.txt files are provided by apexes.
LOCAL_REQUIRED_MODULES := \
$(foreach vndk_ver,$(PRODUCT_EXTRA_VNDK_VERSIONS),vndk_v$(vndk_ver)_$(TARGET_ARCH)$(_binder32))
+LOCAL_REQUIRED_MODULES += $(foreach vndk_ver,$(PRODUCT_EXTRA_VNDK_VERSIONS),com.android.vndk.v$(vndk_ver))
_binder32 :=
include $(BUILD_PHONY_PACKAGE)
diff --git a/target/product/gsi/current.txt b/target/product/gsi/current.txt
index 4170de42ca..b3a0d9bc56 100644
--- a/target/product/gsi/current.txt
+++ b/target/product/gsi/current.txt
@@ -25,8 +25,8 @@ VNDK-SP: android.hardware.graphics.mapper@2.1.so
VNDK-SP: android.hardware.graphics.mapper@3.0.so
VNDK-SP: android.hardware.renderscript@1.0.so
VNDK-SP: android.hidl.memory.token@1.0.so
-VNDK-SP: android.hidl.memory@1.0.so
VNDK-SP: android.hidl.memory@1.0-impl.so
+VNDK-SP: android.hidl.memory@1.0.so
VNDK-SP: android.hidl.safe_union@1.0.so
VNDK-SP: libRSCpuRef.so
VNDK-SP: libRSDriver.so
@@ -61,12 +61,15 @@ VNDK-core: android.hardware.atrace@1.0.so
VNDK-core: android.hardware.audio.common@2.0.so
VNDK-core: android.hardware.audio.common@4.0.so
VNDK-core: android.hardware.audio.common@5.0.so
+VNDK-core: android.hardware.audio.common@6.0.so
VNDK-core: android.hardware.audio.effect@2.0.so
VNDK-core: android.hardware.audio.effect@4.0.so
VNDK-core: android.hardware.audio.effect@5.0.so
+VNDK-core: android.hardware.audio.effect@6.0.so
VNDK-core: android.hardware.audio@2.0.so
VNDK-core: android.hardware.audio@4.0.so
VNDK-core: android.hardware.audio@5.0.so
+VNDK-core: android.hardware.audio@6.0.so
VNDK-core: android.hardware.authsecret@1.0.so
VNDK-core: android.hardware.automotive.audiocontrol@1.0.so
VNDK-core: android.hardware.automotive.evs@1.0.so
@@ -95,6 +98,7 @@ VNDK-core: android.hardware.camera.provider@2.5.so
VNDK-core: android.hardware.cas.native@1.0.so
VNDK-core: android.hardware.cas@1.0.so
VNDK-core: android.hardware.cas@1.1.so
+VNDK-core: android.hardware.cas@1.2.so
VNDK-core: android.hardware.configstore-utils.so
VNDK-core: android.hardware.configstore@1.0.so
VNDK-core: android.hardware.configstore@1.1.so
@@ -157,12 +161,13 @@ VNDK-core: android.hardware.radio@1.1.so
VNDK-core: android.hardware.radio@1.2.so
VNDK-core: android.hardware.radio@1.3.so
VNDK-core: android.hardware.radio@1.4.so
+VNDK-core: android.hardware.radio@1.5.so
VNDK-core: android.hardware.secure_element@1.0.so
VNDK-core: android.hardware.secure_element@1.1.so
VNDK-core: android.hardware.sensors@1.0.so
VNDK-core: android.hardware.sensors@2.0.so
-VNDK-core: android.hardware.soundtrigger@2.0.so
VNDK-core: android.hardware.soundtrigger@2.0-core.so
+VNDK-core: android.hardware.soundtrigger@2.0.so
VNDK-core: android.hardware.soundtrigger@2.1.so
VNDK-core: android.hardware.soundtrigger@2.2.so
VNDK-core: android.hardware.tetheroffload.config@1.0.so
@@ -197,8 +202,8 @@ VNDK-core: android.hardware.wifi@1.2.so
VNDK-core: android.hardware.wifi@1.3.so
VNDK-core: android.hidl.allocator@1.0.so
VNDK-core: android.hidl.memory.block@1.0.so
-VNDK-core: android.hidl.token@1.0.so
VNDK-core: android.hidl.token@1.0-utils.so
+VNDK-core: android.hidl.token@1.0.so
VNDK-core: android.system.net.netd@1.0.so
VNDK-core: android.system.net.netd@1.1.so
VNDK-core: android.system.suspend@1.0.so
@@ -242,8 +247,8 @@ VNDK-core: libpiex.so
VNDK-core: libpng.so
VNDK-core: libpower.so
VNDK-core: libprocinfo.so
-VNDK-core: libprotobuf-cpp-full.so
-VNDK-core: libprotobuf-cpp-lite.so
+VNDK-core: libprotobuf-cpp-full-3.9.1.so
+VNDK-core: libprotobuf-cpp-lite-3.9.1.so
VNDK-core: libpuresoftkeymasterdevice.so
VNDK-core: libradio_metadata.so
VNDK-core: libselinux.so
diff --git a/target/product/gsi_arm64.mk b/target/product/gsi_arm64.mk
index 09fb633c7a..645bc3add6 100644
--- a/target/product/gsi_arm64.mk
+++ b/target/product/gsi_arm64.mk
@@ -23,9 +23,6 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/mainline_system.mk)
# Enable mainline checking
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
-
#
# All components inherited here go to product image
#
diff --git a/target/product/gsi_release.mk b/target/product/gsi_release.mk
index cab3916382..faaa9351c8 100644
--- a/target/product/gsi_release.mk
+++ b/target/product/gsi_release.mk
@@ -51,19 +51,3 @@ PRODUCT_PACKAGES += \
# Support addtional P and Q VNDK packages
PRODUCT_EXTRA_VNDK_VERSIONS := 28 29
-
-# The 64 bits GSI build targets inhiert core_64_bit.mk to enable 64 bits and
-# include the init.zygote64_32.rc.
-# 64 bits GSI for releasing need to includes different zygote settings for
-# vendor.img to select by setting property ro.zygote=zygote64_32 or
-# ro.zygote=zygote32_64:
-# 1. 64-bit primary, 32-bit secondary, or
-# 2. 32-bit primary, 64-bit secondary
-# Here includes the init.zygote32_64.rc if it had inhierted core_64_bit.mk.
-ifeq (true|true,$(TARGET_SUPPORTS_32_BIT_APPS)|$(TARGET_SUPPORTS_64_BIT_APPS))
-PRODUCT_COPY_FILES += \
- system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc
-
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote32_64.rc
-endif
diff --git a/target/product/mainline_arm64.mk b/target/product/mainline_arm64.mk
index ab3c4acdba..850c7754a5 100644
--- a/target/product/mainline_arm64.mk
+++ b/target/product/mainline_arm64.mk
@@ -19,19 +19,19 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/mainline.mk)
whitelist := product_manifest.xml
$(call enforce-product-packages-exist,$(whitelist))
-PRODUCT_NAME := mainline_arm64
-PRODUCT_DEVICE := mainline_arm64
-PRODUCT_BRAND := generic
-PRODUCT_SHIPPING_API_LEVEL := 28
-# TODO(b/137033385): change this back to "all"
-PRODUCT_RESTRICT_VENDOR_FILES := owner
-
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
# Modules that should probably be moved to /product
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
system/bin/healthd \
system/etc/init/healthd.rc \
system/etc/vintf/manifest/manifest_healthd.xml \
+
+PRODUCT_SHIPPING_API_LEVEL := 29
+
+# TODO(b/137033385): change this back to "all"
+PRODUCT_RESTRICT_VENDOR_FILES := owner
+
+PRODUCT_NAME := mainline_arm64
+PRODUCT_DEVICE := mainline_arm64
+PRODUCT_BRAND := generic
diff --git a/target/product/mainline_system.mk b/target/product/mainline_system.mk
index cd6a0f785a..f7eb8ad5b4 100644
--- a/target/product/mainline_system.mk
+++ b/target/product/mainline_system.mk
@@ -110,6 +110,13 @@ PRODUCT_PACKAGES_DEBUG += \
PRODUCT_HOST_PACKAGES += \
tinyplay
+# Include all zygote init scripts. "ro.zygote" will select one of them.
+PRODUCT_COPY_FILES += \
+ system/core/rootdir/init.zygote32.rc:root/init.zygote32.rc \
+ system/core/rootdir/init.zygote64.rc:root/init.zygote64.rc \
+ system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc \
+ system/core/rootdir/init.zygote64_32.rc:root/init.zygote64_32.rc
+
# Enable dynamic partition size
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
diff --git a/target/product/mainline_system_arm64.mk b/target/product/mainline_system_arm64.mk
index f75b21e2ce..60035c13ea 100644
--- a/target/product/mainline_system_arm64.mk
+++ b/target/product/mainline_system_arm64.mk
@@ -23,8 +23,6 @@ $(call enforce-product-packages-exist,)
# Enable mainline checking
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := true
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
PRODUCT_BUILD_CACHE_IMAGE := false
PRODUCT_BUILD_ODM_IMAGE := false
@@ -36,9 +34,11 @@ PRODUCT_BUILD_SYSTEM_OTHER_IMAGE := false
PRODUCT_BUILD_USERDATA_IMAGE := false
PRODUCT_BUILD_VENDOR_IMAGE := false
+PRODUCT_SHIPPING_API_LEVEL := 29
+
+# TODO(b/137033385): change this back to "all"
+PRODUCT_RESTRICT_VENDOR_FILES := owner
+
PRODUCT_NAME := mainline_system_arm64
PRODUCT_DEVICE := mainline_arm64
PRODUCT_BRAND := generic
-PRODUCT_SHIPPING_API_LEVEL := 28
-# TODO(b/137033385): change this back to "all"
-PRODUCT_RESTRICT_VENDOR_FILES := owner
diff --git a/target/product/mainline_system_x86.mk b/target/product/mainline_system_x86.mk
index 830a2ed354..a30a1fcb4f 100644
--- a/target/product/mainline_system_x86.mk
+++ b/target/product/mainline_system_x86.mk
@@ -33,9 +33,11 @@ PRODUCT_BUILD_SYSTEM_OTHER_IMAGE := false
PRODUCT_BUILD_USERDATA_IMAGE := false
PRODUCT_BUILD_VENDOR_IMAGE := false
+PRODUCT_SHIPPING_API_LEVEL := 29
+
+# TODO(b/137033385): change this back to "all"
+PRODUCT_RESTRICT_VENDOR_FILES := owner
+
PRODUCT_NAME := mainline_system_x86
PRODUCT_DEVICE := mainline_x86
PRODUCT_BRAND := generic
-PRODUCT_SHIPPING_API_LEVEL := 28
-# TODO(b/137033385): change this back to "all"
-PRODUCT_RESTRICT_VENDOR_FILES := owner
diff --git a/target/product/mainline_system_x86_arm.mk b/target/product/mainline_system_x86_arm.mk
index 3c06652d97..2e01cde768 100644
--- a/target/product/mainline_system_x86_arm.mk
+++ b/target/product/mainline_system_x86_arm.mk
@@ -33,9 +33,11 @@ PRODUCT_BUILD_SYSTEM_OTHER_IMAGE := false
PRODUCT_BUILD_USERDATA_IMAGE := false
PRODUCT_BUILD_VENDOR_IMAGE := false
+PRODUCT_SHIPPING_API_LEVEL := 29
+
+# TODO(b/137033385): change this back to "all"
+PRODUCT_RESTRICT_VENDOR_FILES := owner
+
PRODUCT_NAME := mainline_system_x86_arm
PRODUCT_DEVICE := mainline_x86_arm
PRODUCT_BRAND := generic
-PRODUCT_SHIPPING_API_LEVEL := 28
-# TODO(b/137033385): change this back to "all"
-PRODUCT_RESTRICT_VENDOR_FILES := owner
diff --git a/target/product/sdk_phone_x86_64.mk b/target/product/sdk_phone_x86_64.mk
index 267796f39c..2d0d6e1380 100644
--- a/target/product/sdk_phone_x86_64.mk
+++ b/target/product/sdk_phone_x86_64.mk
@@ -27,9 +27,6 @@ ifeq (sdk_phone_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
endif
-PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
- root/init.zygote64_32.rc \
-
#
# All components inherited here go to product image
#
diff --git a/target/product/telephony_system.mk b/target/product/telephony_system.mk
index 4da9bdfb47..737436a09b 100644
--- a/target/product/telephony_system.mk
+++ b/target/product/telephony_system.mk
@@ -22,5 +22,6 @@ PRODUCT_PACKAGES := \
CarrierDefaultApp \
CallLogBackup \
CellBroadcastAppPlatform \
+ CellBroadcastServiceModule \
PRODUCT_COPY_FILES := \
diff --git a/tools/Android.bp b/tools/Android.bp
new file mode 100644
index 0000000000..8c7eb38373
--- /dev/null
+++ b/tools/Android.bp
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 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.
+
+python_binary_host {
+ name: "generate-self-extracting-archive",
+ srcs: ["generate-self-extracting-archive.py"],
+ version: {
+ py2: {
+ enabled: true,
+ },
+ py3: {
+ enabled: false,
+ },
+ },
+}
diff --git a/tools/releasetools/Android.bp b/tools/releasetools/Android.bp
index 6cde77e853..90a6485d63 100644
--- a/tools/releasetools/Android.bp
+++ b/tools/releasetools/Android.bp
@@ -264,6 +264,19 @@ python_binary_host {
}
python_binary_host {
+ name: "check_partition_sizes",
+ srcs: [
+ "check_partition_sizes.py",
+ ],
+ libs: [
+ "releasetools_common",
+ ],
+ defaults: [
+ "releasetools_binary_defaults",
+ ],
+}
+
+python_binary_host {
name: "check_ota_package_signature",
defaults: ["releasetools_binary_defaults"],
srcs: [
@@ -419,6 +432,7 @@ python_defaults {
name: "releasetools_test_defaults",
srcs: [
"check_ota_package_signature.py",
+ "check_partition_sizes.py",
"check_target_files_signatures.py",
"make_recovery_patch.py",
"merge_target_files.py",
diff --git a/tools/releasetools/check_partition_sizes.py b/tools/releasetools/check_partition_sizes.py
new file mode 100644
index 0000000000..745c136e90
--- /dev/null
+++ b/tools/releasetools/check_partition_sizes.py
@@ -0,0 +1,276 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2019 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.
+
+"""
+Check dynamic partition sizes.
+
+usage: check_partition_sizes [info.txt]
+
+Check dump-super-partitions-info procedure for expected keys in info.txt. In
+addition, *_image (e.g. system_image, vendor_image, etc.) must be defined for
+each partition in dynamic_partition_list.
+
+Exit code is 0 if successful and non-zero if any failures.
+"""
+
+from __future__ import print_function
+
+import logging
+import sys
+
+import common
+import sparse_img
+
+if sys.hexversion < 0x02070000:
+ print("Python 2.7 or newer is required.", file=sys.stderr)
+ sys.exit(1)
+
+logger = logging.getLogger(__name__)
+
+class Expression(object):
+ def __init__(self, desc, expr, value=None):
+ # Human-readable description
+ self.desc = str(desc)
+ # Numeric expression
+ self.expr = str(expr)
+ # Value of expression
+ self.value = int(expr) if value is None else value
+
+ def CheckLe(self, other, level=logging.ERROR):
+ format_args = (self.desc, other.desc, self.expr, self.value,
+ other.expr, other.value)
+ if self.value <= other.value:
+ logger.info("%s is less than or equal to %s:\n%s == %d <= %s == %d",
+ *format_args)
+ else:
+ msg = "{} is greater than {}:\n{} == {} > {} == {}".format(*format_args)
+ if level == logging.ERROR:
+ raise RuntimeError(msg)
+ else:
+ logger.log(level, msg)
+
+ def CheckEq(self, other):
+ format_args = (self.desc, other.desc, self.expr, self.value,
+ other.expr, other.value)
+ if self.value == other.value:
+ logger.info("%s equals %s:\n%s == %d == %s == %d", *format_args)
+ else:
+ raise RuntimeError("{} does not equal {}:\n{} == {} != {} == {}".format(
+ *format_args))
+
+
+# A/B feature flags
+class DeviceType(object):
+ NONE = 0
+ AB = 1
+ RVAB = 2 # retrofit Virtual-A/B
+ VAB = 3
+
+ @staticmethod
+ def Get(info_dict):
+ if info_dict.get("ab_update") != "true":
+ return DeviceType.NONE
+ if info_dict.get("virtual_ab_retrofit") == "true":
+ return DeviceType.RVAB
+ if info_dict.get("virtual_ab") == "true":
+ return DeviceType.VAB
+ return DeviceType.AB
+
+
+# Dynamic partition feature flags
+class Dap(object):
+ NONE = 0
+ RDAP = 1
+ DAP = 2
+
+ @staticmethod
+ def Get(info_dict):
+ if info_dict.get("use_dynamic_partitions") != "true":
+ return Dap.NONE
+ if info_dict.get("dynamic_partition_retrofit") == "true":
+ return Dap.RDAP
+ return Dap.DAP
+
+
+class DynamicPartitionSizeChecker(object):
+ def __init__(self, info_dict):
+ if "super_partition_size" in info_dict:
+ if "super_partition_warn_limit" not in info_dict:
+ info_dict["super_partition_warn_limit"] = \
+ int(info_dict["super_partition_size"]) * 95 // 100
+ if "super_partition_error_limit" not in info_dict:
+ info_dict["super_partition_error_limit"] = \
+ int(info_dict["super_partition_size"])
+ self.info_dict = info_dict
+
+
+ def _ReadSizeOfPartition(self, name):
+ # Tests uses *_image_size instead (to avoid creating empty sparse images
+ # on disk)
+ if name + "_image_size" in self.info_dict:
+ return int(self.info_dict[name + "_image_size"])
+ return sparse_img.GetImagePartitionSize(self.info_dict[name + "_image"])
+
+
+ # Round result to BOARD_SUPER_PARTITION_ALIGNMENT
+ def _RoundPartitionSize(self, size):
+ alignment = self.info_dict.get("super_partition_alignment")
+ if alignment is None:
+ return size
+ return (size + alignment - 1) // alignment * alignment
+
+
+ def _CheckSuperPartitionSize(self):
+ info_dict = self.info_dict
+ super_block_devices = \
+ info_dict.get("super_block_devices", "").strip().split()
+ size_list = [int(info_dict.get("super_{}_device_size".format(b), "0"))
+ for b in super_block_devices]
+ sum_size = Expression("sum of super partition block device sizes",
+ "+".join(str(size) for size in size_list),
+ sum(size_list))
+ super_partition_size = Expression("BOARD_SUPER_PARTITION_SIZE",
+ info_dict["super_partition_size"])
+ sum_size.CheckEq(super_partition_size)
+
+ def _CheckSumOfPartitionSizes(self, max_size, partition_names,
+ warn_size=None, error_size=None):
+ partition_size_list = [self._RoundPartitionSize(
+ self._ReadSizeOfPartition(p)) for p in partition_names]
+ sum_size = Expression("sum of sizes of {}".format(partition_names),
+ "+".join(str(size) for size in partition_size_list),
+ sum(partition_size_list))
+ sum_size.CheckLe(max_size)
+ if error_size:
+ sum_size.CheckLe(error_size)
+ if warn_size:
+ sum_size.CheckLe(warn_size, level=logging.WARNING)
+
+ def _NumDeviceTypesInSuper(self):
+ slot = DeviceType.Get(self.info_dict)
+ dap = Dap.Get(self.info_dict)
+
+ if dap == Dap.NONE:
+ raise RuntimeError("check_partition_sizes should only be executed on "
+ "builds with dynamic partitions enabled")
+
+ # Retrofit dynamic partitions: 1 slot per "super", 2 "super"s on the device
+ if dap == Dap.RDAP:
+ if slot != DeviceType.AB:
+ raise RuntimeError("Device with retrofit dynamic partitions must use "
+ "regular (non-Virtual) A/B")
+ return 1
+
+ # Launch DAP: 1 super on the device
+ assert dap == Dap.DAP
+
+ # DAP + A/B: 2 slots in super
+ if slot == DeviceType.AB:
+ return 2
+
+ # DAP + retrofit Virtual A/B: same as A/B
+ if slot == DeviceType.RVAB:
+ return 2
+
+ # DAP + Launch Virtual A/B: 1 *real* slot in super (2 virtual slots)
+ if slot == DeviceType.VAB:
+ return 1
+
+ # DAP + non-A/B: 1 slot in super
+ assert slot == DeviceType.NONE
+ return 1
+
+ def _CheckAllPartitionSizes(self):
+ info_dict = self.info_dict
+ num_slots = self._NumDeviceTypesInSuper()
+ size_limit_suffix = (" / %d" % num_slots) if num_slots > 1 else ""
+
+ # Check sum(all partitions) <= super partition (/ 2 for A/B devices launched
+ # with dynamic partitions)
+ if "super_partition_size" in info_dict and \
+ "dynamic_partition_list" in info_dict:
+ max_size = Expression(
+ "BOARD_SUPER_PARTITION_SIZE{}".format(size_limit_suffix),
+ int(info_dict["super_partition_size"]) // num_slots)
+ warn_limit = Expression(
+ "BOARD_SUPER_PARTITION_WARN_LIMIT{}".format(size_limit_suffix),
+ int(info_dict["super_partition_warn_limit"]) // num_slots)
+ error_limit = Expression(
+ "BOARD_SUPER_PARTITION_ERROR_LIMIT{}".format(size_limit_suffix),
+ int(info_dict["super_partition_error_limit"]) // num_slots)
+ self._CheckSumOfPartitionSizes(
+ max_size, info_dict["dynamic_partition_list"].strip().split(),
+ warn_limit, error_limit)
+
+ groups = info_dict.get("super_partition_groups", "").strip().split()
+
+ # For each group, check sum(partitions in group) <= group size
+ for group in groups:
+ if "super_{}_group_size".format(group) in info_dict and \
+ "super_{}_partition_list".format(group) in info_dict:
+ group_size = Expression(
+ "BOARD_{}_SIZE".format(group),
+ int(info_dict["super_{}_group_size".format(group)]))
+ self._CheckSumOfPartitionSizes(
+ group_size,
+ info_dict["super_{}_partition_list".format(group)].strip().split())
+
+ # Check sum(all group sizes) <= super partition (/ 2 for A/B devices
+ # launched with dynamic partitions)
+ if "super_partition_size" in info_dict:
+ group_size_list = [int(info_dict.get(
+ "super_{}_group_size".format(group), 0)) for group in groups]
+ sum_size = Expression("sum of sizes of {}".format(groups),
+ "+".join(str(size) for size in group_size_list),
+ sum(group_size_list))
+ max_size = Expression(
+ "BOARD_SUPER_PARTITION_SIZE{}".format(size_limit_suffix),
+ int(info_dict["super_partition_size"]) // num_slots)
+ sum_size.CheckLe(max_size)
+
+ def Run(self):
+ self._CheckAllPartitionSizes()
+ if self.info_dict.get("dynamic_partition_retrofit") == "true":
+ self._CheckSuperPartitionSize()
+
+
+def CheckPartitionSizes(inp):
+ if isinstance(inp, str):
+ info_dict = common.LoadDictionaryFromFile(inp)
+ return DynamicPartitionSizeChecker(info_dict).Run()
+ if isinstance(inp, dict):
+ return DynamicPartitionSizeChecker(inp).Run()
+ raise ValueError("{} is not a dictionary or a valid path".format(inp))
+
+
+def main(argv):
+ args = common.ParseOptions(argv, __doc__)
+ if len(args) != 1:
+ common.Usage(__doc__)
+ sys.exit(1)
+ common.InitLogging()
+ CheckPartitionSizes(args[0])
+
+
+if __name__ == "__main__":
+ try:
+ common.CloseInheritedPipes()
+ main(sys.argv[1:])
+ except common.ExternalError:
+ logger.exception("\n ERROR:\n")
+ sys.exit(1)
+ finally:
+ common.Cleanup()
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index dfcfb49378..7a0d99406e 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -1635,6 +1635,10 @@ def GetTargetFilesZipForSecondaryImages(input_file, skip_postinstall=False):
partitions = [partition for partition in partitions if partition
not in SECONDARY_PAYLOAD_SKIPPED_IMAGES]
output_list.append('{}={}'.format(key, ' '.join(partitions)))
+ elif key == 'virtual_ab' or key == "virtual_ab_retrofit":
+ # Remove virtual_ab flag from secondary payload so that OTA client
+ # don't use snapshots for secondary update
+ pass
else:
output_list.append(line)
return '\n'.join(output_list)
diff --git a/tools/releasetools/test_check_partition_sizes.py b/tools/releasetools/test_check_partition_sizes.py
new file mode 100644
index 0000000000..ed20873acb
--- /dev/null
+++ b/tools/releasetools/test_check_partition_sizes.py
@@ -0,0 +1,128 @@
+#
+# Copyright (C) 2019 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.
+#
+
+import common
+import test_utils
+from check_partition_sizes import CheckPartitionSizes
+
+class CheckPartitionSizesTest(test_utils.ReleaseToolsTestCase):
+ def setUp(self):
+ self.info_dict = common.LoadDictionaryFromLines("""
+ use_dynamic_partitions=true
+ ab_update=true
+ super_block_devices=super
+ dynamic_partition_list=system vendor product
+ super_partition_groups=group
+ super_group_partition_list=system vendor product
+ super_partition_size=200
+ super_super_device_size=200
+ super_group_group_size=100
+ system_image_size=50
+ vendor_image_size=20
+ product_image_size=20
+ """.split("\n"))
+
+ def test_ab(self):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_non_ab(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ ab_update=false
+ super_partition_size=100
+ super_super_device_size=100
+ """.split("\n")))
+ CheckPartitionSizes(self.info_dict)
+
+ def test_non_dap(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ use_dynamic_partitions=false
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_retrofit_dap(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ dynamic_partition_retrofit=true
+ super_block_devices=system vendor
+ super_system_device_size=75
+ super_vendor_device_size=25
+ super_partition_size=100
+ """.split("\n")))
+ CheckPartitionSizes(self.info_dict)
+
+ def test_ab_partition_too_big(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ system_image_size=100
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_ab_group_too_big(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ super_group_group_size=110
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_no_image(self):
+ del self.info_dict["system_image_size"]
+ with self.assertRaises(KeyError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_block_devices_not_match(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ dynamic_partition_retrofit=true
+ super_block_devices=system vendor
+ super_system_device_size=80
+ super_vendor_device_size=25
+ super_partition_size=100
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_retrofit_vab(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ virtual_ab=true
+ virtual_ab_retrofit=true
+ """.split("\n")))
+ CheckPartitionSizes(self.info_dict)
+
+ def test_retrofit_vab_too_big(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ virtual_ab=true
+ virtual_ab_retrofit=true
+ system_image_size=100
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)
+
+ def test_vab(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ virtual_ab=true
+ super_partition_size=100
+ super_super_device_size=100
+ """.split("\n")))
+ CheckPartitionSizes(self.info_dict)
+
+ def test_vab_too_big(self):
+ self.info_dict.update(common.LoadDictionaryFromLines("""
+ virtual_ab=true
+ super_partition_size=100
+ super_super_device_size=100
+ system_image_size=100
+ """.split("\n")))
+ with self.assertRaises(RuntimeError):
+ CheckPartitionSizes(self.info_dict)