From 8ab6603a430d0355778fa02faf2ce6f64f9b21a8 Mon Sep 17 00:00:00 2001 From: Dmitrii Merkurev Date: Tue, 17 May 2022 23:10:37 +0000 Subject: [PATCH] Introduce EROFS compress hints to the Android build system Make it possible to provide a prebuilt hints file to specify different compression strategies on a file basis for all partitions using: BOARD_EROFS_COMPRESS_HINTS := /erofs-hints.txt or separately for every partition using: BOARD_SYSTEMIMAGE_EROFS_COMPRESS_HINTS := /system-partition-erofs-hints.txt BOARD_VENDORIMAGE_EROFS_COMPRESS_HINTS := /vendor-partition-erofs-hints.txt Hints format: Each line is defined by tokens separated by spaces in the following form: pcluster-in-bytes can be specified as 0 which mean file will not be compressed Bug: 231934752 Test: used dump.erofs -S system.img to verify the system image isn't compressed after specifying BOARD_SYSTEMIMAGE_EROFS_COMPRESS_HINTS := no-compress.txt, where no-compress.txt contains 0 .* Test: used dump.erofs --nid= vendor.img to verify apk files are not compressed (the rest of the partition content is compressed) Test: used dump.erofs -S to verify all images are not compressed after specifying BOARD_EROFS_COMPRESS_HINTS := /no-compress.txt Change-Id: I64054e26af5ea5781c45d2183b7796a9ad2b7927 --- core/Makefile | 2 ++ tools/releasetools/build_image.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/core/Makefile b/core/Makefile index 9b7bbe7ec0..316c05b3d6 100644 --- a/core/Makefile +++ b/core/Makefile @@ -1824,6 +1824,7 @@ endef define add-common-ro-flags-to-image-props $(eval _var := $(call to-upper,$(1))) $(if $(BOARD_$(_var)IMAGE_EROFS_COMPRESSOR),$(hide) echo "$(1)_erofs_compressor=$(BOARD_$(_var)IMAGE_EROFS_COMPRESSOR)" >> $(2)) +$(if $(BOARD_$(_var)IMAGE_EROFS_COMPRESS_HINTS),$(hide) echo "$(1)_erofs_compress_hints=$(BOARD_$(_var)IMAGE_EROFS_COMPRESS_HINTS)" >> $(2)) $(if $(BOARD_$(_var)IMAGE_EROFS_PCLUSTER_SIZE),$(hide) echo "$(1)_erofs_pcluster_size=$(BOARD_$(_var)IMAGE_EROFS_PCLUSTER_SIZE)" >> $(2)) $(if $(BOARD_$(_var)IMAGE_EXTFS_INODE_COUNT),$(hide) echo "$(1)_extfs_inode_count=$(BOARD_$(_var)IMAGE_EXTFS_INODE_COUNT)" >> $(2)) $(if $(BOARD_$(_var)IMAGE_EXTFS_RSV_PCT),$(hide) echo "$(1)_extfs_rsv_pct=$(BOARD_$(_var)IMAGE_EXTFS_RSV_PCT)" >> $(2)) @@ -1909,6 +1910,7 @@ $(if $(INTERNAL_USERIMAGES_SPARSE_EROFS_FLAG),$(hide) echo "erofs_sparse_flag=$( $(if $(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG),$(hide) echo "squashfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_F2FS_FLAG),$(hide) echo "f2fs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_F2FS_FLAG)" >> $(1)) $(if $(BOARD_EROFS_COMPRESSOR),$(hide) echo "erofs_default_compressor=$(BOARD_EROFS_COMPRESSOR)" >> $(1)) +$(if $(BOARD_EROFS_COMPRESS_HINTS),$(hide) echo "erofs_default_compress_hints=$(BOARD_EROFS_COMPRESS_HINTS)" >> $(1)) $(if $(BOARD_EROFS_PCLUSTER_SIZE),$(hide) echo "erofs_pcluster_size=$(BOARD_EROFS_PCLUSTER_SIZE)" >> $(1)) $(if $(BOARD_EROFS_SHARE_DUP_BLOCKS),$(hide) echo "erofs_share_dup_blocks=$(BOARD_EROFS_SHARE_DUP_BLOCKS)" >> $(1)) $(if $(BOARD_EROFS_USE_LEGACY_COMPRESSION),$(hide) echo "erofs_use_legacy_compression=$(BOARD_EROFS_USE_LEGACY_COMPRESSION)" >> $(1)) diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 7fdf4ba61e..9567fdc66a 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -331,6 +331,14 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config): if compressor: build_command.extend(["-z", compressor]) + compress_hints = None + if "erofs_default_compress_hints" in prop_dict: + compress_hints = prop_dict["erofs_default_compress_hints"] + if "erofs_compress_hints" in prop_dict: + compress_hints = prop_dict["erofs_compress_hints"] + if compress_hints: + build_command.extend(["--compress-hints", compress_hints]) + build_command.extend(["--mount-point", prop_dict["mount_point"]]) if target_out: build_command.extend(["--product-out", target_out]) @@ -652,6 +660,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): common_props = ( "extfs_sparse_flag", "erofs_default_compressor", + "erofs_default_compress_hints", "erofs_pcluster_size", "erofs_share_dup_blocks", "erofs_sparse_flag", @@ -706,6 +715,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): (True, "{}_base_fs_file", "base_fs_file"), (True, "{}_disable_sparse", "disable_sparse"), (True, "{}_erofs_compressor", "erofs_compressor"), + (True, "{}_erofs_compress_hints", "erofs_compress_hints"), (True, "{}_erofs_pcluster_size", "erofs_pcluster_size"), (True, "{}_erofs_share_dup_blocks", "erofs_share_dup_blocks"), (True, "{}_extfs_inode_count", "extfs_inode_count"),