From ca4a35f44e1e4eeac465f68c9eab997988eb8233 Mon Sep 17 00:00:00 2001 From: "Chen, Gang G" Date: Mon, 2 Sep 2024 15:13:43 +0800 Subject: [PATCH 1/3] Support release build for tar.gz images release key is used for release images Test Done: build and boot success make flashfiles -j20 make flashfiles -j20 iso_image=false use_tar=true make flashfiles -j20 RELEASE_BUILD=true make flashfiles -j00 iso_image=false use_tar=true RELEASE_BUILD=true make flashfiles -j20 publish_gptimage RELEASE_BUILD=true iso_image=false use_tar=true Tracked-On: OAM-124136 Signed-off-by: Chen, Gang G --- releasetools/flashfiles_from_target_files.sh | 56 +++++++++++++------- tasks/flashfiles.mk | 35 ++++++++---- 2 files changed, 62 insertions(+), 29 deletions(-) diff --git a/releasetools/flashfiles_from_target_files.sh b/releasetools/flashfiles_from_target_files.sh index a598ca6..92abf2a 100755 --- a/releasetools/flashfiles_from_target_files.sh +++ b/releasetools/flashfiles_from_target_files.sh @@ -13,6 +13,16 @@ VARIANT=`grep -i "ro.system.build.type=" $PRODUCT_OUT/system/build.prop | cut -d TARGET=`grep -i "ro.build.product=" $PRODUCT_OUT/system/build.prop | cut -d '=' -f2` ANDROID_ROOT=${PWD} +for arg in "$@" +do + case $arg in + RELEASE_BUILD=*) + RELEASE_BUILD="${arg#*=}" + shift + ;; + esac +done + echo "========================" echo "Images / Files to be packed" echo "========================" @@ -38,25 +48,33 @@ mkdir $flashfile_dir for i in $IMAGES do - echo "Adding $i" - if [[ $i == "super.img" ]]; then - SUPER_IMG=true - cp ./obj/PACKAGING/super.img_intermediates/super.img $flashfile_dir/. - else - if [[ $i == "installer.efi" ]]; then - cp efi/installer.efi $flashfile_dir/. - else - if [[ $i == "startup.nsh" ]]; then - cp efi/startup.nsh $flashfile_dir/. - else - if [[ $i == "system.img" || $i == "odm.img" || $i == "vbmeta.img" || $i == "vendor_boot.img" ]]; then - cp obj/PACKAGING/target_files_intermediates/$TARGET-target_files-*/IMAGES/$i $flashfile_dir/. - else - cp $i $flashfile_dir/. - fi - fi - fi - fi + echo "Adding $i" + if [[ $i == "super.img" ]]; then + SUPER_IMG=true + if [[ "$RELEASE_BUILD" == "true" ]]; then + cp release_sign/super.img $flashfile_dir/. + else + cp ./obj/PACKAGING/super.img_intermediates/super.img $flashfile_dir/. + fi + else + if [[ $i == "installer.efi" ]]; then + cp efi/installer.efi $flashfile_dir/. + else + if [[ $i == "startup.nsh" ]]; then + cp efi/startup.nsh $flashfile_dir/. + else + if [[ $i == "boot.img" || $i == "odm.img" || $i == "vbmeta.img" || $i == "vendor_boot.img" ]]; then + if [[ "$RELEASE_BUILD" == "true" ]]; then + cp ff_temp/IMAGES/$i $flashfile_dir/. + else + cp obj/PACKAGING/target_files_intermediates/$TARGET-target_files-*/IMAGES/$i $flashfile_dir/. + fi + else + cp $i $flashfile_dir/. + fi + fi + fi + fi done cd $ANDROID_ROOT diff --git a/tasks/flashfiles.mk b/tasks/flashfiles.mk index 5b74073..6e0fbee 100755 --- a/tasks/flashfiles.mk +++ b/tasks/flashfiles.mk @@ -5,6 +5,13 @@ endif ifeq ($(TARGET_BUILD_TYPE),debug) name := $(name)_debug endif + +ifeq ($(use_tar),true) + fn_compress_format := tar.gz +else + fn_compress_format := zip +endif + ifeq ($(RELEASE_BUILD),true) flash_name := $(name)-sign-flashfiles-$(FILE_NAME_TAG) target_name := $(name)-sign-targetfile-$(FILE_NAME_TAG) @@ -13,7 +20,7 @@ endif name := $(name)-flashfiles-$(FILE_NAME_TAG) BUILDNUM := $(shell $(DATE) +%H%M%3S) ifeq ($(RELEASE_BUILD),true) -BUILT_RELEASE_FLASH_FILES_PACKAGE := $(PRODUCT_OUT)/$(flash_name).zip +BUILT_RELEASE_FLASH_FILES_PACKAGE := $(PRODUCT_OUT)/$(flash_name).$(fn_compress_format) BUILT_RELEASE_TARGET_FILES_PACKAGE := $(PRODUCT_OUT)/$(target_name).zip ifeq ($(SUPER_IMG_IN_FLASHZIP),true) BUILT_RELEASE_SUPER_IMAGE := $(PRODUCT_OUT)/release_sign/super.img @@ -58,9 +65,13 @@ endif ifeq ($(BUILD_GPTIMAGE), true) $(gpt_name):$(BUILT_RELEASE_FLASH_FILES_PACKAGE) +ifeq ($(use_tar),true) + tar -xvzf $< -C $(GPT_DIR) +else rm -rf $(GPT_DIR) mkdir -p $(GPT_DIR) unzip $< -d $(GPT_DIR) +endif $(SIMG2IMG) $(GPT_DIR)/super.img $(GPT_DIR)/super.img.raw $(SIMG2IMG) $(GPT_DIR)/config.img $(GPT_DIR)/config.img.raw @@ -85,29 +96,32 @@ $(gpt_name): @echo "skip build gptimages" endif +ifeq ($(use_tar),true) +$(BUILT_RELEASE_FLASH_FILES_PACKAGE):$(BUILT_RELEASE_SUPER_IMAGE) $(BUILT_RELEASE_TARGET_FILES_PACKAGE) $(fftf) $(legacy_fftf) $(UEFI_ADDITIONAL_TOOLS) + rm -rf $(GPT_DIR) + mkdir -p $(GPT_DIR) + unzip $(BUILT_RELEASE_TARGET_FILES_PACKAGE) -d $(GPT_DIR) + $(fftf) $@ RELEASE_BUILD=true + rm -rf $(GPT_DIR) +else $(BUILT_RELEASE_FLASH_FILES_PACKAGE):$(BUILT_RELEASE_SUPER_IMAGE) $(legacy_fftf) $(UEFI_ADDITIONAL_TOOLS) $(hide) mkdir -p $(dir $@) $(legacy_fftf) $(FLASHFILES_ADD_ARGS) --mv_config_default=$(notdir $(mvcfg_default_arg)) --add_image=$(BUILT_RELEASE_SUPER_IMAGE) $(BUILT_RELEASE_TARGET_FILES_PACKAGE) $@ #remove system.img vendor.img product.img from flashfiles.zip $(hide)zip -d $@ "system.img" "product.img" "vendor.img"; +endif else $(BUILT_RELEASE_FLASH_FILES_PACKAGE):$(BUILT_RELEASE_TARGET_FILES_PACKAGE) $(legacy_fftf) $(UEFI_ADDITIONAL_TOOLS) $(hide) mkdir -p $(dir $@) $(legacy_fftf) $(FLASHFILES_ADD_ARGS) --mv_config_default=$(notdir $(mvcfg_default_arg)) $(BUILT_RELEASE_TARGET_FILES_PACKAGE) $@ -endif -endif +endif #SUPER_IMG_IN_FLASHZIP +endif #RELEASE_BUILD ifeq ($(USE_INTEL_FLASHFILES),true) fftf := $(INTEL_PATH_BUILD)/releasetools/flashfiles_from_target_files.sh legacy_fftf := $(INTEL_PATH_BUILD)/releasetools/flashfiles_from_target_files odf := $(INTEL_PATH_BUILD)/releasetools/ota_deployment_fixup -ifeq ($(use_tar),true) - fn_compress_format := tar.gz -else - fn_compress_format := zip -endif - ifneq ($(FLASHFILE_VARIANTS),) # Generate variant specific flashfiles if VARIANT_SPECIFIC_FLASHFILES is True ifeq ($(VARIANT_SPECIFIC_FLASHFILES),true) @@ -170,6 +184,7 @@ else mvcfg_default_arg = $(MV_CONFIG_DEFAULT_TYPE) endif + ifeq ($(SUPER_IMG_IN_FLASHZIP),true) $(INTEL_FACTORY_FLASHFILES_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(fftf) $(legacy_fftf) $(UEFI_ADDITIONAL_TOOLS) $(INTERNAL_SUPERIMAGE_DIST_TARGET) $(hide) mkdir -p $(dir $@) @@ -333,7 +348,7 @@ LOCAL_TOOL:= \ .PHONY: flashfiles ifeq ($(RELEASE_BUILD),true) -flashfiles: $(INTEL_FACTORY_FLASHFILES_TARGET) $(BUILT_RELEASE_FLASH_FILES_PACKAGE) $(gpt_name) publish_mkdir_dest publish_vertical host-pkg sepolicy_freeze_test check-vintf-all +flashfiles: $(BUILT_RELEASE_FLASH_FILES_PACKAGE) $(gpt_name) publish_mkdir_dest publish_vertical host-pkg sepolicy_freeze_test check-vintf-all @$(ACP) $(BUILT_RELEASE_FLASH_FILES_PACKAGE) $(publish_dest) ifeq (,$(filter base_aaos aaos_iasw,$(TARGET_PRODUCT))) @echo "Publishing Release files started ..." From 4f29b94651d09ee2f1f1d5bae4e689c18f88d956 Mon Sep 17 00:00:00 2001 From: "Chen, Gang G" Date: Fri, 6 Sep 2024 16:39:57 +0800 Subject: [PATCH 2/3] Add gpt.ini to flashfiles images The gpt.ini file is a GPT configuration file used during the Android flashing process in the SOS environment. Each build may have different partition tables. We need these GPT files to prevent flashing failures Test Done: make flashfiles use_tar=true Flash and boot success Tracked-On: OAM-124426 Signed-off-by: Chen, Gang G --- releasetools/flashfiles_from_target_files.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/releasetools/flashfiles_from_target_files.sh b/releasetools/flashfiles_from_target_files.sh index 92abf2a..de5d17b 100755 --- a/releasetools/flashfiles_from_target_files.sh +++ b/releasetools/flashfiles_from_target_files.sh @@ -62,6 +62,8 @@ do else if [[ $i == "startup.nsh" ]]; then cp efi/startup.nsh $flashfile_dir/. + elif [[ $i == "gpt.ini" ]]; then + cp obj/PACKAGING/flashfiles_intermediates/root/$i $flashfile_dir/. else if [[ $i == "boot.img" || $i == "odm.img" || $i == "vbmeta.img" || $i == "vendor_boot.img" ]]; then if [[ "$RELEASE_BUILD" == "true" ]]; then From 5e99d5b767c347951d4bac5d0953f59e2308ed01 Mon Sep 17 00:00:00 2001 From: Ankit Agrawal Date: Fri, 30 Aug 2024 21:04:18 +0530 Subject: [PATCH 3/3] Migrate python2 scripts to python3 Tests Done: Boot check on civ and base_aaos Tracked-On: OAM-124331 Signed-off-by: Ankit Agrawal Signed-off-by: Salini Venate --- bootloader_from_zip | 8 +-- create_gpt_image.py | 60 +++++++++++------------ generate_factory_images | 60 +++++++++++------------ releasetools/bootloader_from_target_files | 6 +-- releasetools/flash_cmd_generator.py | 9 +++- releasetools/flashfiles_from_target_files | 48 +++++++++--------- releasetools/intel_common.py | 6 +-- tasks/checkvendor.py | 6 +-- 8 files changed, 104 insertions(+), 99 deletions(-) diff --git a/bootloader_from_zip b/bootloader_from_zip index d24af8f..978e639 100755 --- a/bootloader_from_zip +++ b/bootloader_from_zip @@ -83,12 +83,12 @@ def main(argv): sys.exit(1) if not OPTIONS.zipfile: - print "--zipfile is required" + print ("--zipfile is required") common.Usage(__doc__) sys.exit(1) tf = tempfile.NamedTemporaryFile() - tf.write("foo") + tf.write(b"foo") tf.flush() extra_files = OPTIONS.bootimage @@ -106,9 +106,9 @@ if __name__ == '__main__': try: common.CloseInheritedPipes() main(sys.argv[1:]) - except common.ExternalError, e: + except common.ExternalError as e: print - print " ERROR: %s" % (e,) + print (" ERROR: %s" % (e,)) print sys.exit(1) diff --git a/create_gpt_image.py b/create_gpt_image.py index 16ad850..f2b961f 100755 --- a/create_gpt_image.py +++ b/create_gpt_image.py @@ -17,10 +17,10 @@ Script to create a GPT/UEFI image or to show information it contains. """ -from sys import version_info +from sys import exit, version_info -if version_info < (2, 7, 3): - exit('Python version must be 2.7.3 or higher') +if version_info < (3, 0): + exit('Python version must be 3.0 or higher') from logging import (debug, info, error, DEBUG, INFO, getLogger, basicConfig) @@ -32,10 +32,7 @@ from binascii import crc32 from re import compile as re_compile from collections import namedtuple -if version_info < (3, 0, 1): - from ConfigParser import SafeConfigParser, ParsingError, NoOptionError, NoSectionError -else: - from configparser import SafeConfigParser, ParsingError, NoOptionError, NoSectionError +from configparser import ConfigParser, ParsingError, NoOptionError, NoSectionError from math import floor, log @@ -69,12 +66,11 @@ class MBRInfos(object): _FMT = ' 0: units = ('KBytes', 'MBytes', 'GBytes') index = int(floor(log(self.lba_size, 1024))) - computed_size = round(self.lba_size / (1024**index), 2) + computed_size = round(self.lba_size // (1024**index), 2) human_size = '{0} {1}'.format(computed_size, units[index]) else: human_size = '0 Bytes' @@ -135,8 +131,8 @@ def write(self, img_file, offset=0): Used to write MBR in an image file """ self.raw = pack(MBRInfos._FMT, self.boot, self.os_type, - self.lba_start, self.lba_size, '', - MBRInfos._PART_ENTRY, '', self.sign) + self.lba_start, self.lba_size, b'\x00', + MBRInfos._PART_ENTRY, b'\x00', self.sign) img_file.seek(offset) img_file.write(self.raw) @@ -199,12 +195,12 @@ class GPTHeaderInfos(object): _FMT = '<8s4sII4xQQQQ16sQIII' def __init__(self, img_size=2147483648, block_size=512, size=92): - self.raw = '' + self.raw = b'' # TODO use decorators and properties to subtitute by r/w access in the # raw attribute with pack and unpack function all these attributes - self.sign = 'EFI PART' - self.rev = '\x00\x00\x01\x00' + self.sign = b'EFI PART' + self.rev = b'\x00\x00\x01\x00' self.size = size # sets the length and the entry size of the GPT partition table with @@ -213,13 +209,13 @@ def __init__(self, img_size=2147483648, block_size=512, size=92): self.entry_size = 128 # calculates the size of image in block - size_in_block = img_size / block_size + size_in_block = img_size // block_size # sets the lba backup at the value of first lba used by GPT backup self.lba_backup = size_in_block - 1 # calculates the size of the partition table in block - table_size = (self.table_length * self.entry_size) / block_size + table_size = (self.table_length * self.entry_size) // block_size # sets the lba first at the first usable lba for a partition self.lba_first = table_size + 2 @@ -300,7 +296,7 @@ def write(self, img_file, offset, block_size): img_file.write(self.raw) # writes zero on unused blocks of GPT header - raw_stuffing = '\x00' * (block_size - len(self.raw)) + raw_stuffing = b'\x00' * (block_size - len(self.raw)) img_file.write(raw_stuffing) # saves the end of the GPT header @@ -598,7 +594,7 @@ def _read_json(self, block_size): """ Used to read a JSON TLB partition file """ - with open(self.path, 'r') as tlb_file: + with open(self.path, 'rb') as tlb_file: re_parser = re_compile(r'^add\s-b\s(?P\w+)\s-s\s' '(?P[\w$()-]+)\s-t\s' '(?P\w+)\s-u\s' @@ -690,7 +686,7 @@ def _contruct_tlb_info(self, start_lba, cfg, block_size, parts): readlen = cfg.getint(partname, 'len') if readlen > 0: - size = (readlen * 1024 * 1024) / block_size + size = (readlen * 1024 * 1024) // block_size start_lba = begin + size else: size = readlen @@ -724,7 +720,7 @@ def _contruct_tlb_grp_info(self, start_lba, cfg, block_size, parts): begin = start_lba if readlen > 0: - size = (readlen * 1024 * 1024) / block_size + size = (readlen * 1024 * 1024) // block_size start_lba = begin + size else: size = readlen @@ -738,7 +734,7 @@ def _read_ini(self, block_size): Used to read a INI TLB partition file """ # sets a parser to read the INI TLB partition file - cfg = SafeConfigParser() + cfg = ConfigParser(strict=False) try: cfg.read(self.path) @@ -757,7 +753,7 @@ def _read_ini(self, block_size): except NoOptionError: # set start lba to offset 1M bytes, align with kernelflinger - start_lba_prev = 1024 * 1024 / block_size + start_lba_prev = 1024 * 1024 // block_size info('The start_lba value is undefined in the TLB partition file,' ' the default value is used: {0}'.format(start_lba_prev)) @@ -802,7 +798,7 @@ def compute_last_size_entry(self, img_size, block_size, entry_size, last = -1 # reserve the size for primary and secondary gpt MB = 1024 * 1024 - remaining_size = (img_size - MB) / block_size - 2048 + remaining_size = (img_size - MB) // block_size - 2048 for pos, entry in enumerate(self): debug('Entry size: {0}'.format(entry.size)) if entry.size < 0: @@ -1035,7 +1031,7 @@ def _write_partitions(self, img_file, tlb_infos, binaries_path): # no binary file used to build the partition or slot_b case label = tlb_part.label[0:] if bin_path == 'none' or label[len(label)-2:] == '_b': - line = '\0' + line = b'\0' img_file.seek(offset) img_file.write(line) bin_size = 0 @@ -1048,7 +1044,7 @@ def _write_partitions(self, img_file, tlb_infos, binaries_path): # checks if partition size is greather or equal to the binary file bin_size_in_bytes = stat(bin_path).st_size part_size_in_bytes = tlb_part.size * self.block_size - bin_size = bin_size_in_bytes / self.block_size + bin_size = bin_size_in_bytes // self.block_size if tlb_part.size < bin_size: error('Size of binary file {0} ({1} Bytes) is greather than ' '{2} partition size ({3} Bytes)'.format(bin_path, @@ -1081,7 +1077,7 @@ def write(self, tlb_infos, binaries_path): # fill output image header with 0x00: MBR size + GPT header size + # (partition table length * entry size) - zero = '\x00' * (2 * self.block_size + + zero = b'\x00' * (2 * self.block_size + self.gpt_header.table_length * self.gpt_header.entry_size) img_file.seek(0) diff --git a/generate_factory_images b/generate_factory_images index 4987e81..0c6d037 100755 --- a/generate_factory_images +++ b/generate_factory_images @@ -32,7 +32,7 @@ import os _FLASHALL_FILENAME = "flash-all.sh" # chmod (octal) -rwxr-x--x -_PERMS = 0751 +_PERMS = 0o751 _FLASH_HEADER = """#!/bin/bash # Copyright 2012 The Android Open Source Project @@ -103,30 +103,30 @@ def ConvertToDOSFormat(filename): def AddFlashScript(filename, tar, commands, windows): - print "Archiving", filename - tf = tempfile.NamedTemporaryFile(delete=False) - if (windows): - tf.write(_WIN_FLASH_HEADER) - else: - tf.write(_FLASH_HEADER) - - for c in commands: - if windows: - tf.write(c.get_windows_command()) + print("Archiving", filename) + with tempfile.NamedTemporaryFile(delete=False, mode='w+') as tf: + if (windows): + tf.write(_WIN_FLASH_HEADER) else: - tf.write(c.get_linux_command()) + tf.write(_FLASH_HEADER) - if (windows): - tf.write(_WIN_FLASH_FOOTER) - else: - tf.write(_FLASH_FOOTER) + for c in commands: + if windows: + tf.write(c.get_windows_command()) + else: + tf.write(c.get_linux_command()) + + if (windows): + tf.write(_WIN_FLASH_FOOTER) + else: + tf.write(_FLASH_FOOTER) - tf.close() + tf_name = tf.name if (windows): - ConvertToDOSFormat(tf.name) - chmod(tf.name, _PERMS) - tar.add(tf.name, arcname=path.basename(filename)) - os.unlink(tf.name) + ConvertToDOSFormat(tf_name) + chmod(tf_name, _PERMS) + tar.add(tf_name, arcname=path.basename(filename)) + os.unlink(tf_name) def RequireFile(filename): """Ensure file exists""" @@ -146,8 +146,8 @@ class CommandlineParser(ArgumentParser): self.description = __doc__ def error(self, message): - print >>stderr, "ERROR: {}".format(message) - print >>stderr, "\n------\n" + print("ERROR: {}".format(message), file=stderr) + print("\n------\n", file=stderr) self.print_help() exit(2) @@ -230,18 +230,18 @@ def main(): archive_name = args.output # Create Archive - print "Creating archive: " + archive_name + print("Creating archive: " + archive_name) tar = TarOpen(archive_name, "w:gz") for src_path, dst_path in files: - print "Archiving " + src_path + print("Archiving " + src_path) RequireFile(src_path) tar.add(src_path, arcname=dst_path) # 'fastboot update' covers the additional AOSP pieces, add this to the # command list now commands.append(UpdateCommand(update_fn, True)) - print "Archiving " + args.update_archive + print("Archiving " + args.update_archive) RequireFile(args.update_archive) tar.add(args.update_archive, update_fn) AddFlashScript(_FLASHALL_FILENAME, tar, commands, windows=False) @@ -249,12 +249,12 @@ def main(): tar.close() - print "Done." + print("Done.") if __name__ == "__main__": try: exit(main()) - except Usage, err: - print >>stderr, "ERROR: {}".format(err.msg) - print >>stderr, " for help use --help" + except Usage as err: + print("ERROR: {}".format(err.msg), file=stderr) + print(" for help use --help", file=stderr) exit(2) diff --git a/releasetools/bootloader_from_target_files b/releasetools/bootloader_from_target_files index 4162b00..ca5d6ad 100755 --- a/releasetools/bootloader_from_target_files +++ b/releasetools/bootloader_from_target_files @@ -61,7 +61,7 @@ def main(argv): common.Usage(__doc__) sys.exit(1) - print "unzipping target-files..." + print ("unzipping target-files...") #OPTIONS.input_tmp = common.UnzipTemp(args[0]) OPTIONS.input_tmp = args[0] #input_zip = zipfile.ZipFile(args[0], "r") @@ -89,9 +89,9 @@ if __name__ == '__main__': try: common.CloseInheritedPipes() main(sys.argv[1:]) - except common.ExternalError, e: + except common.ExternalError as e: print - print " ERROR: %s" % (e,) + print (" ERROR: %s" % (e,)) print sys.exit(1) finally: diff --git a/releasetools/flash_cmd_generator.py b/releasetools/flash_cmd_generator.py index bd50b17..cc9fc82 100755 --- a/releasetools/flash_cmd_generator.py +++ b/releasetools/flash_cmd_generator.py @@ -330,7 +330,14 @@ def parse_config(ips, variant, platform): results_list = [] for k,v in results.items(): results_list.append((k,v)) - flist = [f.rsplit(':', 1) for f in set(files)] + unique_files = [] + for file in files: + # If the number is not already in the unique_numbers list, add it + if file not in unique_files: + unique_files.append(file) + + flist = [f.rsplit(':', 1) for f in unique_files] + return results_list, flist diff --git a/releasetools/flashfiles_from_target_files b/releasetools/flashfiles_from_target_files index 02de5ff..f74b653 100755 --- a/releasetools/flashfiles_from_target_files +++ b/releasetools/flashfiles_from_target_files @@ -97,14 +97,14 @@ class VariantIpGenerator: def __add_variant_flashfile(self, ip, variant): variant_flashfile = self.flashfile + "_" + variant + ".ini" - print "Variant flashfile = %s"%variant_flashfile + print("Variant flashfile = %s"%variant_flashfile) # Sanity check to avoid future silent removal eg = self.empty_groups(ip) if eg: raise AssertionError("Unexpected malformed section %s" % eg[0]) if os.path.isfile(variant_flashfile): - print "Reading INI configuration for %s ..."%variant + print("Reading INI configuration for %s ..."%variant) with open(variant_flashfile, "r") as f: ip.parse(f) self.variant_files = self.variant_files_common @@ -125,7 +125,7 @@ class VariantIpGenerator: # This may happen when a mixin (platform level) disables a feature, while # local flashfile.ini (variant level) is kept and customizes this feature. for s in self.empty_groups(ip): - print "Removing malformed section : ", s + print("Removing malformed section : ", s) ip.delete_section(s) def empty_groups(self, ip): @@ -214,7 +214,7 @@ def getFromZip(zip_path, filename): with zipfile.ZipFile(zip_path, "r") as zf: data = zf.open(filename).read() info = zf.getinfo(filename) - return (common.File(filename, data), (info.external_attr >> 16L) & 0xFFFF) + return (common.File(filename, data), (info.external_attr >> 16) & 0xFFFF) def getProvdataVariants(unpack_dir): variants = [] @@ -250,7 +250,7 @@ def process_image(unpack_dir, dest_zip, source, target, configs, variant=None, t if target_out in flashfile_content: return else: - print "-- Adding", target_out + print("-- Adding", target_out) # Default is no special permissions perms = None # retrieve file from target file package based on source & target strings @@ -286,7 +286,7 @@ def process_image(unpack_dir, dest_zip, source, target, configs, variant=None, t # split --bytes=4G --numeric-suffixes [filename] [filename].part if ifile.size >= (1 << 32): image_part="" - count = int(ifile.size/(1 << 32)) + 1 + count = int(ifile.size//(1 << 32)) + 1 for i in range(count): image_part+=target_out+".part0"+str(i)+" " configs[1]=tuple([(x== configs[1][1] and configs[1][1].replace(target_out, image_part) or x )for x in configs[1]]) @@ -310,7 +310,7 @@ def process_image_fast(product_out, flashfiles_out, source, target, variant=None if target_out in flashfile_content: return - print "-- Adding", target_out + print("-- Adding", target_out) outfile = os.path.join(flashfiles_out, target_out) if not os.path.exists(os.path.dirname(outfile)): os.mkdir(os.path.dirname(outfile)) @@ -374,7 +374,7 @@ def main(argv): flashfile = getIntermediates(product_out, "flashfiles", "flashfiles") else: - print "Unzipping target-files..." + print("Unzipping target-files...") unpack_dir = common.UnzipTemp(args[0]) if OPTIONS.add_image: input_super = os.path.join(unpack_dir, "IMAGES") @@ -392,13 +392,13 @@ def main(argv): # Retrieve "generic" PFT instructions from target file package if os.path.isfile(flashfile + ".ini"): - print "Reading INI configuration..." + print("Reading INI configuration...") with open(flashfile + ".ini", "r") as f: ip = iniparser.IniParser() ip.parse(f) configs, files = flash_cmd_generator.parse_config([ip], build_type, platform) elif os.path.isfile(flashfile + ".json") and not OPTIONS.unified_variants: - print "Reading JSON configuration..." + print("Reading JSON configuration...") with open(flashfile + ".json", "r") as f: conf = json.loads(f.read()) configs, files = flashxml.parse_config(conf, build_type, platform) @@ -406,25 +406,25 @@ def main(argv): if not OPTIONS.mv_config_default: common.Usage(__doc__) sys.exit(1) - print "Reading JSON FLS configuration..." + print("Reading JSON FLS configuration...") with open(flashfile + "_fls.json", "r") as f: conf = json.loads(f.read()) configs, files = flashflsxml.parse_config(conf, build_type, platform, OPTIONS.mv_config_default, system) else: - print "Exiting, Missing correct flashfile configuration for generating Flashfiles." + print("Exiting, Missing correct flashfile configuration for generating Flashfiles.") sys.exit(1) if OPTIONS.fast: fastff_dir = args[1] # If mega flashfile is enabled, create multi-variant version of PFT instructions if OPTIONS.unified_variants or OPTIONS.variants : - print "Adding variant specific configurations to ip..." + print("Adding variant specific configurations to ip...") vip = VariantIpGenerator(ip, configs, OPTIONS.variants, variant_files, flashfile) vip.generate_variant_ip() configs, cmd_files = flash_cmd_generator.parse_config(vip.variant_ips, build_type, platform) cmd_files = set([i for _,i in cmd_files]) - print "Adding required binaries..." + print("Adding required binaries...") for src, target in files: if OPTIONS.variants: for variant in OPTIONS.variants: @@ -442,7 +442,7 @@ def main(argv): src,target = file.split(":") process_image_fast(product_out, fastff_dir, src, target, variant, variantFilename(target, variant)) - print "Generating JSON flash configuration files..." + print("Generating JSON flash configuration files...") for fn, data in configs: with open(os.path.join(fastff_dir,fn), 'w') as file: file.write(data) @@ -450,14 +450,14 @@ def main(argv): with zipfile.ZipFile(args[1], "w", zipfile.ZIP_DEFLATED,allowZip64=True) as dest_zip: # If mega flashfile is enabled, create multi-variant version of PFT instructions if OPTIONS.unified_variants or OPTIONS.variants : - print "Adding variant specific configurations to ip..." + print("Adding variant specific configurations to ip...") vip = VariantIpGenerator(ip, configs, OPTIONS.variants, variant_files, flashfile) vip.generate_variant_ip() configs, cmd_files = flash_cmd_generator.parse_config(vip.variant_ips, build_type, platform) cmd_files = set([i for _,i in cmd_files]) # Using "generic" instructions as reference, grab required files & insert into flashfile zip - print "Adding required binaries..." + print("Adding required binaries...") for src, target in files: if OPTIONS.variants: for variant in OPTIONS.variants: @@ -477,20 +477,22 @@ def main(argv): process_image(unpack_dir, dest_zip, src, target, configs, variant, variantFilename(target, variant)) # Write flash_cmd_generator parsed PFT flashing instructions to file & insert into flashfile zip - print "Generating JSON flash configuration files..." + print("Generating JSON flash configuration files...") for fn, data in configs: + if isinstance(data, str): + data = data.encode('utf-8') ifile = common.File(fn, data) ifile.AddToZip(dest_zip) - print "All done." + print("All done.") if __name__ == '__main__': try: common.CloseInheritedPipes() main(sys.argv[1:]) - except common.ExternalError, e: - print - print " ERROR: %s" % (e,) - print + except common.ExternalError as e: + print() + print(" ERROR: %s" % (e,)) + print() sys.exit(1) finally: common.Cleanup() diff --git a/releasetools/intel_common.py b/releasetools/intel_common.py index c2267e9..4c351ae 100644 --- a/releasetools/intel_common.py +++ b/releasetools/intel_common.py @@ -394,7 +394,7 @@ def GetBootloaderImageFromTFP(unpack_dir, autosize=False, extra_files=None, vari block_size=info["block_size"], extra_files=extra_files) - bootloader = open(filename) + bootloader = open(filename, 'rb') data = bootloader.read() bootloader.close() os.unlink(filename) @@ -461,7 +461,7 @@ def MakeVFATFilesystem(root_zip, filename, title="ANDROIDIA", size=0, block_size size += os.path.getsize(os.path.join(dpath, f)) # Add 1% extra space, minimum 32K - extra = size / 100 + extra = size // 100 if extra < (32 * 1024): extra = 32 * 1024 size += extra @@ -482,7 +482,7 @@ def MakeVFATFilesystem(root_zip, filename, title="ANDROIDIA", size=0, block_size cmd = ["mkdosfs"] if block_size: cmd.extend(["-S", str(block_size)]) - cmd.extend(["-n", title, "-C", filename, str(size / 1024)]) + cmd.extend(["-n", title, "-C", filename, str(size // 1024)]) try: p = common.Run(cmd) except Exception as exc: diff --git a/tasks/checkvendor.py b/tasks/checkvendor.py index 86e3ba2..dd05967 100755 --- a/tasks/checkvendor.py +++ b/tasks/checkvendor.py @@ -168,12 +168,12 @@ def main(): try: for mk in makefile: nb_err, searched_output = search_string(options.light, tup, mk, nb_err, searched_output) - if nb_err is not nb_err_tmp: + if nb_err != nb_err_tmp: num_mk = num_mk+1 nb_err_tmp = nb_err if not options.light: - if nb_err is not 0: + if nb_err != 0: print(separative_line) print_vendor(informative_message) print(separative_line) @@ -186,4 +186,4 @@ def main(): return 0 if __name__ == "__main__": - exit(main()) + sys.exit(main())