zephyr/scripts/mergehex.py
Sebastian Bøe 6d8d4442b0 mergehex: Improve the error feedback when merged hex files overlap
When merging hex files, and there is an overlap between the hex files,
display the hex file that failed to merge.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-01-29 17:04:42 +01:00

56 lines
1.5 KiB
Python

#!/usr/bin/env python3
#
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
# This merges a set of input hex files into a single output hex file.
# Any conflicts will result in an error being reported.
from intelhex import IntelHex
from intelhex import AddressOverlapError
import argparse
def merge_hex_files(output, input_hex_files):
ih = IntelHex()
for hex_file_path in input_hex_files:
to_merge = IntelHex(hex_file_path)
# Since 'arm-none-eabi-objcopy' incorrectly inserts record
# type '03 - Start Segment Address', we need to remove the
# start_addr to avoid conflicts when merging.
to_merge.start_addr = None
try:
ih.merge(to_merge)
except AddressOverlapError as e:
raise AddressOverlapError("{} has merge issues".format(hex_file_path))
print("Merged {}".format(hex_file_path))
ih.write_hex_file(output)
def parse_args():
parser = argparse.ArgumentParser(
description="Merge hex files.",
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("-o", "--output", required=False, default="merged.hex",
type=argparse.FileType('w', encoding='UTF-8'),
help="Output file name.")
parser.add_argument("input_files", nargs='*')
return parser.parse_args()
def main():
args = parse_args()
merge_hex_files(args.output, args.input_files)
if __name__ == "__main__":
main()