Skip to content

Commit

Permalink
Use argparse for argument parsing
Browse files Browse the repository at this point in the history
This is more maintainable and scalable and gives better errors and a nice `--help` message. The interface is compatible with the previous version.
  • Loading branch information
Timmmm committed Dec 20, 2024
1 parent 9226b0d commit 1fa46f7
Showing 1 changed file with 61 additions and 29 deletions.
90 changes: 61 additions & 29 deletions parse.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#!/usr/bin/env python3

import argparse
import collections
import json
import logging
import pprint
import sys

from c_utils import make_c
from chisel_utils import make_chisel
Expand All @@ -21,67 +22,98 @@
logging.basicConfig(level=LOG_LEVEL, format=LOG_FORMAT)


def main():
print(f"Running with args : {sys.argv}")

extensions = sys.argv[1:]

targets = {
"-c",
"-chisel",
"-go",
"-latex",
"-pseudo",
"-rust",
"-spinalhdl",
"-sverilog",
}

extensions = [ext for ext in extensions if ext not in targets]
print(f"Extensions selected : {extensions}")

include_pseudo = "-pseudo" in sys.argv[1:]

def generate_extensions(
extensions: list[str],
include_pseudo: bool,
c: bool,
chisel: bool,
spinalhdl: bool,
sverilog: bool,
rust: bool,
go: bool,
latex: bool,
):
instr_dict = create_inst_dict(extensions, include_pseudo)

with open("instr_dict.json", "w", encoding="utf-8") as outfile:
json.dump(add_segmented_vls_insn(instr_dict), outfile, indent=2)
instr_dict = collections.OrderedDict(sorted(instr_dict.items()))

if "-c" in sys.argv[1:]:
if c:
instr_dict_c = create_inst_dict(
extensions, False, include_pseudo_ops=emitted_pseudo_ops
)
instr_dict_c = collections.OrderedDict(sorted(instr_dict_c.items()))
make_c(instr_dict_c)
logging.info("encoding.out.h generated successfully")

if "-chisel" in sys.argv[1:]:
if chisel:
make_chisel(instr_dict)
logging.info("inst.chisel generated successfully")

if "-spinalhdl" in sys.argv[1:]:
if spinalhdl:
make_chisel(instr_dict, True)
logging.info("inst.spinalhdl generated successfully")

if "-sverilog" in sys.argv[1:]:
if sverilog:
make_sverilog(instr_dict)
logging.info("inst.sverilog generated successfully")

if "-rust" in sys.argv[1:]:
if rust:
make_rust(instr_dict)
logging.info("inst.rs generated successfully")

if "-go" in sys.argv[1:]:
if go:
make_go(instr_dict)
logging.info("inst.go generated successfully")

if "-latex" in sys.argv[1:]:
if latex:
make_latex_table()
logging.info("instr-table.tex generated successfully")
make_priv_latex_table()
logging.info("priv-instr-table.tex generated successfully")


def main():
parser = argparse.ArgumentParser(description="Generate RISC-V constants headers")
parser.add_argument(
"-pseudo", action="store_true", help="Include pseudo-instructions"
)
parser.add_argument("-c", action="store_true", help="Generate output for C")
parser.add_argument(
"-chisel", action="store_true", help="Generate output for Chisel"
)
parser.add_argument(
"-spinalhdl", action="store_true", help="Generate output for SpinalHDL"
)
parser.add_argument(
"-sverilog", action="store_true", help="Generate output for SystemVerilog"
)
parser.add_argument("-rust", action="store_true", help="Generate output for Rust")
parser.add_argument("-go", action="store_true", help="Generate output for Go")
parser.add_argument("-latex", action="store_true", help="Generate output for Latex")
parser.add_argument(
"extensions",
nargs="*",
help="Extensions to use. This is a glob of the rv_.. files, e.g. 'rv*' will give all extensions.",
)

args = parser.parse_args()

print(f"Extensions selected : {args.extensions}")

generate_extensions(
args.extensions,
args.pseudo,
args.c,
args.chisel,
args.spinalhdl,
args.sverilog,
args.rust,
args.go,
args.latex,
)


if __name__ == "__main__":
main()

0 comments on commit 1fa46f7

Please sign in to comment.