From 9be20c7650e140a1b2c30d2da2ed437b98772496 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Mon, 8 Apr 2019 21:11:59 -0700 Subject: [PATCH] Allow building generic OTA packages. We already have targets that build generic system images, which can be applied (flashed) onto matching devices to replace their target-specific system images. This CL adds PRODUCT_BUILD_GENERIC_OTA_PACKAGE that allows building generic OTA packages to be installed over-the-air. Since A/B and non-A/B OTAs have different package formats, currently the support is limited to targets that use A/B OTAs. Note that this CL only allows _building_ the package - will need additional changes for the actual package install as well as targeting matching devices. Bug: 122851610 Test: `m otapackage` on a target that sets `PRODUCT_BUILD_GENERIC_OTA_PACKAGE := true`. Test: TreeHugger Change-Id: If6fd2da15d24c5aaee09618efe94514c6d83292d --- core/Makefile | 27 ++++++++++++++++----------- core/board_config.mk | 7 +++++++ core/product.mk | 5 +++++ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/core/Makefile b/core/Makefile index 0ccd719c60..78ef81fba1 100644 --- a/core/Makefile +++ b/core/Makefile @@ -3445,7 +3445,7 @@ ifeq ($(BUILD_OS),darwin) build_ota_package := false build_otatools_package := false else - # set build_ota_package, and allow opt-out below + # Set build_ota_package, and allow opt-out below. build_ota_package := true ifeq ($(TARGET_SKIP_OTA_PACKAGE),true) build_ota_package := false @@ -3456,20 +3456,22 @@ else ifeq ($(TARGET_PRODUCT),sdk) build_ota_package := false endif - ifneq ($(filter generic%,$(TARGET_DEVICE)),) - build_ota_package := false - endif - ifeq ($(TARGET_NO_KERNEL),true) - build_ota_package := false - endif - ifeq ($(recovery_fstab),) - build_ota_package := false - endif ifeq ($(TARGET_BUILD_PDK),true) build_ota_package := false endif + ifneq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true) + ifneq ($(filter generic%,$(TARGET_DEVICE)),) + build_ota_package := false + endif + ifeq ($(TARGET_NO_KERNEL),true) + build_ota_package := false + endif + ifeq ($(recovery_fstab),) + build_ota_package := false + endif + endif # PRODUCT_BUILD_GENERIC_OTA_PACKAGE - # set build_otatools_package, and allow opt-out below + # Set build_otatools_package, and allow opt-out below. build_otatools_package := true ifeq ($(TARGET_SKIP_OTATOOLS_PACKAGE),true) build_otatools_package := false @@ -3925,6 +3927,9 @@ endif $(hide) echo 'mkbootimg_version_args=$(INTERNAL_MKBOOTIMG_VERSION_ARGS)' >> $(zip_root)/META/misc_info.txt $(hide) echo "multistage_support=1" >> $(zip_root)/META/misc_info.txt $(hide) echo "blockimgdiff_versions=3,4" >> $(zip_root)/META/misc_info.txt +ifeq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true) + $(hide) echo "build_generic_ota_package=true" >> $(zip_root)/META/misc_info.txt +endif ifneq ($(OEM_THUMBPRINT_PROPERTIES),) # OTA scripts are only interested in fingerprint related properties $(hide) echo "oem_fingerprint_properties=$(OEM_THUMBPRINT_PROPERTIES)" >> $(zip_root)/META/misc_info.txt diff --git a/core/board_config.mk b/core/board_config.mk index 6f04fb370f..9ea3509cbb 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -475,6 +475,13 @@ ifeq ($(AB_OTA_UPDATER),true) endif endif +# Sanity check for building generic OTA packages. Currently it only supports A/B OTAs. +ifeq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true) + ifneq ($(AB_OTA_UPDATER),true) + $(error PRODUCT_BUILD_GENERIC_OTA_PACKAGE with 'AB_OTA_UPDATER != true' is not supported) + endif +endif + # Check BOARD_VNDK_VERSION define check_vndk_version $(eval vndk_path := prebuilts/vndk/v$(1)) \ diff --git a/core/product.mk b/core/product.mk index 29bd1d1e40..777d2bc0f6 100644 --- a/core/product.mk +++ b/core/product.mk @@ -322,6 +322,11 @@ _product_var_list += \ # set this variable to prevent OTA failures. _product_var_list += PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS +# If set to true, this product builds a generic OTA package, which installs generic system images +# onto matching devices. The product may only build a subset of system images (e.g. only +# system.img), so devices need to install the package in a system-only OTA manner. +_product_var_list += PRODUCT_BUILD_GENERIC_OTA_PACKAGE + # Whether any paths are excluded from being set XOM when ENABLE_XOM=true _product_var_list += PRODUCT_XOM_EXCLUDE_PATHS _product_var_list += PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES