temporary_files = []
temporary_binary = None
openocd_config = []
+ use_fpu = False
+ misa = None
def __init__(self, cmd, run, isolate):
self.cmd = cmd
prefix=binary_name + "_")
binary_name = self.temporary_binary.name
Target.temporary_files.append(self.temporary_binary)
+ march = "rv%dima" % self.xlen
+ if self.use_fpu:
+ march += "fd"
+ if self.extensionSupported("c"):
+ march += "c"
testlib.compile(sources +
("programs/entry.S", "programs/init.c",
"-I", "../env",
+ "-march=%s" % march,
"-T", "targets/%s/link.lds" % (self.directory or self.name),
"-nostartfiles",
"-mcmodel=medany",
+ "-DXLEN=%d" % self.xlen,
"-o", binary_name),
xlen=self.xlen)
return binary_name
+ def extensionSupported(self, letter):
+ # target.misa is set by testlib.ExamineTarget
+ return self.misa & (1 << (ord(letter.upper()) - ord('A')))
+
class SpikeTarget(Target):
# pylint: disable=abstract-method
directory = "spike"
ram_size = 5 * 1024 * 1024
instruction_hardware_breakpoint_count = 4
reset_vector = 0x1000
+ openocd_config = "targets/%s/openocd.cfg" % directory
class Spike64Target(SpikeTarget):
name = "spike64"
xlen = 64
+ use_fpu = True
- def server(self):
+ def target(self):
return testlib.Spike(self.cmd, halted=True)
class Spike32Target(SpikeTarget):
name = "spike32"
xlen = 32
- def server(self):
+ def target(self):
return testlib.Spike(self.cmd, halted=True, xlen=32)
class FreedomE300Target(Target):
instruction_hardware_breakpoint_count = 2
openocd_config = "targets/%s/openocd.cfg" % name
+class HiFive1Target(FreedomE300Target):
+ name = "HiFive1"
+ openocd_config = "targets/%s/openocd.cfg" % name
+
class FreedomE300SimTarget(Target):
name = "freedom-e300-sim"
xlen = 32
FreedomE300Target,
FreedomU500Target,
FreedomE300SimTarget,
- FreedomU500SimTarget]
+ FreedomU500SimTarget,
+ HiFive1Target]
def add_target_options(parser):
group = parser.add_mutually_exclusive_group(required=True)