diff --git a/bin/verilator_ccache_report b/bin/verilator_ccache_report index 3ddd38491..e8d34c7e0 100755 --- a/bin/verilator_ccache_report +++ b/bin/verilator_ccache_report @@ -24,11 +24,7 @@ Version 2.0. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""") -parser.add_argument('-o', - type=argparse.FileType('w'), - metavar="OUTFILE", - required=True, - help='output file') +parser.add_argument('-o', type=pathlib.Path, metavar="OUTFILE", required=True, help='output file') parser.add_argument('logdir', type=pathlib.Path, help='log directory') args = parser.parse_args() @@ -58,34 +54,35 @@ for logfile in args.logdir.iterdir(): elapsed[obj] = toDateTime(match.group(1)) - start results[obj] = match.group(2) -args.o.write("#" * 80 + "\n") -args.o.write("ccache report (from verilator_ccache_report) :\n") +with args.o.open("w") as ofd: + ofd.write("#" * 80 + "\n") + ofd.write("ccache report (from verilator_ccache_report) :\n") -if not results: - args.o.write("\nAll object files up to date\n") -else: - args.o.write("\nCompiled object files:\n") - wnames = max(len(_) for _ in results) + 1 - wresults = max(len(_) for _ in results.values()) + 1 - for k in sorted(results.keys()): - args.o.write("{:{wnames}} : {:{wresults}} : {}s\n".format(k, - results[k], - elapsed[k].total_seconds(), - wnames=wnames, - wresults=wresults)) + if not results: + ofd.write("\nAll object files up to date\n") + else: + ofd.write("\nCompiled object files:\n") + wnames = max(len(_) for _ in results) + 1 + wresults = max(len(_) for _ in results.values()) + 1 + for k in sorted(results.keys()): + ofd.write("{:{wnames}} : {:{wresults}} : {}s\n".format(k, + results[k], + elapsed[k].total_seconds(), + wnames=wnames, + wresults=wresults)) - args.o.write("\nSummary:\n") - counts = collections.Counter(_ for _ in results.values()) - total = sum(counts.values()) - for k in sorted(counts.keys()): - c = counts[k] - args.o.write("{:{width}}| {} ({:.2%})\n".format(k, c, c / total, width=wresults)) + ofd.write("\nSummary:\n") + counts = collections.Counter(_ for _ in results.values()) + total = sum(counts.values()) + for k in sorted(counts.keys()): + c = counts[k] + ofd.write("{:{width}}| {} ({:.2%})\n".format(k, c, c / total, width=wresults)) - args.o.write("\nLongest:\n") - longest = sorted(list(elapsed.items()), key=lambda kv: -kv[1].total_seconds()) - for i, (k, v) in enumerate(longest): - args.o.write("{:{width}}| {}s\n".format(k, v.total_seconds(), width=wnames)) - if i > 4: - break + ofd.write("\nLongest:\n") + longest = sorted(list(elapsed.items()), key=lambda kv: -kv[1].total_seconds()) + for i, (k, v) in enumerate(longest): + ofd.write("{:{width}}| {}s\n".format(k, v.total_seconds(), width=wnames)) + if i > 4: + break -args.o.write("#" * 80 + "\n") + ofd.write("#" * 80 + "\n")