summaryrefslogtreecommitdiff
path: root/tools/metrics.py
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-12-02 14:22:52 +0700
committerhathach <[email protected]>2025-12-02 23:55:24 +0700
commit09e1113aaf1b2618ffe42e9638d68e6047b6f1ef (patch)
treee9e5ed0b237a7cf7a913fe5dd7e3d1709200fd92 /tools/metrics.py
parentc859744784cc396ae0993a16a1935b10fbd9b797 (diff)
adding metrics for computing average compiled size
Diffstat (limited to 'tools/metrics.py')
-rw-r--r--tools/metrics.py45
1 files changed, 38 insertions, 7 deletions
diff --git a/tools/metrics.py b/tools/metrics.py
index d972d3681..c6cd49d57 100644
--- a/tools/metrics.py
+++ b/tools/metrics.py
@@ -2,6 +2,7 @@
"""Calculate average size from multiple linker map files."""
import argparse
+import glob
import sys
import os
@@ -10,6 +11,24 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'linkermap'))
import linkermap
+def expand_files(file_patterns):
+ """Expand file patterns (globs) to list of files.
+
+ Args:
+ file_patterns: List of file paths or glob patterns
+
+ Returns:
+ List of expanded file paths
+ """
+ expanded = []
+ for pattern in file_patterns:
+ if '*' in pattern or '?' in pattern:
+ expanded.extend(glob.glob(pattern))
+ else:
+ expanded.append(pattern)
+ return expanded
+
+
def combine_maps(map_files, filters=None):
"""Combine multiple map files into a list of json_data.
@@ -109,25 +128,37 @@ def compute_avg(all_json_data):
return json_average
-def main():
+def main(argv=None):
parser = argparse.ArgumentParser(description='Calculate average size from linker map files')
- parser.add_argument('files', nargs='+', help='Path to map file(s)')
+ parser.add_argument('files', nargs='+', help='Path to map file(s) or glob pattern(s)')
parser.add_argument('-f', '--filter', dest='filters', action='append', default=[],
help='Only include object files whose path contains this substring (can be repeated)')
parser.add_argument('-o', '--out', dest='out', default='metrics',
help='Output path basename for JSON and Markdown files (default: metrics)')
- args = parser.parse_args()
+ parser.add_argument('-j', '--json', dest='json_out', action='store_true',
+ help='Write JSON output file')
+ parser.add_argument('-m', '--markdown', dest='markdown_out', action='store_true',
+ help='Write Markdown output file')
+ parser.add_argument('-q', '--quiet', dest='quiet', action='store_true',
+ help='Suppress summary output')
+ args = parser.parse_args(argv)
+
+ # Expand glob patterns
+ map_files = expand_files(args.files)
- all_json_data = combine_maps(args.files, args.filters)
+ all_json_data = combine_maps(map_files, args.filters)
json_average = compute_avg(all_json_data)
if json_average is None:
print("No valid map files found", file=sys.stderr)
sys.exit(1)
- linkermap.print_summary(json_average, False)
- linkermap.write_json(json_average, args.out + '.json')
- linkermap.write_markdown(json_average, args.out + '.md')
+ if not args.quiet:
+ linkermap.print_summary(json_average, False)
+ if args.json_out:
+ linkermap.write_json(json_average, args.out + '.json')
+ if args.markdown_out:
+ linkermap.write_markdown(json_average, args.out + '.md')
if __name__ == '__main__':