#!/usr/bin/env python3 import threading import os import common class Main(common.LkmcCliFunction): def __init__(self): super().__init__() self.add_argument( 'tests', metavar='tests', nargs='*', help='''\ If given, run only the given tests. Otherwise, run all tests, found by searching for the Python test files. ''' ) def timed_main(self): run = self.import_path('run').Main() run_gdb = self.import_path('run-gdb').Main() if self.env['arch'] in self.env['crosstool_ng_supported_archs']: if self.env['tests'] == []: test_scripts_noext = [] for f in os.listdir(self.env['baremetal_src_dir']): base, ext = os.path.splitext(f) if ext == '.py': test_scripts_noext.append(base) for root, dirs, files in os.walk(os.path.join(self.env['baremetal_src_dir'], 'arch', self.env['arch'])): for f in files: base, ext = os.path.splitext(f) if ext == '.py': full_path = os.path.join(root, base) relpath = os.path.relpath(full_path, self.env['baremetal_src_dir']) test_scripts_noext.append(relpath) else: test_scripts_noext = self.env['tests'] for test_script_noext in test_scripts_noext: run_thread = threading.Thread(target=lambda: run( archs=[self.env['arch']], background=True, baremetal=test_script_noext, dry_run=self.env['dry_run'], emulators=self.env['emulator'], wait_gdb=True )) run_thread.start() run_gdb( archs=[self.env['arch']], baremetal=test_script_noext, dry_run=self.env['dry_run'], emulators=self.env['emulator'], test=True, ) run_thread.join() if __name__ == '__main__': Main().cli()