| #!/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 |
| r"""Generates chip_info.h for ROM build |
| """ |
| |
| import argparse |
| import logging as log |
| import sys |
| from datetime import datetime |
| from pathlib import Path |
| |
| header_template = r""" |
| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| // --------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! ---------// |
| |
| #ifndef _F_CHIPINFO_H__ |
| #define _F_CHIPINFO_H__ |
| |
| static const char chip_info[128] __attribute__((section(".chip_info"))) = |
| "Version: {%version%}, Build Date: {%build_date%}"; |
| |
| #endif // _F_CHIPINFO_H__ |
| |
| """ |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(prog="rom_chip_info") |
| parser.add_argument('--outdir', |
| '-o', |
| required=True, |
| help='Output Directory') |
| parser.add_argument('--ot_version', |
| required=False, |
| help='OpenTitan Version') |
| parser.add_argument('--ot_version_file', |
| required=False, |
| help='Path to a file with the OpenTitan Version') |
| |
| log.basicConfig(format="%(levelname)s: %(message)s") |
| args = parser.parse_args() |
| |
| if not args.outdir: |
| log.error("Missing --outdir.") |
| raise SystemExit(sys.exc_info()[1]) |
| |
| if args.ot_version: |
| version = args.ot_version |
| elif args.ot_version_file: |
| version = open(args.ot_version_file, "rt").read().strip() |
| else: |
| log.error( |
| "Missing ot_version, provide --ot_version or --ot_version_file.") |
| raise SystemExit(sys.exc_info()[1]) |
| |
| outdir = Path(args.outdir) |
| |
| outdir.mkdir(parents=True, exist_ok=True) |
| out_path = outdir / "chip_info.h" |
| |
| now = datetime.now() |
| wall_time = now.strftime("%Y-%m-%d %H:%M:%S") |
| |
| log.info("Version: %s" % (version, )) |
| log.info("Build Date: %s" % (wall_time, )) |
| |
| output = header_template |
| output = output.replace('{%version%}', version, 1) |
| output = output.replace('{%build_date%}', wall_time, 1) |
| |
| with out_path.open(mode='w', encoding='UTF-8') as fout: |
| fout.write(output + "\n") |
| |
| |
| if __name__ == "__main__": |
| main() |