Add spike trace generation option

Change-Id: I36bc43a3847eeba1a0de01fed1a06e5969ec1744
diff --git a/scripts/test_runner.py b/scripts/test_runner.py
index d1d3010..b50ae07 100755
--- a/scripts/test_runner.py
+++ b/scripts/test_runner.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-"""Runs test within Qemu and Renode simulators."""
+"""Runs test within Spike, Qemu and Renode simulators."""
 import argparse
 import os
 import re
@@ -15,7 +15,7 @@
 
 parser.add_argument('simulator',
                     help='Select a simulator',
-                    choices=['renode', 'qemu'])
+                    choices=['renode', 'qemu', 'spike'])
 parser.add_argument('elf',
                     help='Elf to execute on a simulator')
 parser.add_argument('--renode-path',
@@ -24,6 +24,8 @@
                     help="Path to trace output file")
 parser.add_argument('--qemu-path',
                     help="Path to qemu simulator")
+parser.add_argument('--spike-path',
+                    help="Path to spike simulator")
 parser.add_argument('--timeout', type=int,
                     help="Timeout for test", default=1000)
 parser.add_argument("--quick_test",
@@ -40,7 +42,7 @@
         self.termination_strings = [
             "main returned",
             "Exception occurred",
-            "ReadByte from non existing peripheral"
+            "ReadByte from non existing peripheral",
         ]
 
     def run(self, timeout=1000):
@@ -114,15 +116,32 @@
             os.remove(script_path)
         return test_output
 
+class SpikeSimulation(Simulation): # pylint: disable=too-few-public-methods
+    """ Spike Simulation """
+    def __init__(self, path, elf):
+        self.sim_params = {
+                "path": path,
+                "elf": elf,
+                "trace_file": os.path.realpath(args.trace_output) if args.trace_output else ""
+                }
+        self.spike_simulator_cmd = "%(path)s -m0x32000000:0x100000,0x34000000:0x1000000 --pc=0x32000000 "
+
+        if args.trace_output:
+            self.spike_simulator_cmd += " -l --log=%(trace_file)s "
+
+        self.spike_simulator_cmd += " %(elf)s"
+        super().__init__(self.spike_simulator_cmd % self.sim_params)
 
 Simulators = {
     "qemu": QemuSimulation,
-    "renode": RenodeSimulation
+    "renode": RenodeSimulation,
+    "spike": SpikeSimulation,
 }
 
 simulators_paths = {
     "renode": args.renode_path,
-    "qemu": args.qemu_path
+    "qemu": args.qemu_path,
+    "spike": args.spike_path,
 }