regtool: add support to generate reg const as Rust (.rs)
Add -R and --rust option in regtool.py to generate Rust file.
Add regs-rust target in hw/Makefile to generate reg constant Rust
file for ALL ips. If a TOCK_ROOT variable is specified, e.g.
"TOCK_ROOT=~/ti50/third_party/tock/tock make -C hw regs-rust",
the Rust files will also be copied to
$(TOCK_ROOT)/chips/lowrisc/src/reg_constants folder.
BUG=none
TEST=regtool.py -R -o uart_regs.rs uart.hjson
make -C hw regs-rust
TOCK_ROOT=~/ti50/third_party/tock/tock make -C hw regs-rust
Signed-off-by: Chia-Chi Teng <ccteng@google.com>
Change-Id: I5f668d51e1f42e6541a41f3e565848230d6c07b6
diff --git a/util/regtool.py b/util/regtool.py
index aa264c5..8b7ee7f 100755
--- a/util/regtool.py
+++ b/util/regtool.py
@@ -12,7 +12,7 @@
from pathlib import PurePath
from reggen import (gen_cheader, gen_dv, gen_fpv, gen_html,
- gen_json, gen_rtl, gen_selfdoc, version)
+ gen_json, gen_rtl, gen_rust, gen_selfdoc, version)
from reggen.ip_block import IpBlock
DESC = """regtool, generate register info from Hjson source"""
@@ -46,6 +46,10 @@
'-D',
action='store_true',
help='Output C defines header')
+ parser.add_argument('--rust',
+ '-R',
+ action='store_true',
+ help='Output Rust constants')
parser.add_argument('--doc',
action='store_true',
help='Output source file documentation (gfm)')
@@ -117,7 +121,8 @@
arg_to_format = [('j', ('json', None)), ('c', ('compact', None)),
('d', ('html', None)), ('doc', ('doc', None)),
('r', ('rtl', 'rtl')), ('s', ('dv', 'dv')),
- ('f', ('fpv', 'fpv/vip')), ('cdefines', ('cdh', None))]
+ ('f', ('fpv', 'fpv/vip')), ('cdefines', ('cdh', None)),
+ ('rust', ('rs', None))]
format = None
dirspec = None
for arg_name, spec in arg_to_format:
@@ -225,6 +230,8 @@
return gen_html.gen_html(obj, outfile)
elif format == 'cdh':
return gen_cheader.gen_cdefines(obj, outfile, src_lic, src_copy)
+ elif format == 'rs':
+ return gen_rust.gen_rust(obj, outfile, src_lic, src_copy)
else:
return gen_json.gen_json(obj, outfile, format)