mirror of
https://git.proxmox.com/git/fwupd
synced 2025-06-02 10:23:25 +00:00

The generate_binary.sh is a script that calls the objcopy tool and genpeimg in the case of Windows, to generate a PE binary file. But doesn't have to be a shell script and could be rewritten as a python script. This will make this code to generate a PE binary easier to extend if needed. Also, the only reason that's a template is to define the objcopy tool used, but this can also be passed as a positional argument.
88 lines
1.7 KiB
Python
Executable File
88 lines
1.7 KiB
Python
Executable File
#!/usr/bin/python3
|
|
#
|
|
# Copyright (C) 2021 Javier Martinez Canillas <javierm@redhat.com>
|
|
# Copyright (C) 2021 Richard Hughes <richard@hughsie.com>
|
|
#
|
|
# SPDX-License-Identifier: LGPL-2.1+
|
|
#
|
|
# pylint: disable=missing-docstring, invalid-name
|
|
|
|
import subprocess
|
|
import sys
|
|
import argparse
|
|
|
|
|
|
def _run_objcopy(args):
|
|
|
|
argv = [
|
|
args.objcopy,
|
|
"-j",
|
|
".text",
|
|
"-j",
|
|
".sdata",
|
|
"-j",
|
|
".dynamic",
|
|
"-j",
|
|
".rel*",
|
|
args.infile,
|
|
args.outfile,
|
|
]
|
|
|
|
# aarch64 and arm32 don't have an EFI capable objcopy
|
|
# Use 'binary' instead, and add required symbols manually
|
|
if args.arch in ["aarch64", "arm"]:
|
|
argv.extend(["-O", "binary"])
|
|
else:
|
|
argv.extend(["--target", "efi-app-{}".format(args.arch)])
|
|
try:
|
|
subprocess.run(argv, check=True)
|
|
except FileNotFoundError as e:
|
|
print(str(e))
|
|
sys.exit(1)
|
|
|
|
|
|
def _run_genpeimg(args):
|
|
|
|
# this is okay if it does not exist
|
|
argv = [
|
|
"genpeimg",
|
|
"-d",
|
|
"+d",
|
|
"+n",
|
|
"-d",
|
|
"+s",
|
|
args.outfile,
|
|
]
|
|
try:
|
|
subprocess.run(argv, check=True)
|
|
except FileNotFoundError as _:
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--objcopy",
|
|
default="objcopy",
|
|
help="Binary file to use for objcopy",
|
|
)
|
|
parser.add_argument(
|
|
"--arch",
|
|
default="x86_64",
|
|
help="EFI architecture",
|
|
)
|
|
parser.add_argument(
|
|
"infile",
|
|
help="Input file",
|
|
)
|
|
parser.add_argument(
|
|
"outfile",
|
|
help="Output file",
|
|
)
|
|
_args = parser.parse_args()
|
|
_run_objcopy(_args)
|
|
_run_genpeimg(_args)
|
|
|
|
sys.exit(0)
|