util: Add Xen compilation to gen_arm_fs_files.py
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Mon, 30 Mar 2020 09:08:25 +0000 (10:08 +0100)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Sat, 15 Aug 2020 13:09:17 +0000 (13:09 +0000)
Change-Id: I61014d9686f0362ebb83dca5d4d33ac08d66d0a7
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32557
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Richard Cooper <richard.cooper@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
util/gen_arm_fs_files.py

index 986dda424d53302e7538a95cd09e8837d290eb7a..ea05fe189db4ca77e163ab34914594e6bd4b5b84 100755 (executable)
@@ -1,5 +1,17 @@
 #!/usr/bin/env python2.7
 
+# Copyright (c) 2020 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
 # Copyright (c) 2017-2018 Metempsy Technology Consulting
 # All rights reserved.
 #
@@ -230,6 +242,73 @@ def m5():
         m5_dir,
         ["cp", "m5", binaries_dir + "/m5.aarch32"])
 
+def xen():
+    """
+    Build Xen for aarch64
+    """
+    xen_dir = os.path.join(options.dest_dir, "xen")
+    bootwrapper_dir = os.path.join(options.dest_dir, "bootwrapper")
+    linux_cmdline = "console=hvc0 root=/dev/vda rw mem=1G"
+    xen_cmdline = "dtuart=/uart@1c090000 console=dtuart no-bootscrub " + \
+                  "dom0_mem=1G loglvl=all guest_loglvl=all"
+
+    run_cmd("clone Xen",
+        options.dest_dir,
+        ["git", "clone", "git://xenbits.xen.org/xen.git",
+         xen_dir])
+
+    run_cmd("clone boot-wrapper-aarch64",
+        options.dest_dir,
+        ["git", "clone", "git://git.kernel.org/pub/" +
+            "scm/linux/kernel/git/mark/boot-wrapper-aarch64.git",
+         bootwrapper_dir])
+
+    # Need to compile arm64 Linux
+    linux_dir = os.path.join(options.dest_dir, "linux-kernel-vexpress_gem5")
+    linux_bin = os.path.join(linux_dir,
+        "arch", "arm64", "boot", "Image")
+    if not os.path.exists(linux_bin):
+        linux_clone()
+        linux64()
+
+    # Need to compile DTBs
+    dtb_bin = os.path.join(binaries_dir, "armv8_gem5_v2_1cpu.dtb")
+    if not os.path.exists(dtb_bin):
+        dtbs()
+
+    # Building Xen
+    run_cmd("building xen for aarch64",
+        xen_dir,
+        ["make", "dist-xen", "XEN_TARGET_ARCH=arm64",
+         "CROSS_COMPILE=aarch64-linux-gnu-",
+         "CONFIG_EARLY_PRINTK=vexpress", make_jobs_str])
+
+    # Building boot-wrapper-aarch64
+    run_cmd("autoreconf boot-wrapper-aarch64",
+        bootwrapper_dir, ["autoreconf", "-i"])
+    run_cmd("configure boot-wrapper-aarch64",
+        bootwrapper_dir, ["./configure",
+            "--host=aarch64-linux-gnu",
+            "--with-kernel-dir={}".format(linux_dir),
+            "--with-dtb={}".format(dtb_bin),
+            "--with-cmdline='{}'".format(linux_cmdline),
+            "--with-xen-cmdline='{}'".format(xen_cmdline),
+            "--with-xen={}".format(os.path.join(xen_dir, "xen", "xen")),
+            "--enable-psci",
+            "--enable-gicv3"])
+    run_cmd("build boot-wrapper-aarch64",
+        bootwrapper_dir, ["make"])
+
+    # Copying the final binary
+    run_cmd("copy xen binary",
+        bootwrapper_dir, ["cp", "xen-system.axf", binaries_dir])
+
+    with open(os.path.join(revisions_dir, "xen"), "w+") as rev_file:
+        run_cmd("write revision of xen repo",
+            xen_dir,
+            ["git", "rev-parse", "--short", "HEAD"],
+            rev_file)
+
 script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
 gem5_dir = os.path.dirname(script_dir)
 
@@ -239,6 +318,7 @@ all_binaries = {
     "dtbs" : dtbs,
     "bootloaders" : bootloaders,
     "m5" : m5,
+    "xen" : xen,
 }
 
 parser = OptionParser()