2023-03-22 02:16:37 -03:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2023-03-12 23:18:29 -03:00
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
|
|
def configure(cfg):
|
|
|
|
extra_src = [
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/core/session/stream/*.c',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/core/session/*.c',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/core/serialization/*.c',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/util/*.c',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/profile/transport/serial/serial_transport.c',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/src/c/profile/transport/stream_framing/stream_framing_protocol.c',
|
|
|
|
'modules/Micro-CDR/src/c/types/*.c',
|
|
|
|
'modules/Micro-CDR/src/c/common.c',
|
|
|
|
]
|
|
|
|
|
|
|
|
cfg.env.AP_LIB_EXTRA_SOURCES['AP_DDS'] = []
|
|
|
|
for pattern in extra_src:
|
|
|
|
s = cfg.srcnode.ant_glob(pattern, dir=False, src=True)
|
|
|
|
for x in s:
|
|
|
|
cfg.env.AP_LIB_EXTRA_SOURCES['AP_DDS'].append(str(x))
|
|
|
|
|
|
|
|
extra_src_inc = [
|
|
|
|
'modules/Micro-XRCE-DDS-Client/include',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/include/uxr/client',
|
|
|
|
'modules/Micro-CDR/src/c',
|
|
|
|
'modules/Micro-CDR/include',
|
|
|
|
'modules/Micro-CDR/include/ucdr',
|
|
|
|
]
|
|
|
|
for inc in extra_src_inc:
|
|
|
|
cfg.env.INCLUDES += [str(cfg.srcnode.make_node(inc))]
|
|
|
|
|
|
|
|
# auto update submodules
|
|
|
|
cfg.env.append_value('GIT_SUBMODULES', 'Micro-XRCE-DDS-Client')
|
|
|
|
cfg.env.append_value('GIT_SUBMODULES', 'Micro-CDR')
|
|
|
|
|
|
|
|
|
|
|
|
def build(bld):
|
|
|
|
config_h_in = [
|
|
|
|
'modules/Micro-XRCE-DDS-Client/include/uxr/client/config.h.in',
|
|
|
|
'modules/Micro-CDR/include/ucdr/config.h.in',
|
|
|
|
]
|
|
|
|
config_h_in_nodes = [bld.srcnode.make_node(h) for h in config_h_in]
|
|
|
|
config_h_nodes = [bld.bldnode.find_or_declare(h[:-3]) for h in config_h_in]
|
|
|
|
|
|
|
|
gen_path = "libraries/AP_DDS"
|
|
|
|
extra_bld_inc = [
|
|
|
|
'modules/Micro-CDR/include',
|
|
|
|
'modules/Micro-XRCE-DDS-Client/include',
|
|
|
|
gen_path,
|
|
|
|
]
|
|
|
|
for inc in extra_bld_inc:
|
|
|
|
bld.env.INCLUDES += [bld.bldnode.find_or_declare(inc).abspath()]
|
|
|
|
|
|
|
|
for i in range(len(config_h_nodes)):
|
|
|
|
print("building %s" % config_h_nodes[i].abspath())
|
|
|
|
bld(
|
|
|
|
# build config.h file
|
|
|
|
source=config_h_in_nodes[i],
|
|
|
|
target=config_h_nodes[i],
|
|
|
|
rule="%s %s/%s %s %s"
|
|
|
|
% (
|
|
|
|
bld.env.get_flat('PYTHON'),
|
|
|
|
bld.env.SRCROOT,
|
|
|
|
"libraries/AP_DDS/gen_config_h.py",
|
|
|
|
config_h_in_nodes[i].abspath(),
|
|
|
|
config_h_nodes[i].abspath(),
|
|
|
|
),
|
|
|
|
group='dynamic_sources',
|
|
|
|
)
|
|
|
|
|
|
|
|
# temporary whitelist while include issue is sorted out
|
|
|
|
whitelist = [
|
|
|
|
'BatteryState.idl',
|
|
|
|
'Duration.idl',
|
|
|
|
'Header.idl',
|
|
|
|
'NavSatFix.idl',
|
|
|
|
'NavSatStatus.idl',
|
|
|
|
'Point.idl',
|
|
|
|
'Pose.idl',
|
|
|
|
'PoseStamped.idl',
|
|
|
|
'Quaternion.idl',
|
|
|
|
'Time.idl',
|
|
|
|
'Twist.idl',
|
|
|
|
'TwistStamped.idl',
|
|
|
|
'Vector3.idl',
|
|
|
|
]
|
|
|
|
|
|
|
|
idl_files = bld.srcnode.ant_glob('libraries/AP_DDS/Idl/**/*.idl')
|
|
|
|
for idl in idl_files:
|
|
|
|
b = os.path.basename(idl.abspath())
|
|
|
|
if not b in whitelist:
|
|
|
|
continue
|
|
|
|
gen_h = b.replace('.idl', '.h')
|
|
|
|
gen_c = b.replace('.idl', '.c')
|
|
|
|
gen = [
|
|
|
|
bld.bldnode.find_or_declare(os.path.join(gen_path, "generated", gen_h)),
|
|
|
|
bld.bldnode.find_or_declare(os.path.join(gen_path, "generated", gen_c)),
|
|
|
|
]
|
|
|
|
bld(
|
|
|
|
# build IDL file
|
|
|
|
source=idl,
|
|
|
|
target=gen,
|
2023-03-23 01:22:03 -03:00
|
|
|
rule=f"{bld.env.MICROXRCEDDSGEN[0]} -cs -replace -d {os.path.join(gen_path, 'generated')} {idl}",
|
2023-03-12 23:18:29 -03:00
|
|
|
group='dynamic_sources',
|
|
|
|
)
|
|
|
|
bld.env.AP_LIB_EXTRA_SOURCES['AP_DDS'] += [os.path.join('generated', gen_c)]
|