blob: 38fb415b80f7e6b0fcc3b057f7458f78189c1ad7 [file] [log] [blame]
#!/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()