Browse Source

waf: px4: use explicit list for ROMFS static files

Files that are not really part of the ROMFS in the folder might cause problems.

One problem that motivated this patch was caused because the make-based build
system copies the bootloader to the ROMFS in the source tree (mk/PX4/ROMFS)
instead of the build tree. That potentially could cause race condition between
the tasks created by 'px4_romfs_static_files' and 'px4_romfs_bootloader'.

Also, now we have only one task generator for static files.
mission-4.1.18
Gustavo Jose de Sousa 9 years ago committed by Lucas De Marchi
parent
commit
051e8a6bda
  1. 56
      Tools/ardupilotwaf/px4.py

56
Tools/ardupilotwaf/px4.py

@ -198,6 +198,31 @@ def _px4_taskgen(bld, **kw): @@ -198,6 +198,31 @@ def _px4_taskgen(bld, **kw):
return bld(**kw)
@feature('_px4_romfs')
def _process_romfs(self):
bld = self.bld
file_list = (
'firmware/oreoled.bin',
'init.d/rc.APM',
'init.d/rc.error',
'init.d/rcS',
(bld.env.PX4_BOOTLOADER, 'bootloader/fmu_bl.bin'),
)
romfs_src = bld.srcnode.find_dir(bld.env.PX4_ROMFS_SRC)
romfs_bld = bld.bldnode.make_node(bld.env.PX4_ROMFS_BLD)
for item in file_list:
if isinstance(item, str):
src = romfs_src.make_node(item)
dst = romfs_bld.make_node(item)
else:
src = bld.srcnode.make_node(item[0])
dst = romfs_bld.make_node(item[1])
dst.parent.mkdir()
self.create_task('px4_copy', src, dst)
def configure(cfg):
cfg.load('cmake')
cfg.find_program('cp')
@ -282,35 +307,8 @@ def build(bld): @@ -282,35 +307,8 @@ def build(bld):
cmake_output_patterns='px4fmu-v%s/NuttX/nuttx-export/**/*.h' % version,
)
# ROMFS static files
romfs_src = bld.srcnode.find_dir(bld.env.PX4_ROMFS_SRC)
bld.env.PX4_ROMFS_SRC_ABS = romfs_src.abspath()
romfs_bld = bld.bldnode.make_node(bld.env.PX4_ROMFS_BLD)
romfs_src_files = romfs_src.ant_glob('**')
romfs_bld_files = []
for node in romfs_src_files:
bld_node = romfs_bld.make_node(node.path_from(romfs_src))
romfs_bld_files.append(bld_node)
_px4_taskgen(
bld,
bld(
name='px4_romfs_static_files',
cls_keyword='Copying ROMFS to build directory',
cls_str='%s -> %s' % (bld.env.PX4_ROMFS_SRC, bld.env.PX4_ROMFS_BLD),
source=romfs_src_files,
target=romfs_bld_files,
group='dynamic_sources',
rule='${CP} -a -T ${PX4_ROMFS_SRC_ABS} ${PX4_ROMFS_BLD}',
)
romfs_bootloader = romfs_bld.make_node('bootloader/fmu_bl.bin')
romfs_bootloader.parent.mkdir()
_px4_taskgen(
bld,
name='px4_romfs_bootloader',
cls_keyword='Copying bootloader to ROMFS',
source=bld.env.PX4_BOOTLOADER,
target=romfs_bootloader,
group='dynamic_sources',
rule='${CP} ${SRC} ${TGT}',
features='_px4_romfs',
)

Loading…
Cancel
Save