def BuildVBMeta(): logger.info("Building vbmeta.img.") framework_dict = common.LoadDictionaryFromFile( os.path.join(OPTIONS.product_out_framework, "misc_info.txt")) vendor_dict = common.LoadDictionaryFromFile( os.path.join(OPTIONS.product_out_vendor, "misc_info.txt")) merged_dict = dict(vendor_dict) if OPTIONS.framework_misc_info_keys: for key in common.LoadListFromFile(OPTIONS.framework_misc_info_keys): merged_dict[key] = framework_dict[key] # Build vbmeta.img using partitions in product_out_vendor. partitions = {} for partition in common.AVB_PARTITIONS: partition_path = os.path.join(OPTIONS.product_out_vendor, "%s.img" % partition) if os.path.exists(partition_path): partitions[partition] = partition_path # vbmeta_partitions includes the partitions that should be included into # top-level vbmeta.img, which are the ones that are not included in any # chained VBMeta image plus the chained VBMeta images themselves. vbmeta_partitions = common.AVB_PARTITIONS[:] for partition in common.AVB_VBMETA_PARTITIONS: chained_partitions = merged_dict.get("avb_%s" % partition, "").strip() if chained_partitions: partitions[partition] = os.path.join(OPTIONS.product_out_vendor, "%s.img" % partition) vbmeta_partitions = [ item for item in vbmeta_partitions if item not in chained_partitions.split() ] vbmeta_partitions.append(partition) output_vbmeta_path = os.path.join(OPTIONS.product_out_vendor, "vbmeta.img") OPTIONS.info_dict = merged_dict common.BuildVBMeta(output_vbmeta_path, partitions, "vbmeta", vbmeta_partitions)
def main(): """The main function. Process command line arguments, then call merge_target_files to perform the heavy lifting. """ common.InitLogging() def option_handler(o, a): if o == '--system-target-files': logger.warning( '--system-target-files has been renamed to --framework-target-files' ) OPTIONS.framework_target_files = a elif o == '--framework-target-files': OPTIONS.framework_target_files = a elif o == '--system-item-list': logger.warning( '--system-item-list has been renamed to --framework-item-list') OPTIONS.framework_item_list = a elif o == '--framework-item-list': OPTIONS.framework_item_list = a elif o == '--system-misc-info-keys': logger.warning('--system-misc-info-keys has been renamed to ' '--framework-misc-info-keys') OPTIONS.framework_misc_info_keys = a elif o == '--framework-misc-info-keys': OPTIONS.framework_misc_info_keys = a elif o == '--other-target-files': logger.warning( '--other-target-files has been renamed to --vendor-target-files' ) OPTIONS.vendor_target_files = a elif o == '--vendor-target-files': OPTIONS.vendor_target_files = a elif o == '--other-item-list': logger.warning( '--other-item-list has been renamed to --vendor-item-list') OPTIONS.vendor_item_list = a elif o == '--vendor-item-list': OPTIONS.vendor_item_list = a elif o == '--output-target-files': OPTIONS.output_target_files = a elif o == '--output-dir': OPTIONS.output_dir = a elif o == '--output-item-list': OPTIONS.output_item_list = a elif o == '--output-ota': OPTIONS.output_ota = a elif o == '--output-img': OPTIONS.output_img = a elif o == '--output-super-empty': OPTIONS.output_super_empty = a elif o == '--rebuild_recovery': OPTIONS.rebuild_recovery = True elif o == '--keep-tmp': OPTIONS.keep_tmp = True else: return False return True args = common.ParseOptions(sys.argv[1:], __doc__, extra_long_opts=[ 'system-target-files=', 'framework-target-files=', 'system-item-list=', 'framework-item-list=', 'system-misc-info-keys=', 'framework-misc-info-keys=', 'other-target-files=', 'vendor-target-files=', 'other-item-list=', 'vendor-item-list=', 'output-target-files=', 'output-dir=', 'output-item-list=', 'output-ota=', 'output-img=', 'output-super-empty=', 'rebuild_recovery', 'keep-tmp', ], extra_option_handler=option_handler) # pylint: disable=too-many-boolean-expressions if (args or OPTIONS.framework_target_files is None or OPTIONS.vendor_target_files is None or (OPTIONS.output_target_files is None and OPTIONS.output_dir is None) or (OPTIONS.output_dir is not None and OPTIONS.output_item_list is None)): common.Usage(__doc__) sys.exit(1) # Always turn on verbose logging. OPTIONS.verbose = True if OPTIONS.framework_item_list: framework_item_list = common.LoadListFromFile( OPTIONS.framework_item_list) else: framework_item_list = DEFAULT_FRAMEWORK_ITEM_LIST if OPTIONS.framework_misc_info_keys: framework_misc_info_keys = common.LoadListFromFile( OPTIONS.framework_misc_info_keys) else: framework_misc_info_keys = DEFAULT_FRAMEWORK_MISC_INFO_KEYS if OPTIONS.vendor_item_list: vendor_item_list = common.LoadListFromFile(OPTIONS.vendor_item_list) else: vendor_item_list = DEFAULT_VENDOR_ITEM_LIST if OPTIONS.output_item_list: output_item_list = common.LoadListFromFile(OPTIONS.output_item_list) else: output_item_list = None if not validate_config_lists( framework_item_list=framework_item_list, framework_misc_info_keys=framework_misc_info_keys, vendor_item_list=vendor_item_list): sys.exit(1) call_func_with_temp_dir( lambda temp_dir: merge_target_files( temp_dir=temp_dir, framework_target_files=OPTIONS.framework_target_files, framework_item_list=framework_item_list, framework_misc_info_keys=framework_misc_info_keys, vendor_target_files=OPTIONS.vendor_target_files, vendor_item_list=vendor_item_list, output_target_files=OPTIONS.output_target_files, output_dir=OPTIONS.output_dir, output_item_list=output_item_list, output_ota=OPTIONS.output_ota, output_img=OPTIONS.output_img, output_super_empty=OPTIONS.output_super_empty, rebuild_recovery=OPTIONS.rebuild_recovery), OPTIONS.keep_tmp)