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, }