#!/usr/bin/env python3
from shell_helpers import LF

import os
import pathlib
import subprocess

import common
from shell_helpers import LF

class Main(common.LkmcCliFunction):
    def __init__(self):
        super().__init__(
            description='''\
Run gem5 regression tests.
https://cirosantilli.com/linux-kernel-module-cheat#gem5-regression-tests
'''
        )
        self.add_argument(
            '--cmd',
            default='run',
            help='''
List tests instead of running them.
''',
        )
        self.add_argument(
            'extra_args',
            metavar='extra-args',
            nargs='*',
        )

    def timed_main(self):
        if self.env['cmd'] == 'run':
            extra_args = [
                '--base-dir', self.env['gem5_source_dir'], LF,
                '--bin-path', self.env['gem5_test_binaries_dir'], LF,
                '--build-dir', self.env['gem5_build_build_dir'], LF,
                '-j', str(self.env['nproc']), LF,
                '-t', str(self.env['nproc']), LF,
            ]
        else:
            extra_args = []
        return self.sh.run_cmd(
            [
                os.path.join(self.env['gem5_source_dir'], 'tests', 'main.py'), LF,
                self.env['cmd'], LF,
                '--isa', self.env['gem5_arch'], LF,
                '--variant', self.env['gem5_build_type'], LF,
            ] +
            extra_args +
            self.sh.add_newlines(self.env['extra_args']),
            cwd=os.path.join(self.env['gem5_source_dir'], 'tests'),
            raise_on_failure=False,
        )

if __name__ == '__main__':
    Main().cli()
