From c27e3f0c353940291829d90b512b8a64788ce1cf Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Fri, 4 Mar 2022 23:06:54 +1100 Subject: [PATCH] test_build_options.py: emit size savings from disabling features --- Tools/autotest/test_build_options.py | 48 +++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/Tools/autotest/test_build_options.py b/Tools/autotest/test_build_options.py index 562f466263..0bd08fa778 100755 --- a/Tools/autotest/test_build_options.py +++ b/Tools/autotest/test_build_options.py @@ -15,6 +15,9 @@ from pysim import util class TestBuildOptions(object): + def __init__(self): + self.sizes_nothing_disabled = None + # swiped from app.py: def get_build_options_from_ardupilot_tree(self): '''return a list of build options''' @@ -51,24 +54,53 @@ class TestBuildOptions(object): return ret def test_feature(self, feature, options): - defines = self.get_defines(feature, options) + # defines = self.get_defines(feature, options) + defines = { + feature.define: 0, + } self.test_compile_with_defines(defines) + def build_targets(self): + '''return a list of build targets''' + return ['copter', 'plane', 'rover', 'antennatracker', 'sub', 'blimp'] + + def board(self): + '''returns board to build for''' + return "CubeOrange" + def test_compile_with_defines(self, defines): extra_hwdef_filepath = "/tmp/extra.hwdef" self.write_defines_to_file(defines, extra_hwdef_filepath) util.waf_configure( - "CubeOrange", + self.board(), extra_hwdef=extra_hwdef_filepath, ) - for t in 'copter', 'plane', 'rover', 'antennatracker', 'sub', 'blimp': + for t in self.build_targets(): try: - util.waf_build(t) + util.run_cmd([util.relwaf(), t]) except Exception: - print("Failed to build (%s) with everything disabled" % + print("Failed to build (%s) with things disabled" % (t,)) raise + def find_build_sizes(self): + '''returns a hash with size of all build targets''' + ret = {} + target_to_binpath = { + "copter": "arducopter", + } + for target in self.build_targets(): + path = os.path.join("build", self.board(), "bin", "%s.bin" % target_to_binpath[target]) + ret[target] = os.path.getsize(path) + return ret + + def disable_in_turn_check_sizes(self, feature, sizes_nothing_disabled): + current_sizes = self.find_build_sizes() + for (build, new_size) in current_sizes.items(): + old_size = sizes_nothing_disabled[build] + print("Disabling %s(%s) on %s saves %u bytes" % + (feature.label, feature.define, build, old_size - new_size)) + def run_disable_in_turn(self): options = self.get_build_options_from_ardupilot_tree() count = 1 @@ -77,6 +109,7 @@ class TestBuildOptions(object): (feature.label, feature.define, count, len(options))) self.test_feature(feature, options) count += 1 + self.disable_in_turn_check_sizes(feature, self.sizes_nothing_disabled) def run_disable_all(self): options = self.get_build_options_from_ardupilot_tree() @@ -85,8 +118,13 @@ class TestBuildOptions(object): defines[feature.define] = 0 self.test_compile_with_defines(defines) + def run_disable_none(self): + self.test_compile_with_defines({}) + self.sizes_nothing_disabled = self.find_build_sizes() + def run(self): self.run_disable_all() + self.run_disable_none() self.run_disable_in_turn()