From a784ef197c6ba7d33aa17c6812c953f78fab7c62 Mon Sep 17 00:00:00 2001 From: Chris Gross Date: Mon, 22 Apr 2019 11:09:57 -0700 Subject: [PATCH] Add BUILD_RECOVERY_IMAGE and BUILD_BOOT_IMAGE flags Bug: 123428770 Test: Built system-only image and checked that no boot.img or recovery.img files where created. Booted the resulting merged build on device. Change-Id: I760476502775e68125907c39e66b8665e789a798 --- core/Makefile | 36 +++++++++++-------- core/board_config.mk | 29 +++++++++++++-- core/product.mk | 3 ++ core/product_config.mk | 4 ++- tools/releasetools/add_img_to_target_files.py | 25 +++++++------ 5 files changed, 69 insertions(+), 28 deletions(-) diff --git a/core/Makefile b/core/Makefile index d51ca9d774..e05fbf27a3 100644 --- a/core/Makefile +++ b/core/Makefile @@ -459,10 +459,11 @@ endif build_desc := -ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) -INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img -else INSTALLED_RECOVERYIMAGE_TARGET := +ifdef BUILDING_RECOVERY_IMAGE +ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true) +INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img +endif endif $(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET) @@ -900,13 +901,14 @@ ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP) endif # BUILDING_RAMDISK_IMAGE - -INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img - -ifneq ($(strip $(TARGET_NO_KERNEL)),true) - # ----------------------------------------------------------------- # the boot image, which is a collection of other images. + +# This is defined here since we may be building recovery as boot +# below and only want to define this once +BUILT_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img + +ifneq ($(strip $(TARGET_NO_KERNEL)),true) INTERNAL_BOOTIMAGE_ARGS := \ $(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \ --kernel $(INSTALLED_KERNEL_TARGET) @@ -945,8 +947,10 @@ INTERNAL_MKBOOTIMG_VERSION_ARGS := \ --os_version $(PLATFORM_VERSION) \ --os_patch_level $(PLATFORM_SECURITY_PATCH) -# We build recovery as boot image if BOARD_USES_RECOVERY_AS_BOOT is true. -ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true) +# Define these only if we are building boot +ifdef BUILDING_BOOT_IMAGE +INSTALLED_BOOTIMAGE_TARGET := $(BUILT_BOOTIMAGE_TARGET) + ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true) $(error TARGET_BOOTIMAGE_USE_EXT2 is not supported anymore) @@ -1017,7 +1021,7 @@ bootimage-nodeps: $(MKBOOTIMG) $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) endif # TARGET_BOOTIMAGE_USE_EXT2 -endif # BOARD_USES_RECOVERY_AS_BOOT +endif # BUILDING_BOOT_IMAGE else # TARGET_NO_KERNEL == "true" ifdef BOARD_PREBUILT_BOOTIMAGE @@ -1493,7 +1497,7 @@ endef # Recovery image # Recovery image exists if we are building recovery, or building recovery as boot. -ifneq (,$(INSTALLED_RECOVERYIMAGE_TARGET)$(filter true,$(BOARD_USES_RECOVERY_AS_BOOT))) +ifdef BUILDING_RECOVERY_IMAGE INTERNAL_RECOVERYIMAGE_FILES := $(filter $(TARGET_RECOVERY_OUT)/%, \ $(ALL_DEFAULT_INSTALLED_MODULES)) @@ -1506,6 +1510,7 @@ INSTALLED_FILES_JSON_RECOVERY := $(INSTALLED_FILES_FILE_RECOVERY:.txt=.json) # build-recoveryimage-target, which would touch the files under TARGET_RECOVERY_OUT and race with # the call to FILELIST. ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) +INSTALLED_BOOTIMAGE_TARGET := $(BUILT_BOOTIMAGE_TARGET) $(INSTALLED_FILES_FILE_RECOVERY): $(INSTALLED_BOOTIMAGE_TARGET) else $(INSTALLED_FILES_FILE_RECOVERY): $(INSTALLED_RECOVERYIMAGE_TARGET) @@ -1924,9 +1929,9 @@ recoveryimage-nodeps: @echo "make $@: ignoring dependencies" $(call build-recoveryimage-target, $(INSTALLED_RECOVERYIMAGE_TARGET)) -else # INSTALLED_RECOVERYIMAGE_TARGET not defined +else # BUILDING_RECOVERY_IMAGE RECOVERY_RESOURCE_ZIP := -endif +endif # BUILDING_RECOVERY_IMAGE .PHONY: recoveryimage recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET) $(RECOVERY_RESOURCE_ZIP) @@ -3908,6 +3913,9 @@ endif ifdef BOARD_BOOTIMAGE_PARTITION_SIZE $(hide) echo "boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt endif +ifeq ($(INSTALLED_BOOTIMAGE_TARGET),) + $(hide) echo "no_boot=true" >> $(zip_root)/META/misc_info.txt +endif ifeq ($(INSTALLED_RECOVERYIMAGE_TARGET),) $(hide) echo "no_recovery=true" >> $(zip_root)/META/misc_info.txt endif diff --git a/core/board_config.mk b/core/board_config.mk index 2580a33fa9..62d779c43e 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -290,8 +290,33 @@ else ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),true) endif .KATI_READONLY := BUILDING_CACHE_IMAGE -# TODO: Add BUILDING_BOOT_IMAGE / BUILDING_RECOVERY_IMAGE -# This gets complicated with BOARD_USES_RECOVERY_AS_BOOT, so skipping for now. +# Are we building a boot image +BUILDING_BOOT_IMAGE := +ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) + BUILDING_BOOT_IMAGE := +else ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),) + ifdef BOARD_BOOTIMAGE_PARTITION_SIZE + BUILDING_BOOT_IMAGE := true + endif +else ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),true) + BUILDING_BOOT_IMAGE := true +endif +.KATI_READONLY := BUILDING_BOOT_IMAGE + +# Are we building a recovery image +BUILDING_RECOVERY_IMAGE := +ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) + BUILDING_RECOVERY_IMAGE := true +else ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),) + ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE + ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) + BUILDING_RECOVERY_IMAGE := true + endif + endif +else ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),true) + BUILDING_RECOVERY_IMAGE := true +endif +.KATI_READONLY := BUILDING_RECOVERY_IMAGE # Are we building a ramdisk image BUILDING_RAMDISK_IMAGE := true diff --git a/core/product.mk b/core/product.mk index e5df5cdb6d..8716e3e12f 100644 --- a/core/product.mk +++ b/core/product.mk @@ -355,9 +355,12 @@ _product_single_value_vars += PRODUCT_BUILD_ODM_IMAGE _product_single_value_vars += PRODUCT_BUILD_CACHE_IMAGE _product_single_value_vars += PRODUCT_BUILD_RAMDISK_IMAGE _product_single_value_vars += PRODUCT_BUILD_USERDATA_IMAGE +_product_single_value_vars += PRODUCT_BUILD_RECOVERY_IMAGE +_product_single_value_vars += PRODUCT_BUILD_BOOT_IMAGE _product_list_vars += PRODUCT_UPDATABLE_BOOT_MODULES _product_list_vars += PRODUCT_UPDATABLE_BOOT_LOCATIONS + # Whether the product would like to check prebuilt ELF files. _product_single_value_vars += PRODUCT_CHECK_ELF_FILES diff --git a/core/product_config.mk b/core/product_config.mk index 12c27220fd..8c739a4006 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -405,7 +405,9 @@ $(foreach image, \ ODM \ CACHE \ RAMDISK \ - USERDATA, \ + USERDATA \ + BOOT \ + RECOVERY, \ $(eval $(call product-build-image-config,$(image)))) product-build-image-config := diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index 99ffa31019..4156c8b185 100755 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -730,6 +730,7 @@ def AddImagesToTargetFiles(filename): OPTIONS.info_dict = common.LoadInfoDict(OPTIONS.input_tmp, repacking=True) has_recovery = OPTIONS.info_dict.get("no_recovery") != "true" + has_boot = OPTIONS.info_dict.get("no_boot") != "true" # {vendor,odm,product,product_services}.img are unlike system.img or # system_other.img. Because it could be built from source, or dropped into @@ -777,17 +778,19 @@ def AddImagesToTargetFiles(filename): def banner(s): logger.info("\n\n++++ " + s + " ++++\n\n") - banner("boot") - # common.GetBootableImage() returns the image directly if present. - boot_image = common.GetBootableImage( - "IMAGES/boot.img", "boot.img", OPTIONS.input_tmp, "BOOT") - # boot.img may be unavailable in some targets (e.g. aosp_arm64). - if boot_image: - partitions['boot'] = os.path.join(OPTIONS.input_tmp, "IMAGES", "boot.img") - if not os.path.exists(partitions['boot']): - boot_image.WriteToDir(OPTIONS.input_tmp) - if output_zip: - boot_image.AddToZip(output_zip) + boot_image = None + if has_boot: + banner("boot") + # common.GetBootableImage() returns the image directly if present. + boot_image = common.GetBootableImage( + "IMAGES/boot.img", "boot.img", OPTIONS.input_tmp, "BOOT") + # boot.img may be unavailable in some targets (e.g. aosp_arm64). + if boot_image: + partitions['boot'] = os.path.join(OPTIONS.input_tmp, "IMAGES", "boot.img") + if not os.path.exists(partitions['boot']): + boot_image.WriteToDir(OPTIONS.input_tmp) + if output_zip: + boot_image.AddToZip(output_zip) recovery_image = None if has_recovery: