blob: 0998ec76e9d0bed8c0325abbd7a79c031b971723 [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
import logging
import subprocess
import sys
from pathlib import Path
from typing import List
from autogen_banner import get_autogen_banner
from make_new_dif.ip import Ip
from mako.template import Template
# This file is $REPO_TOP/util/autogen_testutils.py, so it takes two parent()
# calls to get back to the top.
REPO_TOP = Path(__file__).resolve().parent.parent.parent
def gen_testutils(ips_with_difs: List[Ip]) -> None:
"""Generate testutils libraries that are rendered from Mako templates.
Args:
ips_with_difs: List of IP objects that have existing DIF libraries.
Returns:
None
"""
# Sort input so the templates get rendered in the same order every time.
ips_with_difs.sort(key=lambda ip: ip.name_snake)
# Define input/output directories.
testutils_templates_dir = REPO_TOP / "util/autogen_testutils/templates"
autogen_testutils_dir = REPO_TOP / "sw/device/lib/testing/autogen"
# Create output directories if needed.
autogen_testutils_dir.mkdir(exist_ok=True)
testutilses = []
# Render templates.
for testutils_template_path in testutils_templates_dir.iterdir():
if testutils_template_path.suffix == ".tpl":
comment_syntax = "#" if testutils_template_path.stem.endswith(
".build") else "//"
# Read in template, render it, and write it to the output file.
testutils_template = Template(testutils_template_path.read_text())
testutils = autogen_testutils_dir / testutils_template_path.stem
testutils.write_text(
testutils_template.render(ips_with_difs=ips_with_difs,
autogen_banner=get_autogen_banner(
"util/autogen_testutils.py",
comment=comment_syntax)))
testutilses += [testutils]
# Format autogenerated file with clang-format.
try:
subprocess.check_call(
["./bazelisk.sh", "run", "//quality:clang_format_fix", "--"] + testutilses
)
except subprocess.CalledProcessError:
logging.error(
f"failed to format {testutilses} with clang-format.")
sys.exit(1)
print(f"testutils successfully written to {str(testutilses)}.")