|
|
@ -5,232 +5,231 @@ import sys |
|
|
|
|
|
|
|
|
|
|
|
import waflib |
|
|
|
import waflib |
|
|
|
|
|
|
|
|
|
|
|
BOARDS = {} |
|
|
|
_board_classes = {} |
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ENV = waflib.ConfigSet.ConfigSet() |
|
|
|
class BoardMeta(type): |
|
|
|
|
|
|
|
def __init__(cls, name, bases, dct): |
|
|
|
def define_board(func, name, parent_name=None): |
|
|
|
super(BoardMeta, cls).__init__(name, bases, dct) |
|
|
|
if parent_name is None: |
|
|
|
if name == 'Board': |
|
|
|
parent = PROJECT_ENV |
|
|
|
return |
|
|
|
elif parent_name not in BOARDS: |
|
|
|
_board_classes[name] = cls |
|
|
|
print("Undefined parent board '%s' for '%s'" % (parent_name, name)) |
|
|
|
|
|
|
|
sys.exit(1) |
|
|
|
class Board: |
|
|
|
else: |
|
|
|
def configure(self, cfg): |
|
|
|
parent = BOARDS[parent_name] |
|
|
|
env = waflib.ConfigSet.ConfigSet() |
|
|
|
|
|
|
|
self.configure_env(env) |
|
|
|
env = parent.derive().detach() |
|
|
|
|
|
|
|
if name in BOARDS: |
|
|
|
d = env.get_merged_dict() |
|
|
|
print("Multiple definitions of " + name) |
|
|
|
# Always prepend so that arguments passed in the command line get |
|
|
|
sys.exit(1) |
|
|
|
# the priority. |
|
|
|
BOARDS[name] = env |
|
|
|
for k, val in d.items(): |
|
|
|
func(env) |
|
|
|
# Dictionaries (like 'DEFINES') are converted to lists to |
|
|
|
|
|
|
|
# conform to waf conventions. |
|
|
|
|
|
|
|
if isinstance(val, dict): |
|
|
|
|
|
|
|
for item in val.items(): |
|
|
|
|
|
|
|
cfg.env.prepend_value(k, '%s=%s' % item) |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
cfg.env.prepend_value(k, val) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
# Use a dictionary instead of the convetional list for definitions to |
|
|
|
|
|
|
|
# make easy to override them. Convert back to list before consumption. |
|
|
|
|
|
|
|
env.DEFINES = {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.CFLAGS += [ |
|
|
|
|
|
|
|
'-ffunction-sections', |
|
|
|
|
|
|
|
'-fdata-sections', |
|
|
|
|
|
|
|
'-fsigned-char', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-Wall', |
|
|
|
|
|
|
|
'-Wextra', |
|
|
|
|
|
|
|
'-Wformat', |
|
|
|
|
|
|
|
'-Wshadow', |
|
|
|
|
|
|
|
'-Wpointer-arith', |
|
|
|
|
|
|
|
'-Wcast-align', |
|
|
|
|
|
|
|
'-Wno-missing-field-initializers', |
|
|
|
|
|
|
|
'-Wno-unused-parameter', |
|
|
|
|
|
|
|
'-Wno-redundant-decls', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.CXXFLAGS += [ |
|
|
|
|
|
|
|
'-std=gnu++11', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-fdata-sections', |
|
|
|
|
|
|
|
'-ffunction-sections', |
|
|
|
|
|
|
|
'-fno-exceptions', |
|
|
|
|
|
|
|
'-fsigned-char', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-Wall', |
|
|
|
|
|
|
|
'-Wextra', |
|
|
|
|
|
|
|
'-Wformat', |
|
|
|
|
|
|
|
'-Wshadow', |
|
|
|
|
|
|
|
'-Wpointer-arith', |
|
|
|
|
|
|
|
'-Wcast-align', |
|
|
|
|
|
|
|
'-Wno-unused-parameter', |
|
|
|
|
|
|
|
'-Wno-missing-field-initializers', |
|
|
|
|
|
|
|
'-Wno-reorder', |
|
|
|
|
|
|
|
'-Wno-redundant-decls', |
|
|
|
|
|
|
|
'-Werror=format-security', |
|
|
|
|
|
|
|
'-Werror=array-bounds', |
|
|
|
|
|
|
|
'-Werror=unused-but-set-variable', |
|
|
|
|
|
|
|
'-Werror=uninitialized', |
|
|
|
|
|
|
|
'-Werror=init-self', |
|
|
|
|
|
|
|
'-Wfatal-errors', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.LINKFLAGS += [ |
|
|
|
|
|
|
|
'-Wl,--gc-sections', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Board = BoardMeta('Board', Board.__bases__, dict(Board.__dict__)) |
|
|
|
|
|
|
|
|
|
|
|
def get_boards_names(): |
|
|
|
def get_boards_names(): |
|
|
|
return sorted(list(BOARDS.keys())) |
|
|
|
return sorted(list(_board_classes.keys())) |
|
|
|
|
|
|
|
|
|
|
|
# Use a dictionary instead of the convetional list for definitions to |
|
|
|
def get_board(name): |
|
|
|
# make easy to override them. Convert back to list before consumption. |
|
|
|
return _board_classes[name]() |
|
|
|
PROJECT_ENV.DEFINES = {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ENV.CFLAGS += [ |
|
|
|
|
|
|
|
'-ffunction-sections', |
|
|
|
|
|
|
|
'-fdata-sections', |
|
|
|
|
|
|
|
'-fsigned-char', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-Wall', |
|
|
|
|
|
|
|
'-Wextra', |
|
|
|
|
|
|
|
'-Wformat', |
|
|
|
|
|
|
|
'-Wshadow', |
|
|
|
|
|
|
|
'-Wpointer-arith', |
|
|
|
|
|
|
|
'-Wcast-align', |
|
|
|
|
|
|
|
'-Wno-missing-field-initializers', |
|
|
|
|
|
|
|
'-Wno-unused-parameter', |
|
|
|
|
|
|
|
'-Wno-redundant-decls', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ENV.CXXFLAGS += [ |
|
|
|
|
|
|
|
'-std=gnu++11', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-fdata-sections', |
|
|
|
|
|
|
|
'-ffunction-sections', |
|
|
|
|
|
|
|
'-fno-exceptions', |
|
|
|
|
|
|
|
'-fsigned-char', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'-Wall', |
|
|
|
|
|
|
|
'-Wextra', |
|
|
|
|
|
|
|
'-Wformat', |
|
|
|
|
|
|
|
'-Wshadow', |
|
|
|
|
|
|
|
'-Wpointer-arith', |
|
|
|
|
|
|
|
'-Wcast-align', |
|
|
|
|
|
|
|
'-Wno-unused-parameter', |
|
|
|
|
|
|
|
'-Wno-missing-field-initializers', |
|
|
|
|
|
|
|
'-Wno-reorder', |
|
|
|
|
|
|
|
'-Wno-redundant-decls', |
|
|
|
|
|
|
|
'-Werror=format-security', |
|
|
|
|
|
|
|
'-Werror=array-bounds', |
|
|
|
|
|
|
|
'-Werror=unused-but-set-variable', |
|
|
|
|
|
|
|
'-Werror=uninitialized', |
|
|
|
|
|
|
|
'-Werror=init-self', |
|
|
|
|
|
|
|
'-Wfatal-errors', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ENV.LINKFLAGS += [ |
|
|
|
|
|
|
|
'-Wl,--gc-sections', |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# NOTE: Keeping all the board definitions together so we can easily |
|
|
|
# NOTE: Keeping all the board definitions together so we can easily |
|
|
|
# identify opportunities to simplify common flags. In the future might |
|
|
|
# identify opportunities to simplify common flags. In the future might |
|
|
|
# be worthy to keep board definitions in files of their own. |
|
|
|
# be worthy to keep board definitions in files of their own. |
|
|
|
|
|
|
|
|
|
|
|
def sitl(env): |
|
|
|
class sitl(Board): |
|
|
|
env.DEFINES.update( |
|
|
|
def configure_env(self, env): |
|
|
|
CONFIG_HAL_BOARD = 'HAL_BOARD_SITL', |
|
|
|
super(sitl, self).configure_env(env) |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_NONE', |
|
|
|
|
|
|
|
) |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD = 'HAL_BOARD_SITL', |
|
|
|
env.CXXFLAGS += [ |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_NONE', |
|
|
|
'-O3', |
|
|
|
) |
|
|
|
] |
|
|
|
env.CXXFLAGS += [ |
|
|
|
|
|
|
|
'-O3', |
|
|
|
env.LIB += [ |
|
|
|
] |
|
|
|
'm', |
|
|
|
env.LIB += [ |
|
|
|
] |
|
|
|
'm', |
|
|
|
env.LINKFLAGS += ['-pthread',] |
|
|
|
] |
|
|
|
env.AP_LIBRARIES += [ |
|
|
|
env.LINKFLAGS += ['-pthread',] |
|
|
|
'AP_HAL_SITL', |
|
|
|
env.AP_LIBRARIES += [ |
|
|
|
'SITL', |
|
|
|
'AP_HAL_SITL', |
|
|
|
] |
|
|
|
'SITL', |
|
|
|
|
|
|
|
] |
|
|
|
define_board(sitl, 'sitl') |
|
|
|
|
|
|
|
|
|
|
|
class linux(Board): |
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
def linux(env): |
|
|
|
super(linux, self).configure_env(env) |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD = 'HAL_BOARD_LINUX', |
|
|
|
env.DEFINES.update( |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_NONE', |
|
|
|
CONFIG_HAL_BOARD = 'HAL_BOARD_LINUX', |
|
|
|
) |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_NONE', |
|
|
|
|
|
|
|
) |
|
|
|
env.CXXFLAGS += [ |
|
|
|
env.CXXFLAGS += [ |
|
|
|
'-O3', |
|
|
|
'-O3', |
|
|
|
] |
|
|
|
] |
|
|
|
|
|
|
|
env.LIB += [ |
|
|
|
env.LIB += [ |
|
|
|
'm', |
|
|
|
'm', |
|
|
|
'rt', |
|
|
|
'rt', |
|
|
|
] |
|
|
|
] |
|
|
|
env.LINKFLAGS += ['-pthread',] |
|
|
|
env.LINKFLAGS += ['-pthread',] |
|
|
|
env.AP_LIBRARIES = [ |
|
|
|
env.AP_LIBRARIES = [ |
|
|
|
'AP_HAL_Linux', |
|
|
|
'AP_HAL_Linux', |
|
|
|
] |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
class minlure(linux): |
|
|
|
define_board(linux, 'linux') |
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
super(minlure, self).configure_env(env) |
|
|
|
|
|
|
|
|
|
|
|
def minlure(env): |
|
|
|
env.DEFINES.update( |
|
|
|
env.DEFINES.update( |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_MINLURE', |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_MINLURE', |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define_board(minlure, 'minlure', 'linux') |
|
|
|
class erleboard(linux): |
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
super(erleboard, self).configure_env(env) |
|
|
|
def erleboard(env): |
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
env.DEFINES.update( |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ERLEBOARD', |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ERLEBOARD', |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
class navio(linux): |
|
|
|
define_board(erleboard, 'erleboard', 'linux') |
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
super(navio, self).configure_env(env) |
|
|
|
|
|
|
|
|
|
|
|
def navio(env): |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_NAVIO', |
|
|
|
env.DEFINES.update( |
|
|
|
) |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_NAVIO', |
|
|
|
|
|
|
|
) |
|
|
|
class zynq(linux): |
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
define_board(navio, 'navio', 'linux') |
|
|
|
super(zynq, self).configure_env(env) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-xilinx-linux-gnueabi' |
|
|
|
def zynq(env): |
|
|
|
env.DEFINES.update( |
|
|
|
env.TOOLCHAIN = 'arm-xilinx-linux-gnueabi' |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ZYNQ', |
|
|
|
|
|
|
|
) |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ZYNQ', |
|
|
|
class bbbmini(linux): |
|
|
|
) |
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
super(bbbmini, self).configure_env(env) |
|
|
|
define_board(zynq, 'zynq', 'linux') |
|
|
|
|
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
def bbbmini(env): |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BBBMINI', |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
class pxf(linux): |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BBBMINI', |
|
|
|
def configure_env(self, env): |
|
|
|
) |
|
|
|
super(pxf, self).configure_env(env) |
|
|
|
|
|
|
|
|
|
|
|
define_board(bbbmini, 'bbbmini', 'linux') |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_PXF', |
|
|
|
def pxf(env): |
|
|
|
) |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
|
|
|
|
class bebop(linux): |
|
|
|
env.DEFINES.update( |
|
|
|
def configure_env(self, env): |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_PXF', |
|
|
|
super(bebop, self).configure_env(env) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
define_board(pxf, 'pxf', 'linux') |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BEBOP', |
|
|
|
|
|
|
|
) |
|
|
|
def bebop(env): |
|
|
|
env.STATIC_LINKING = [True] |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
|
|
|
|
class raspilot(linux): |
|
|
|
env.DEFINES.update( |
|
|
|
def configure_env(self, env): |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BEBOP', |
|
|
|
super(raspilot, self).configure_env(env) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.STATIC_LINKING = [True] |
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_RASPILOT', |
|
|
|
define_board(bebop, 'bebop', 'linux') |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class erlebrain2(linux): |
|
|
|
def raspilot(env): |
|
|
|
def configure_env(self, env): |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
super(erlebrain2, self).configure_env(env) |
|
|
|
|
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_RASPILOT', |
|
|
|
env.DEFINES.update( |
|
|
|
) |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ERLEBRAIN2', |
|
|
|
|
|
|
|
) |
|
|
|
define_board(raspilot, 'raspilot', 'linux') |
|
|
|
|
|
|
|
|
|
|
|
class bhat(linux): |
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
def erlebrain2(env): |
|
|
|
super(bhat, self).configure_env(env) |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.DEFINES.update( |
|
|
|
env.DEFINES.update( |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_ERLEBRAIN2', |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BH', |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
define_board(erlebrain2, 'erlebrain2', 'linux') |
|
|
|
class pxfmini(linux): |
|
|
|
|
|
|
|
def configure_env(self, env): |
|
|
|
|
|
|
|
super(pxfmini, self).configure_env(env) |
|
|
|
def bhat(env): |
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
env.DEFINES.update( |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_PXFMINI', |
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_BH', |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define_board(bhat, 'bhat', 'linux') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pxfmini(env): |
|
|
|
|
|
|
|
env.TOOLCHAIN = 'arm-linux-gnueabihf' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.DEFINES.update( |
|
|
|
|
|
|
|
CONFIG_HAL_BOARD_SUBTYPE = 'HAL_BOARD_SUBTYPE_LINUX_PXFMINI', |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define_board(pxfmini, 'pxfmini', 'linux') |
|
|
|
|
|
|
|