diff --git a/scripts/build/file2hex.py b/scripts/build/file2hex.py index f402060f3e5..71336d0bb3d 100755 --- a/scripts/build/file2hex.py +++ b/scripts/build/file2hex.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # # Copyright (c) 2017 Intel Corporation +# Copyright (c) 2025 Siemens AG # # SPDX-License-Identifier: Apache-2.0 @@ -31,6 +32,8 @@ def parse_args(): parser.add_argument("-l", "--length", type=lambda x: int(x, 0), default=-1, help="""Length in bytes to read from the input file. Defaults to reading till the end of the input file.""") + parser.add_argument("-m", "--format", default="list", + help="Output format: 'list' (default) or 'literal' (string literal)") parser.add_argument("-g", "--gzip", action="store_true", help="Compress the file using gzip before output") parser.add_argument("-t", "--gzip-mtime", type=int, default=0, @@ -56,6 +59,12 @@ def make_hex(chunk): print(get_nice_string(hexlist) + ',') +def make_string_literal(chunk): + hexdata = codecs.encode(chunk, 'hex').decode("utf-8") + hexlist = map(''.join, zip(*[iter(hexdata)] * 2)) + print(''.join("\\x" + str(x) for x in hexlist), end='') + + def main(): parse_args() @@ -74,14 +83,30 @@ def main(): else: with open(args.file, "rb") as fp: fp.seek(args.offset) - if args.length < 0: - for chunk in iter(lambda: fp.read(1024), b''): - make_hex(chunk) + + if args.format == "literal": + if args.length < 0: + print('"', end='') + for chunk in iter(lambda: fp.read(1024), b''): + make_string_literal(chunk) + print('"', end='') + else: + print('"', end='') + remainder = args.length + for chunk in iter(lambda: fp.read(min(1024, remainder)), b''): + make_string_literal(chunk) + remainder = remainder - len(chunk) + print('"', end='') + else: - remainder = args.length - for chunk in iter(lambda: fp.read(min(1024, remainder)), b''): - make_hex(chunk) - remainder = remainder - len(chunk) + if args.length < 0: + for chunk in iter(lambda: fp.read(1024), b''): + make_hex(chunk) + else: + remainder = args.length + for chunk in iter(lambda: fp.read(min(1024, remainder)), b''): + make_hex(chunk) + remainder = remainder - len(chunk) if __name__ == "__main__":