From 315f0744b249cf483b9ce9a318066d2a54e21c25 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 7 Sep 2020 10:42:43 +0200 Subject: add machine-readable binary size output ("make attributes") --- script/size.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 script/size.py (limited to 'script/size.py') diff --git a/script/size.py b/script/size.py new file mode 100755 index 0000000..e553314 --- /dev/null +++ b/script/size.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import json +import re +import subprocess +import sys + + +def main(size_executable, rom_sections, ram_sections): + rom_sections = rom_sections.split(",") + ram_sections = ram_sections.split(",") + + status = subprocess.run( + [size_executable, "-A", "build/system.elf"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines=True, + ) + + section_size = dict() + + for line in status.stdout.split("\n"): + match = re.match("[.](\S+)\s+(\d+)", line) + if match: + section = match.group(1) + size = int(match.group(2)) + section_size[section] = size + + total = { + "ROM": sum(map(lambda section: section_size[section], rom_sections)), + "RAM": sum(map(lambda section: section_size[section], ram_sections)), + } + + output = {"section": section_size, "total": total} + + print(json.dumps(output)) + + +if __name__ == "__main__": + main(*sys.argv[1:]) -- cgit v1.2.3