From ad9a10770d9330c53a1a2fcaf138f499e1fc0042 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 8 Sep 2024 16:49:08 +1000 Subject: [PATCH] waf: allow any custom build option to be specified in waf configure this makes it easy to configure with any option from build_options.py --- Tools/ardupilotwaf/boards.py | 13 +++++++++++-- Tools/scripts/build_options.py | 13 +++++++++++-- wscript | 21 ++++++++++++++++----- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/Tools/ardupilotwaf/boards.py b/Tools/ardupilotwaf/boards.py index 3d8ac2f20856cd..99a519f964261a 100644 --- a/Tools/ardupilotwaf/boards.py +++ b/Tools/ardupilotwaf/boards.py @@ -16,6 +16,7 @@ # modify our search path: sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../libraries/AP_HAL_ChibiOS/hwdef/scripts')) import chibios_hwdef +import build_options class BoardMeta(type): def __init__(cls, name, bases, dct): @@ -159,8 +160,16 @@ def srcpath(path): ) cfg.msg("Enabled custom controller", 'no', color='YELLOW') - if cfg.options.enable_ppp: - env.CXXFLAGS += ['-DAP_NETWORKING_BACKEND_PPP=1'] + # support enabling any option in build_options.py + for opt in build_options.BUILD_OPTIONS: + enable_option = opt.config_option().replace("-","_") + disable_option = "disable_" + enable_option[len("enable-"):] + if getattr(cfg.options, enable_option, False): + env.CXXFLAGS += ['-D%s=1' % opt.define] + cfg.msg("Enabled %s" % opt.label, 'yes', color='GREEN') + elif getattr(cfg.options, disable_option, False): + env.CXXFLAGS += ['-D%s=0' % opt.define] + cfg.msg("Enabled %s" % opt.label, 'no', color='GREEN') if cfg.options.disable_networking: env.CXXFLAGS += ['-DAP_NETWORKING_ENABLED=0'] diff --git a/Tools/scripts/build_options.py b/Tools/scripts/build_options.py index 65f111c8a4e7af..f7b83443fa931a 100644 --- a/Tools/scripts/build_options.py +++ b/Tools/scripts/build_options.py @@ -15,13 +15,22 @@ def __init__(self, define, description, default, - dependency): + dependency, + configure_option=None): self.category = category self.label = label self.define = define self.description = description self.default = default self.dependency = dependency + self.configure_option = configure_option + + def config_option(self): + conf_option = self.configure_option + if conf_option is None: + conf_option = "enable-" + self.label.replace(" ","-") + return conf_option + # list of build options to offer NOTE: the dependencies must be @@ -413,7 +422,7 @@ def __init__(self, Feature('Filesystem', 'FILESYSTEM_SYS', 'AP_FILESYSTEM_SYS_ENABLED', 'Enable @SYS/ filesystem', 0, None), Feature('Filesystem', 'APJ_TOOL_PARAMETERS', 'FORCE_APJ_DEFAULT_PARAMETERS', 'Enable apj_tool parameter area', 0, None), - Feature('Networking', 'PPP Support', 'AP_NETWORKING_BACKEND_PPP', 'Enable PPP networking', 0, None), + Feature('Networking', 'PPP Support', 'AP_NETWORKING_BACKEND_PPP', 'Enable PPP networking', 0, None, "enable-ppp"), Feature('DroneCAN', 'DroneCAN', 'HAL_ENABLE_DRONECAN_DRIVERS', 'Enable DroneCAN support', 0, None), ] diff --git a/wscript b/wscript index 3d4012787ea5f6..bee0535485d7b1 100644 --- a/wscript +++ b/wscript @@ -10,10 +10,12 @@ import subprocess import json import fnmatch sys.path.insert(0, 'Tools/ardupilotwaf/') +sys.path.insert(0, 'Tools/scripts/') import ardupilotwaf import boards import shutil +import build_options from waflib import Build, ConfigSet, Configure, Context, Utils from waflib.Configure import conf @@ -204,11 +206,6 @@ def options(opt): default=False, help='enable OS level thread statistics.') - g.add_option('--enable-ppp', - action='store_true', - default=False, - help='enable PPP networking.') - g.add_option('--bootloader', action='store_true', default=False, @@ -446,6 +443,20 @@ configuration in order to save typing. action='store_true', default=False, help='enables checking of new to ensure NEW_NOTHROW is used') + + # support enabling any option in build_options.py + for opt in build_options.BUILD_OPTIONS: + enable_option = "--" + opt.config_option() + disable_option = enable_option.replace("--enable", "--disable") + g.add_option(enable_option, + action='store_true', + default=False, + help='enable %s' % opt.label) + g.add_option(disable_option, + action='store_true', + default=False, + help='disable %s' % opt.label) + def _collect_autoconfig_files(cfg): for m in sys.modules.values():