diff --git a/osaca/osaca.py b/osaca/osaca.py index 2b6f524..953ce8c 100755 --- a/osaca/osaca.py +++ b/osaca/osaca.py @@ -17,6 +17,7 @@ MODULE_DATA_DIR = os.path.join( ) LOCAL_OSACA_DIR = os.path.join(os.path.expanduser('~') + '/.osaca/') DATA_DIR = os.path.join(LOCAL_OSACA_DIR, 'data/') +SUPPORTED_ARCHS = ['SNB', 'IVB', 'HSW', 'BDW', 'SKX', 'CSX', 'ZEN1', 'ZEN2', 'TX2'] # Stolen from pip @@ -141,10 +142,9 @@ def check_arguments(args, parser): :param args: arguments given from :class:`~argparse.ArgumentParser` after parsing :param parser: :class:`~argparse.ArgumentParser` object """ - supported_archs = ['SNB', 'IVB', 'HSW', 'BDW', 'SKX', 'CSX', 'ZEN1', 'ZEN2', 'TX2'] supported_import_files = ['ibench', 'asmbench'] - if 'arch' in args and (args.arch is None or args.arch.upper() not in supported_archs): + if 'arch' in args and (args.arch is None or args.arch.upper() not in SUPPORTED_ARCHS): parser.error( 'Microarchitecture not supported. Please see --help for all valid architecture codes.' ) diff --git a/tests/test_cli.py b/tests/test_cli.py index 306e95a..5c3a3dd 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,6 +12,7 @@ from unittest.mock import patch import osaca.osaca as osaca from osaca.parser import ParserAArch64v81, ParserX86ATT +from osaca.semantics import MachineModel class ErrorRaisingArgumentParser(argparse.ArgumentParser): @@ -138,6 +139,20 @@ class TestCLI(unittest.TestCase): osaca.run(args, output_file=output) self.assertTrue('WARNING' not in output.getvalue()) + def test_architectures(self): + parser = osaca.create_parser() + # Run the test kernel for all architectures + archs = osaca.SUPPORTED_ARCHS + for arch in archs: + with self.subTest(micro_arch=arch): + isa = MachineModel.get_isa_for_arch(arch) + kernel = 'kernel_{}.s'.format(isa) + args = parser.parse_args( + ['--arch', arch, self._find_test_file(kernel)] + ) + output = StringIO() + osaca.run(args, output_file=output) + ################## # Helper functions ##################