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
This commit is contained in:
Andrew Tridgell 2024-09-08 16:49:08 +10:00
parent 236b3e5eb3
commit b2b9226863
3 changed files with 43 additions and 31 deletions

View File

@ -16,6 +16,7 @@ _board = None
# 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 @@ class Board:
)
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='YELLOW')
if cfg.options.disable_networking:
env.CXXFLAGS += ['-DAP_NETWORKING_ENABLED=0']
@ -487,12 +496,6 @@ class Board:
# We always want to use PRI format macros
cfg.define('__STDC_FORMAT_MACROS', 1)
if cfg.options.enable_ekf2:
env.CXXFLAGS += ['-DHAL_NAVEKF2_AVAILABLE=1']
if cfg.options.disable_ekf3:
env.CXXFLAGS += ['-DHAL_NAVEKF3_AVAILABLE=0']
if cfg.options.postype_single:
env.CXXFLAGS += ['-DHAL_WITH_POSTYPE_DOUBLE=0']

View File

@ -23,6 +23,10 @@ class Feature:
self.default = default
self.dependency = dependency
def config_option(self):
'''the name of the configure option to be used by waf'''
return "enable-" + self.label.replace(" ", "-")
# list of build options to offer NOTE: the dependencies must be
# written as a single string with commas and no spaces,
@ -384,14 +388,14 @@ BUILD_OPTIONS = [
Feature('Airspeed Drivers', 'Analog', 'AP_AIRSPEED_ANALOG_ENABLED', 'Enable Analog Airspeed', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'ASP5033', 'AP_AIRSPEED_ASP5033_ENABLED', 'ENABLE ASP5033 AIRSPEED', 0, 'AIRSPEED'), # NOQA: E501
Feature('Airspeed Drivers', 'DLVR', 'AP_AIRSPEED_DLVR_ENABLED', 'ENABLE DLVR AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MS4525', 'AP_AIRSPEED_MS4525_ENABLED', 'ENABLE MS4525 AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MS5525', 'AP_AIRSPEED_MS5525_ENABLED', 'ENABLE MS5525 AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MSP_AIRSPEED', 'AP_AIRSPEED_MSP_ENABLED', 'ENABLE MSP AIRSPEED', 0, 'AIRSPEED,MSP,OSD'),
Feature('Airspeed Drivers', 'NMEA_AIRSPEED', 'AP_AIRSPEED_NMEA_ENABLED', 'ENABLE NMEA AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'SDP3X', 'AP_AIRSPEED_SDP3X_ENABLED', 'ENABLE SDP3X AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'DRONECAN_ASPD', 'AP_AIRSPEED_DRONECAN_ENABLED', 'ENABLE DroneCAN AIRSPEED', 0, 'AIRSPEED,DroneCAN'), # NOQA: E501
Feature('Airspeed Drivers', 'ASP5033', 'AP_AIRSPEED_ASP5033_ENABLED', 'Enable ASP5033 AIRSPEED', 0, 'AIRSPEED'), # NOQA: E501
Feature('Airspeed Drivers', 'DLVR', 'AP_AIRSPEED_DLVR_ENABLED', 'Enable DLVR AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MS4525', 'AP_AIRSPEED_MS4525_ENABLED', 'Enable MS4525 AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MS5525', 'AP_AIRSPEED_MS5525_ENABLED', 'Enable MS5525 AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'MSP_AIRSPEED', 'AP_AIRSPEED_MSP_ENABLED', 'Enable MSP AIRSPEED', 0, 'AIRSPEED,MSP,OSD'),
Feature('Airspeed Drivers', 'NMEA_AIRSPEED', 'AP_AIRSPEED_NMEA_ENABLED', 'Enable NMEA AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'SDP3X', 'AP_AIRSPEED_SDP3X_ENABLED', 'Enable SDP3X AIRSPEED', 0, 'AIRSPEED'),
Feature('Airspeed Drivers', 'DRONECAN_ASPD', 'AP_AIRSPEED_DRONECAN_ENABLED', 'Enable DroneCAN AIRSPEED', 0, 'AIRSPEED,DroneCAN'), # NOQA: E501
Feature('Actuators', 'Volz', 'AP_VOLZ_ENABLED', 'Enable Volz Protocol', 0, None),
Feature('Actuators', 'Volz_DroneCAN', 'AP_DRONECAN_VOLZ_FEEDBACK_ENABLED', 'Enable Volz DroneCAN Feedback', 0, "DroneCAN,Volz"), # noqa: E501

35
wscript
View File

@ -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,
@ -388,16 +385,6 @@ configuration in order to save typing.
default=False,
help='Use flash storage emulation.')
g.add_option('--enable-ekf2',
action='store_true',
default=False,
help='Configure with EKF2.')
g.add_option('--disable-ekf3',
action='store_true',
default=False,
help='Configure without EKF3.')
g.add_option('--ekf-double',
action='store_true',
default=False,
@ -446,6 +433,24 @@ 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")
enable_description = opt.description
if not enable_description.lower().startswith("enable"):
enable_description = "Enable " + enable_description
disable_description = "Disable " + enable_description[len("Enable "):]
g.add_option(enable_option,
action='store_true',
default=False,
help=enable_description)
g.add_option(disable_option,
action='store_true',
default=False,
help=disable_description)
def _collect_autoconfig_files(cfg):
for m in sys.modules.values():