Merge "Add option to enable lz4diff" am: 2f1f985480
am: 3187ce1680
am: b89cd6aad3
Original change: https://android-review.googlesource.com/c/platform/build/+/1944184 Change-Id: I8352fdd5502b27df4ccf185fe40ba125581f6ae9
This commit is contained in:
commit
8a1662d71c
2 changed files with 53 additions and 8 deletions
|
@ -233,6 +233,10 @@ A/B OTA specific options
|
|||
|
||||
--enable_zucchini
|
||||
Whether to enable to zucchini feature. Will generate smaller OTA but uses more memory.
|
||||
|
||||
--enable_lz4diff
|
||||
Whether to enable lz4diff feature. Will generate smaller OTA for EROFS but
|
||||
uses more memory.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
@ -302,7 +306,8 @@ OPTIONS.vabc_downgrade = False
|
|||
OPTIONS.enable_vabc_xor = True
|
||||
OPTIONS.force_minor_version = None
|
||||
OPTIONS.compressor_types = None
|
||||
OPTIONS.enable_zucchini = None
|
||||
OPTIONS.enable_zucchini = True
|
||||
OPTIONS.enable_lz4diff = False
|
||||
|
||||
POSTINSTALL_CONFIG = 'META/postinstall_config.txt'
|
||||
DYNAMIC_PARTITION_INFO = 'META/dynamic_partitions_info.txt'
|
||||
|
@ -1145,13 +1150,25 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
|
|||
partition_timestamps_flags = GeneratePartitionTimestampFlags(
|
||||
metadata.postcondition.partition_state)
|
||||
|
||||
# Auto-check for compatibility only if --enable_zucchini omitted. Otherwise
|
||||
# let user override zucchini settings. This is useful for testing.
|
||||
if OPTIONS.enable_zucchini is None:
|
||||
if not ota_utils.IsZucchiniCompatible(source_file, target_file):
|
||||
additional_args += ["--enable_zucchini", "false"]
|
||||
else:
|
||||
additional_args += ["--enable_zucchini", str(OPTIONS.enable_zucchini).lower()]
|
||||
OPTIONS.enable_zucchini = False
|
||||
|
||||
additional_args += ["--enable_zucchini",
|
||||
str(OPTIONS.enable_zucchini).lower()]
|
||||
|
||||
if not ota_utils.IsLz4diffCompatible(source_file, target_file):
|
||||
OPTIONS.enable_lz4diff = False
|
||||
|
||||
additional_args += ["--enable_lz4diff",
|
||||
str(OPTIONS.enable_lz4diff).lower()]
|
||||
|
||||
if source_file and OPTIONS.enable_lz4diff:
|
||||
input_tmp = common.UnzipTemp(source_file, ["META/liblz4.so"])
|
||||
liblz4_path = os.path.join(input_tmp, "META", "liblz4.so")
|
||||
assert os.path.exists(
|
||||
liblz4_path), "liblz4.so not found in META/ dir of target file {}".format(liblz4_path)
|
||||
logger.info("Enabling lz4diff %s", liblz4_path)
|
||||
additional_args += ["--liblz4_path", liblz4_path]
|
||||
|
||||
if OPTIONS.disable_vabc:
|
||||
additional_args += ["--disable_vabc", "true"]
|
||||
|
@ -1333,13 +1350,18 @@ def main(argv):
|
|||
elif o == "--vabc_downgrade":
|
||||
OPTIONS.vabc_downgrade = True
|
||||
elif o == "--enable_vabc_xor":
|
||||
assert a.lower() in ["true", "false"]
|
||||
OPTIONS.enable_vabc_xor = a.lower() != "false"
|
||||
elif o == "--force_minor_version":
|
||||
OPTIONS.force_minor_version = a
|
||||
elif o == "--compressor_types":
|
||||
OPTIONS.compressor_types = a
|
||||
elif o == "--enable_zucchini":
|
||||
assert a.lower() in ["true", "false"]
|
||||
OPTIONS.enable_zucchini = a.lower() != "false"
|
||||
elif o == "--enable_lz4diff":
|
||||
assert a.lower() in ["true", "false"]
|
||||
OPTIONS.enable_lz4diff = a.lower() != "false"
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
@ -1388,6 +1410,7 @@ def main(argv):
|
|||
"force_minor_version=",
|
||||
"compressor_types=",
|
||||
"enable_zucchin=",
|
||||
"enable_lz4diff=",
|
||||
], extra_option_handler=option_handler)
|
||||
|
||||
if len(args) != 2:
|
||||
|
|
|
@ -640,6 +640,28 @@ def ConstructOtaApexInfo(target_zip, source_file=None):
|
|||
return target_apex_proto.SerializeToString()
|
||||
|
||||
|
||||
def IsLz4diffCompatible(source_file: str, target_file: str):
|
||||
"""Check whether lz4diff versions in two builds are compatible
|
||||
|
||||
Args:
|
||||
source_file: Path to source build's target_file.zip
|
||||
target_file: Path to target build's target_file.zip
|
||||
|
||||
Returns:
|
||||
bool true if and only if lz4diff versions are compatible
|
||||
"""
|
||||
if source_file is None or target_file is None:
|
||||
return False
|
||||
# Right now we enable lz4diff as long as source build has liblz4.so.
|
||||
# In the future we might introduce version system to lz4diff as well.
|
||||
if zipfile.is_zipfile(source_file):
|
||||
with zipfile.ZipFile(source_file, "r") as zfp:
|
||||
return "META/liblz4.so" in zfp.namelist()
|
||||
else:
|
||||
assert os.path.isdir(source_file)
|
||||
return os.path.exists(os.path.join(source_file, "META", "liblz4.so"))
|
||||
|
||||
|
||||
def IsZucchiniCompatible(source_file: str, target_file: str):
|
||||
"""Check whether zucchini versions in two builds are compatible
|
||||
|
||||
|
|
Loading…
Reference in a new issue