NuttX build in place

- cmake NuttX build wrapper compile in place instead of copying source tree to build directory
    - slightly faster skipping necessary copying (depending on system)
    - allows debugging in place
    - easier to work directly in NuttX following official documentation
    - simplifies overall build which should make it easier to resolve any remaining NuttX dependency issues in the build system
 - the downside is switching back and forth between different builds always require rebuilding NuttX, but I think this is worth the improved developer experience
 - also no longer builds px4io and bootloader in every single build, for most users these rarely change and we're wasting a lot of build time
This commit is contained in:
Daniel Agar
2021-11-15 18:47:38 -05:00
committed by GitHub
parent 7b7b7acd36
commit f5d9b01f5c
164 changed files with 351 additions and 751 deletions
+49 -34
View File
@@ -143,38 +143,14 @@ add_custom_command(
COMMENT "ROMFS: copying, generating airframes"
)
if(EXISTS ${PX4_BOARD_DIR}/extras/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.bin)
set(BOARD_FIRMWARE_BIN "${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.bin")
configure_file(${PX4_SOURCE_DIR}/platforms/nuttx/init/rc.board_bootloader_upgrade.in ${romfs_gen_root_dir}/init.d/rc.board_bootloader_upgrade @ONLY)
endif()
# copy extras into ROMFS
set(extras_dependencies)
# copy px4io binary if configured
if(config_io_board)
list(APPEND extras_dependencies
copy_px4io_bin
${fw_io_bin}
)
file(RELATIVE_PATH iofw_file_relative ${PX4_SOURCE_DIR} ${fw_io_bin})
message(STATUS "ROMFS: Adding ${iofw_file_relative} -> /etc/extras/${config_io_board}.bin")
endif()
# board bootloader (built or included)
if(TARGET copy_bootloader_bin)
if(board_bootloader_firmware)
file(RELATIVE_PATH bl_file_relative ${PX4_SOURCE_DIR} ${board_bootloader_firmware})
message(STATUS "ROMFS: Adding ${bl_file_relative} -> /etc/extras/bootloader.bin")
else()
file(RELATIVE_PATH bl_file_relative ${PX4_SOURCE_DIR} ${bootloader_bin})
message(STATUS "ROMFS: Adding ${bl_file_relative} -> /etc/extras/bootloader.bin")
endif()
list(APPEND extras_dependencies
copy_bootloader_bin
${bootloader_bin}
)
endif()
# optional board architecture defaults
set(board_arch_rc_file "rc.board_arch_defaults")
if(EXISTS "${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/init/${CONFIG_ARCH_CHIP}/${board_arch_rc_file}")
@@ -199,6 +175,7 @@ if(EXISTS "${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/init/${CONFIG_ARCH_CHIP}/
endif()
# board custom init files
set(OPTIONAL_BOARD_RC)
list(APPEND OPTIONAL_BOARD_RC
rc.board_defaults
@@ -233,21 +210,59 @@ foreach(board_rc_file ${OPTIONAL_BOARD_RC})
endforeach()
# board extras
set(OPTIONAL_BOARD_EXTRAS)
file(GLOB OPTIONAL_BOARD_EXTRAS ${PX4_BOARD_DIR}/extras/*)
foreach(board_extra_file ${OPTIONAL_BOARD_EXTRAS})
if(EXISTS "${board_extra_file}")
file(RELATIVE_PATH extra_file_base_name ${PX4_BOARD_DIR}/extras/ ${board_extra_file})
file(RELATIVE_PATH extra_file_relative_source ${PX4_SOURCE_DIR} ${board_extra_file})
message(STATUS "ROMFS: Adding ${extra_file_relative_source} -> /etc/extras/${extra_file_base_name}")
add_custom_command(
OUTPUT
${romfs_gen_root_dir}/extras/${extra_file_base_name}
${extra_file_base_name}.stamp
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PX4_BOARD_DIR}/extras/${extra_file_base_name} ${romfs_gen_root_dir}/extras/${extra_file_base_name}
COMMAND ${CMAKE_COMMAND} -E touch ${extra_file_base_name}.stamp
DEPENDS
${board_extra_file}
romfs_copy.stamp
COMMENT "ROMFS: copying ${board_extra_file}"
)
list(APPEND extras_dependencies
${extra_file_base_name}.stamp
)
endif()
endforeach()
if(config_uavcan_peripheral_firmware)
include(ExternalProject)
foreach(uavcan_peripheral_config ${config_uavcan_peripheral_firmware})
# include the px4io binary in ROMFS
# include the UAVCAN peripheral binaries in ROMFS
message(STATUS "ROMFS: Adding UAVCAN peripheral ${uavcan_peripheral_config} -> /etc/uavcan/fw/")
# ExternalProject_Add() with GIT_SUBMODULES "" initializes no submodules.
cmake_policy(SET CMP0097 NEW)
include(ExternalProject)
ExternalProject_Add(build_${uavcan_peripheral_config}
SOURCE_DIR ${CMAKE_SOURCE_DIR}
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
GIT_REPOSITORY ${CMAKE_SOURCE_DIR}
GIT_TAG ${PX4_GIT_TAG}
GIT_SUBMODULES ""
DOWNLOAD_NO_PROGRESS true
CMAKE_ARGS -DCONFIG=${uavcan_peripheral_config}
INSTALL_COMMAND ""
USES_TERMINAL_BUILD true
DEPENDS git_nuttx git_nuttx_apps
BUILD_ALWAYS 1
)
+5 -13
View File
@@ -507,21 +507,13 @@ else
. ${R}etc/init.d/rc.autostart.post
fi
#
# Bootloader upgrade
#
if param compare -s SYS_BL_UPDATE 1
set BOARD_BOOTLOADER_UPGRADE ${R}etc/init.d/rc.board_bootloader_upgrade
if [ -f $BOARD_BOOTLOADER_UPGRADE ]
then
if [ -f "/etc/extras/bootloader.bin" ]
then
param set SYS_BL_UPDATE 0
param save
echo "bootloader update..."
bl_update "/etc/extras/bootloader.bin"
echo "bootloader update done, rebooting"
reboot
fi
sh $BOARD_BOOTLOADER_UPGRADE
fi
unset BOARD_BOOTLOADER_UPGRADE
#
# End of autostart.