Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import sys
from os import path
from argparse import ArgumentParser
from .configuration import (
SfgConfigException, SfgConfigSource,
add_config_args_to_parser, config_from_parser_args, merge_configurations
)
def cli_main(program='sfg-cli'):
parser = ArgumentParser(program,
description="pystencilssfg command-line utility")
subparsers = parser.add_subparsers(required=True, title="Subcommands")
version_parser = subparsers.add_parser(
"version", help="Print version and exit.")
version_parser.set_defaults(func=version)
outfiles_parser = subparsers.add_parser(
"list-files", help="List files produced by given codegen script.")
outfiles_parser.set_defaults(func=list_files)
outfiles_parser.add_argument(
"--format", type=str, choices=("human", "cmake"), default="human")
outfiles_parser.add_argument("codegen_script", type=str)
add_config_args_to_parser(outfiles_parser)
args = parser.parse_args()
args.func(args)
exit(-1) # should never happen
def version(args):
from . import __version__
print(__version__)
exit(0)
def list_files(args):
try:
project_config, cmdline_config = config_from_parser_args(args)
except SfgConfigException as exc:
abort_with_config_exception(exc)
config = merge_configurations(project_config, cmdline_config, None)
scriptdir, scriptname = path.split(args.codegen_script)
basename = path.splitext(scriptname)[0]
from .emitters.cpu.basic_cpu import BasicCpuEmitter
emitter = BasicCpuEmitter(basename, config)
match args.format:
case "human": print(" ".join(emitter.output_files))
case "cmake": print(";".join(emitter.output_files), end="")
exit(0)
def abort_with_config_exception(exception: SfgConfigException):
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
match exception.config_source:
case SfgConfigSource.PROJECT:
eprint(
f"Invalid project configuration: {exception.message}\nCheck your configurator script.")
case SfgConfigSource.COMMANDLINE:
eprint(
f"Invalid configuration on command line: {exception.message}")
case _: assert False, "(Theoretically) unreachable code. Contact the developers."
exit(1)