cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

nsis.py (2112B)


      1#!/usr/bin/env python3
      2#
      3# Copyright (C) 2020 Red Hat, Inc.
      4#
      5# SPDX-License-Identifier: GPL-2.0-or-later
      6
      7import argparse
      8import glob
      9import os
     10import shutil
     11import subprocess
     12import tempfile
     13
     14
     15def signcode(path):
     16    cmd = os.environ.get("SIGNCODE")
     17    if not cmd:
     18        return
     19    subprocess.run([cmd, path])
     20
     21
     22def main():
     23    parser = argparse.ArgumentParser(description="QEMU NSIS build helper.")
     24    parser.add_argument("outfile")
     25    parser.add_argument("prefix")
     26    parser.add_argument("srcdir")
     27    parser.add_argument("cpu")
     28    parser.add_argument("nsisargs", nargs="*")
     29    args = parser.parse_args()
     30
     31    destdir = tempfile.mkdtemp()
     32    try:
     33        subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
     34        with open(
     35            os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
     36        ) as nsh:
     37            for exe in glob.glob(
     38                os.path.join(destdir + args.prefix, "qemu-system-*.exe")
     39            ):
     40                exe = os.path.basename(exe)
     41                arch = exe[12:-4]
     42                nsh.write(
     43                    """
     44                Section "{0}" Section_{0}
     45                SetOutPath "$INSTDIR"
     46                File "${{BINDIR}}\\{1}"
     47                SectionEnd
     48                """.format(
     49                        arch, exe
     50                    )
     51                )
     52
     53        for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
     54            signcode(exe)
     55
     56        makensis = [
     57            "makensis",
     58            "-V2",
     59            "-NOCD",
     60            "-DSRCDIR=" + args.srcdir,
     61            "-DBINDIR=" + destdir + args.prefix,
     62        ]
     63        dlldir = "w32"
     64        if args.cpu == "x86_64":
     65            dlldir = "w64"
     66            makensis += ["-DW64"]
     67        if os.path.exists(os.path.join(args.srcdir, "dll")):
     68            makensis += ["-DDLLDIR={0}/dll/{1}".format(args.srcdir, dlldir)]
     69
     70        makensis += ["-DOUTFILE=" + args.outfile] + args.nsisargs
     71        subprocess.run(makensis)
     72        signcode(args.outfile)
     73    finally:
     74        shutil.rmtree(destdir)
     75
     76
     77if __name__ == "__main__":
     78    main()