2022-01-09 22:49:20 -04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
"""
|
|
|
|
Contains functions used to test the ArduPilot build_options.py structures
|
|
|
|
|
|
|
|
AP_FLAKE8_CLEAN
|
|
|
|
"""
|
|
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
from pysim import util
|
|
|
|
|
|
|
|
|
|
|
|
# swiped from app.py:
|
|
|
|
def get_build_options_from_ardupilot_tree():
|
|
|
|
'''return a list of build options'''
|
|
|
|
import importlib.util
|
|
|
|
spec = importlib.util.spec_from_file_location(
|
|
|
|
"build_options.py",
|
|
|
|
os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
|
|
|
'..', 'scripts', 'build_options.py'))
|
|
|
|
mod = importlib.util.module_from_spec(spec)
|
|
|
|
spec.loader.exec_module(mod)
|
|
|
|
return mod.BUILD_OPTIONS
|
|
|
|
|
|
|
|
|
|
|
|
def write_defines_to_file(defines, filepath):
|
|
|
|
content = "\n".join(["define %s %s" % (a, b) for (a, b) in defines.items()])
|
|
|
|
with open(filepath, "w") as f:
|
|
|
|
f.write(content)
|
|
|
|
|
|
|
|
|
|
|
|
def get_defines(feature, options):
|
|
|
|
'''returns a hash of (name, value) defines to turn feature off -
|
|
|
|
recursively gets dependencies'''
|
|
|
|
ret = {
|
|
|
|
feature.define: 0,
|
|
|
|
}
|
|
|
|
if feature.dependency is None:
|
|
|
|
return ret
|
|
|
|
for depname in feature.dependency.split(','):
|
|
|
|
dep = None
|
|
|
|
for f in options:
|
|
|
|
if f.label == depname:
|
|
|
|
dep = f
|
|
|
|
if dep is None:
|
|
|
|
raise ValueError("Invalid dep (%s)" % dep)
|
|
|
|
ret.update(get_defines(dep, options))
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
def test_feature(feature, options):
|
|
|
|
defines = get_defines(feature, options)
|
2022-01-13 21:18:45 -04:00
|
|
|
test_compile_with_defines(defines)
|
|
|
|
|
|
|
|
|
|
|
|
def test_compile_with_defines(defines):
|
2022-01-09 22:49:20 -04:00
|
|
|
extra_hwdef_filepath = "/tmp/extra.hwdef"
|
|
|
|
write_defines_to_file(defines, extra_hwdef_filepath)
|
|
|
|
util.waf_configure(
|
|
|
|
"CubeOrange",
|
|
|
|
extra_hwdef=extra_hwdef_filepath,
|
|
|
|
)
|
|
|
|
for t in 'copter', 'plane', 'rover', 'antennatracker', 'sub', 'blimp':
|
|
|
|
try:
|
|
|
|
util.waf_build(t)
|
|
|
|
except Exception:
|
2022-01-13 21:18:45 -04:00
|
|
|
print("Failed to build (%s) with everything disabled" %
|
|
|
|
(t,))
|
2022-01-09 22:49:20 -04:00
|
|
|
raise
|
|
|
|
|
|
|
|
|
2022-01-13 21:18:45 -04:00
|
|
|
def run_disable_in_turn():
|
2022-01-09 22:49:20 -04:00
|
|
|
options = get_build_options_from_ardupilot_tree()
|
|
|
|
count = 1
|
|
|
|
for feature in options:
|
|
|
|
print("##### Disabling feature %s(%s) (%u/%u)" %
|
|
|
|
(feature.label, feature.define, count, len(options)))
|
|
|
|
test_feature(feature, options)
|
|
|
|
count += 1
|
|
|
|
|
|
|
|
|
2022-01-13 21:18:45 -04:00
|
|
|
def run_disable_all():
|
|
|
|
options = get_build_options_from_ardupilot_tree()
|
|
|
|
defines = {}
|
|
|
|
for feature in options:
|
|
|
|
defines[feature.define] = 0
|
|
|
|
test_compile_with_defines(defines)
|
|
|
|
|
|
|
|
|
|
|
|
def run():
|
|
|
|
run_disable_all()
|
|
|
|
run_disable_in_turn()
|
|
|
|
|
|
|
|
|
2022-01-09 22:49:20 -04:00
|
|
|
if __name__ == '__main__':
|
|
|
|
run()
|