Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3187ce16 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add option to enable lz4diff" am: 2f1f9854

Original change: https://android-review.googlesource.com/c/platform/build/+/1944184

Change-Id: I5794c3a7b36e8ab9d013e22658db022ff5d78436
parents 636eac96 2f1f9854
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -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:
+22 −0
Original line number Diff line number Diff line
@@ -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