STM32GENERIC/tools/script/process_build.py

94 lines
3.0 KiB
Python

import os
import json
import subprocess
git_hash = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']).decode("ascii").strip()
def find_finished_compilations(path):
ret = []
for root, dirnames, filenames in os.walk(path):
for filename in filenames:
if filename == "info.json":
ret.append(os.path.join(root, filename))
return sorted(ret)
def process_stdout(build_path):
with open(os.path.join(build_path, "stdout.txt")) as f:
lines = f.readlines()
flash = None
ram = None
for line in lines:
if 'Sketch uses' in line:
flash = line.split(' ')[2]
if 'Global variables use ' in line:
ram = line.split(' ')[3]
return (flash, ram)
def process_build(info_filename):
result = {}
with open(info_filename) as f:
info = json.load(f)
build_target = info["build_target"]
sketch_path = info["sketch_path"]
build_path = info["build_path"]
git_hash = info["git_hash"]
drive, path = os.path.splitdrive(sketch_path)
path_parts = os.path.normpath(path).split(os.sep)
library_name = path_parts[path_parts.index("examples") - 1]
library_path = os.path.join(drive, os.sep, *path_parts[:path_parts.index("examples")])
examples_path = os.path.join(drive, os.sep, *path_parts[:path_parts.index("examples") + 1])
if library_name not in libraries:
libraries[library_name] = {}
libraries[library_name]["results"] = {}
libraries[library_name]["examples"] = []
libraries[library_name]["path"] = library_path
library_file = os.path.join(library_path, "library.properties")
with open(library_file) as f:
for line in f.readlines():
key, value = line.split("=")
libraries[library_name][key] = value.strip();
flash, ram = process_stdout(build_path)
sketch_path_relative = os.path.dirname(os.path.relpath(sketch_path, examples_path))
result["sketch_path"] = sketch_path_relative
result["build_path"] = build_path
result["library_name"] = library_name
result["flash"] = flash
result["ram"] = ram
libraries[library_name]["results"].setdefault(build_target, {})
libraries[library_name]["results"][build_target][sketch_path_relative] = result
if result["sketch_path"] not in libraries[library_name]["examples"]:
libraries[library_name]["examples"].append(result["sketch_path"])
build_targets.append(build_target)
build_targets = []
libraries = {}
for info_filename in find_finished_compilations(os.path.join("build", git_hash)):
process_build(info_filename)
json_data = {"core": "STM32GENERIC", "build_targets": sorted(set(build_targets)), "libraries": libraries}
print(json.dumps(json_data, indent=4))
with open("build/latest.json", "w") as f:
json.dump(json_data, f, indent=4)
with open("build/STM32GENERIC-" + git_hash + ".json", "w") as f:
json.dump(json_data, f, indent=4)