1# Copyright (c) 2024 Antmicro <www.antmicro.com>
2#
3# SPDX-License-Identifier: Apache-2.0
4
5'''Runner stub for Renode.'''
6
7import subprocess
8
9from runners.core import RunnerCaps, ZephyrBinaryRunner
10
11
12class RenodeRunner(ZephyrBinaryRunner):
13    '''Place-holder for Renode runner customizations.'''
14
15    def __init__(self, cfg, args):
16        super().__init__(cfg)
17        self.renode_arg = args.renode_arg
18        self.renode_command = args.renode_command
19        self.renode_help = args.renode_help
20
21    @classmethod
22    def name(cls):
23        return 'renode'
24
25    @classmethod
26    def capabilities(cls):
27        return RunnerCaps(commands={'simulate'}, hide_load_files=True)
28
29    @classmethod
30    def do_add_parser(cls, parser):
31        parser.add_argument('--renode-arg',
32                            metavar='ARG',
33                            action='append',
34                            help='''additional argument passed to Renode;
35                            `--help` will print all possible arguments''')
36        parser.add_argument('--renode-command',
37                            metavar='COMMAND',
38                            action='append',
39                            help='additional command passed to Renode\'s simulation')
40        parser.add_argument('--renode-help',
41                            default=False,
42                            action='store_true',
43                            help='print all possible `Renode` arguments')
44
45    @classmethod
46    def do_create(cls, cfg, args):
47        return RenodeRunner(cfg, args)
48
49    def do_run(self, command, **kwargs):
50        self.run_test(**kwargs)
51
52    def run_test(self, **kwargs):
53        cmd = ['renode']
54        if self.renode_help is True:
55            cmd.append('--help')
56        else:
57            if self.renode_arg is not None:
58                for arg in self.renode_arg:
59                    cmd.append(arg)
60            if self.renode_command is not None:
61                for command in self.renode_command:
62                    cmd.append('-e')
63                    cmd.append(command)
64        subprocess.run(cmd, check=True)
65