diff --git a/CleanSpec.mk b/CleanSpec.mk index 1c02da69f..76bc0c510 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -615,8 +615,6 @@ $(call add-clean-step, rm -rf $(HOST_OUT)/framework/vts-tradefed.jar) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/security/avb/) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/super.img) - -$(call add-clean-step, find $(PRODUCT_OUT) -type f -name "generated_*_image_info.txt" -print0 | xargs -0 rm -f) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/core/Makefile b/core/Makefile index 0a004dddb..2120c9580 100644 --- a/core/Makefile +++ b/core/Makefile @@ -2238,6 +2238,7 @@ define build-systemimage-target $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ build/make/tools/releasetools/build_image.py \ $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \ + $(systemimage_intermediates)/generated_system_image_info.txt \ || ( mkdir -p $${DIST_DIR}; cp $(INSTALLED_FILES_FILE) $${DIST_DIR}/installed-files-rescued.txt; \ exit 1 ) endef @@ -2285,7 +2286,9 @@ endif # INSTALLED_BOOTIMAGE_TARGET $(INSTALLED_SYSTEMIMAGE_TARGET): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH) @echo "Install system fs image: $@" $(copy-file-to-target) - $(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) + $(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),\ + $(call read-image-prop-dictionary,\ + $(systemimage_intermediates)/generated_system_image_info.txt,system_size)) systemimage: $(INSTALLED_SYSTEMIMAGE_TARGET) @@ -2294,7 +2297,9 @@ systemimage-nodeps snod: $(filter-out systemimage-nodeps snod,$(MAKECMDGOALS)) \ | $(INTERNAL_USERIMAGES_DEPS) @echo "make $@: ignoring dependencies" $(call build-systemimage-target,$(INSTALLED_SYSTEMIMAGE_TARGET)) - $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE_TARGET),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) + $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(systemimage_intermediates)/generated_system_image_info.txt,system_size)) ifneq (,$(filter systemimage-nodeps snod, $(MAKECMDGOALS))) ifeq (true,$(WITH_DEXPREOPT)) @@ -2660,8 +2665,11 @@ define build-systemotherimage-target $(call generate-image-prop-dictionary, $(systemotherimage_intermediates)/system_other_image_info.txt,system,skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ build/make/tools/releasetools/build_image.py \ - $(TARGET_OUT_SYSTEM_OTHER) $(systemotherimage_intermediates)/system_other_image_info.txt $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) $(TARGET_OUT) - $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMOTHERIMAGE_TARGET),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) + $(TARGET_OUT_SYSTEM_OTHER) $(systemotherimage_intermediates)/system_other_image_info.txt $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) $(TARGET_OUT)\ + $(systemotherimage_intermediates)/generated_system_other_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMOTHERIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(systemotherimage_intermediates)/generated_system_other_image_info.txt,system_other_size)) endef # We just build this directly to the install location. @@ -2800,8 +2808,11 @@ define build-vendorimage-target $(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor/,$(call intermediates-dir-for,PACKAGING,depmod_vendor))) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ build/make/tools/releasetools/build_image.py \ - $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT) - $(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE)) + $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT) \ + $(vendorimage_intermediates)/generated_vendor_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(vendorimage_intermediates)/generated_vendor_image_info.txt,vendor_size)) endef # We just build this directly to the install location. @@ -2855,8 +2866,11 @@ define build-productimage-target $(call generate-image-prop-dictionary, $(productimage_intermediates)/product_image_info.txt,product,skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_PRODUCT) $(productimage_intermediates)/product_image_info.txt $(INSTALLED_PRODUCTIMAGE_TARGET) $(TARGET_OUT) - $(hide) $(call assert-max-image-size,$(INSTALLED_PRODUCTIMAGE_TARGET),$(BOARD_PRODUCTIMAGE_PARTITION_SIZE)) + $(TARGET_OUT_PRODUCT) $(productimage_intermediates)/product_image_info.txt $(INSTALLED_PRODUCTIMAGE_TARGET) $(TARGET_OUT) \ + $(productimage_intermediates)/generated_product_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_PRODUCTIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(productimage_intermediates)/generated_product_image_info.txt,product_size)) endef # We just build this directly to the install location. @@ -2907,8 +2921,11 @@ define build-product_servicesimage-target $(call generate-image-prop-dictionary, $(product_servicesimage_intermediates)/product_services_image_info.txt,product_services, skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_PRODUCT_SERVICES) $(productservicesimage_intermediates)/productservices_image_info.txt $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) $(TARGET_OUT) - $(hide) $(call assert-max-image-size,$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),$(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE)) + $(TARGET_OUT_PRODUCT_SERVICES) $(product_servicesimage_intermediates)/product_services_image_info.txt $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) $(TARGET_OUT) \ + $(product_servicesimage_intermediates)/generated_product_services_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(product_servicesimage_intermediates)/generated_product_services_image_info.txt,product_services_size)) endef # We just build this directly to the install location. @@ -2960,8 +2977,11 @@ define build-odmimage-target $(call build-image-kernel-modules,$(BOARD_ODM_KERNEL_MODULES),$(TARGET_OUT_ODM),odm/,$(call intermediates-dir-for,PACKAGING,depmod_odm))) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_ODM) $(odmimage_intermediates)/odm_image_info.txt $(INSTALLED_ODMIMAGE_TARGET) $(TARGET_OUT) - $(hide) $(call assert-max-image-size,$(INSTALLED_ODMIMAGE_TARGET),$(BOARD_ODMIMAGE_PARTITION_SIZE)) + $(TARGET_OUT_ODM) $(odmimage_intermediates)/odm_image_info.txt $(INSTALLED_ODMIMAGE_TARGET) $(TARGET_OUT) \ + $(odmimage_intermediates)/generated_odm_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_ODMIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(odmimage_intermediates)/generated_odm_image_info.txt,odm_size)) endef # We just build this directly to the install location. @@ -3331,8 +3351,7 @@ ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION)) # (1): list of items like "system", "vendor", "product", "product_services" # return: map each item into a command ( wrapped in $$() ) that reads the size define read-size-of-partitions -$(foreach image,$(call images-for-partitions,$(1)),$$( \ - build/make/tools/releasetools/sparse_img.py --get_partition_size $(image))) +$(foreach p,$(1),$(call read-image-prop-dictionary,$($(p)image_intermediates)/generated_$(p)_image_info.txt,$(p)_size)) endef # round result to BOARD_SUPER_PARTITION_ALIGNMENT @@ -3356,9 +3375,7 @@ droid_targets: check-all-partition-sizes .PHONY: check-all-partition-sizes check-all-partition-sizes-nodeps # Add image dependencies so that generated_*_image_info.txt are written before checking. -check-all-partition-sizes: \ - build/make/tools/releasetools/sparse_img.py \ - $(call images-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST)) +check-all-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 diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 4136ed432..d2f4e259b 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -18,8 +18,10 @@ Builds output_image from the given input_directory, properties_file, and writes the image to target_output_directory. +If argument generated_prop_file exists, write additional properties to the file. + Usage: build_image.py input_directory properties_file output_image \\ - target_output_directory + target_output_directory [generated_prop_file] """ from __future__ import print_function @@ -733,8 +735,13 @@ def GlobalDictFromImageProp(image_prop, mount_point): return d +def SaveGlobalDict(filename, glob_dict): + with open(filename, "w") as f: + f.writelines(["%s=%s" % (key, value) for (key, value) in glob_dict.items()]) + + def main(argv): - if len(argv) != 4: + if len(argv) < 4 or len(argv) > 5: print(__doc__) sys.exit(1) @@ -744,6 +751,7 @@ def main(argv): glob_dict_file = argv[1] out_file = argv[2] target_out = argv[3] + prop_file_out = argv[4] if len(argv) >= 5 else None glob_dict = LoadGlobalDict(glob_dict_file) if "mount_point" in glob_dict: @@ -783,6 +791,10 @@ def main(argv): logger.error("Failed to build %s from %s", out_file, in_dir) raise + if prop_file_out: + glob_dict_out = GlobalDictFromImageProp(image_properties, mount_point) + SaveGlobalDict(prop_file_out, glob_dict_out) + if __name__ == '__main__': try: