[dif/util] Add a script for instantiating dif_template.tpl.h
Signed-off-by: Miguel Young de la Sota <mcyoung@google.com>
diff --git a/util/make_new_dif.py b/util/make_new_dif.py
new file mode 100755
index 0000000..38fb415
--- /dev/null
+++ b/util/make_new_dif.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+# make_new_dif.py is a script for quickly applying replacement operations to
+# dif_template.h.tpl. See sw/device/lib/dif/dif_template.h.tpl for more
+# information.
+#
+# The produced file may still require spell-checking and general cleaning-up.
+
+import argparse
+
+from pathlib import Path
+
+from mako.template import Template
+
+# This file is $REPO_TOP/util/make_new_dif.py, so it takes two parent()
+# calls to get back to the top.
+REPO_TOP = Path(__file__).resolve().parent.parent
+
+
+def main():
+ dif_dir = REPO_TOP / 'sw/device/lib/dif'
+ template_file = dif_dir / 'dif_template.h.tpl'
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--ip',
+ '-i',
+ required=True,
+ help='the short name of the IP, in snake_case')
+ parser.add_argument('--peripheral',
+ '-p',
+ required=True,
+ help='the documentation-friendly name of the IP')
+ parser.add_argument(
+ '--handle-param',
+ '-a',
+ default='handle',
+ help='an optional name to replace the `handle` perameter name')
+ parser.add_argument('--template',
+ '-t',
+ type=Path,
+ default=template_file,
+ help='where to find the header template')
+ parser.add_argument('--output',
+ '-o',
+ type=Path,
+ help='where to write the header; defaults to dif_ip.h')
+ args = parser.parse_args()
+
+ ip_snake = args.ip
+ ip_camel = ''.join([word.capitalize() for word in args.ip.split('_')])
+ ip_upper = ip_snake.upper()
+ periph_lower = args.peripheral
+ # We just want to set the first character to title case. In particular,
+ # .capitalize() does not do the right thing, since it would convert
+ # UART to Uart.
+ periph_upper = periph_lower[0].upper() + periph_lower[1:]
+ handle = args.handle_param
+
+ with args.template.open('r') as f:
+ template = Template(f.read())
+
+ header = template.render(
+ ip_snake=ip_snake,
+ ip_camel=ip_camel,
+ ip_upper=ip_upper,
+ periph_lower=periph_lower,
+ periph_upper=periph_upper,
+ handle=handle,
+ )
+
+ dif_file = args.output or dif_dir / 'dif_{}.h'.format(ip_snake)
+ with dif_file.open('w') as f:
+ f.write(header)
+ print('Template sucessfuly written to {}.'.format(str(dif_file)))
+
+
+if __name__ == '__main__':
+ main()