| """ Store command-line options for global access. """ | |
| import argparse | |
| from typing import Sequence | |
| args = None | |
| def parse_args(argv: Sequence[str], description: str) -> None: | |
| parser = argparse.ArgumentParser( | |
| description=description, | |
| formatter_class=argparse.ArgumentDefaultsHelpFormatter) | |
| parser.add_argument("-u", | |
| "--uarch", | |
| required=True, | |
| help="Microarchitecture configuration file", | |
| metavar="JSON") | |
| parser.add_argument("-e", | |
| "--extend", | |
| action="append", | |
| default=[], | |
| help="Extension used to modify microarchitecture. This" | |
| " option can be used multiple times.", | |
| metavar="JSON") | |
| parser.add_argument("-s", | |
| "--set", | |
| action="append", | |
| default=[], | |
| help="Modify individual parts of the microarchitecture." | |
| " This option can be used multiple times.", | |
| metavar="PATH=VALUE") | |
| parser.add_argument("-r", | |
| "--report", | |
| help="Print report to FILE (otherwise report is printed" | |
| " to stdout)", | |
| metavar="FILE") | |
| parser.add_argument("--report-dont-include-cfg", | |
| action='store_true', | |
| help="Don't include the configuration with the report.", | |
| dest="report_dont_include_cfg") | |
| parser.add_argument("--save-counters", | |
| help="Save counters to FILE for later processing", | |
| metavar="FILE", | |
| dest="save_counters") | |
| parser.add_argument("-t", | |
| "--print-trace", | |
| choices=["detailed", "three-valued"], | |
| help="Print cycle-by-cycle trace", | |
| dest="print_trace") | |
| parser.add_argument("--print-from-cycle", | |
| default=0, | |
| type=int, | |
| help="Start printing only from cycle N", | |
| metavar="N", | |
| dest="print_from_cycle") | |
| parser.add_argument("--cycles", | |
| type=int, | |
| help="Stop running after N cycles", | |
| metavar="N", | |
| dest="print_cycles") | |
| parser.add_argument("--instructions", | |
| default="0:", | |
| help="Restrict the run to the instructions between N" | |
| " and M", | |
| metavar="N:[M]") | |
| parser.add_argument("--json-trace", | |
| action='store_true', | |
| help="Read the input trace as JSON", | |
| dest="json_trace") | |
| parser.add_argument("--json-trace-buffer-size", | |
| type=int, | |
| default=100000, | |
| help="For efficiency, read N instructions at a time.", | |
| metavar="N", | |
| dest="json_trace_buffer_size") | |
| # The -v flag is setup so that verbose holds the number of times the flag | |
| # was used. This is the standard way to use -v, even though at the moment | |
| # we have only two levels of verbosity: warning (the default, with no -v), | |
| # and info. | |
| parser.add_argument("-v", | |
| "--verbose", | |
| default=0, | |
| action="count", | |
| help="Increase the verbosity level. By default only" | |
| " errors and warnings will show. Use '-v' to also show" | |
| " information messages.") | |
| parser.add_argument("trace", nargs="?", help="Input trace", metavar="FILE") | |
| global args # pylint: disable=global-statement | |
| args = parser.parse_args(argv) |