mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-22 06:53:35 +08:00
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:
@@ -39,74 +39,3 @@ px4_add_module(
|
||||
SRCS
|
||||
bl_update.c
|
||||
)
|
||||
|
||||
if(config_build_bootloader)
|
||||
# include the bootloader binary in ROMFS
|
||||
set(bootloader_config "${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader")
|
||||
|
||||
if(NOT EXISTS ${PX4_BOARD_DIR}/nuttx-config/bootloader)
|
||||
message(FATAL_ERROR "${bootloader_config} does not exist")
|
||||
endif()
|
||||
|
||||
message(STATUS "Building and including bootloader ${bootloader_config}")
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(bootloader_firmware
|
||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}
|
||||
DOWNLOAD_COMMAND ""
|
||||
UPDATE_COMMAND ""
|
||||
CMAKE_ARGS -DCONFIG=${bootloader_config}
|
||||
INSTALL_COMMAND ""
|
||||
USES_TERMINAL_BUILD true
|
||||
DEPENDS git_nuttx git_nuttx_apps
|
||||
BUILD_ALWAYS 1
|
||||
)
|
||||
|
||||
ExternalProject_Get_Property(bootloader_firmware BINARY_DIR)
|
||||
|
||||
set(board_bootloader_firmware "${BINARY_DIR}/${bootloader_config}.elf" CACHE FILEPATH "bootloader original binary path")
|
||||
set(bootloader_bin "${PX4_BINARY_DIR}/romfs_extras/bootloader.bin" CACHE FILEPATH "bootloader binary path")
|
||||
|
||||
file(RELATIVE_PATH bootloader_exe_relative ${CMAKE_CURRENT_BINARY_DIR} ${board_bootloader_firmware})
|
||||
file(RELATIVE_PATH bootloader_bin_relative ${CMAKE_CURRENT_BINARY_DIR} ${bootloader_bin})
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${bootloader_bin}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PX4_BINARY_DIR}/romfs_extras
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${bootloader_exe_relative} ${bootloader_bin_relative}
|
||||
DEPENDS bootloader_firmware
|
||||
COMMENT "Copying ${bootloader_config} to ROMFS extras"
|
||||
)
|
||||
add_custom_target(copy_bootloader_bin DEPENDS ${bootloader_bin})
|
||||
|
||||
# copy bootloader.elf to top level build directory
|
||||
add_custom_command(
|
||||
OUTPUT ${PX4_BINARY_DIR}/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.elf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${BINARY_DIR}/${bootloader_config}.elf ${PX4_BINARY_DIR}/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.elf
|
||||
DEPENDS bootloader_firmware
|
||||
WORKING_DIRECTORY ${PX4_BINARY_DIR}
|
||||
)
|
||||
add_custom_target(bootloader_elf DEPENDS ${PX4_BINARY_DIR}/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.elf)
|
||||
|
||||
elseif(EXISTS "${PX4_BOARD_DIR}/bootloader/")
|
||||
|
||||
if(EXISTS ${PX4_BOARD_DIR}/bootloader/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.bin)
|
||||
set(board_bootloader_firmware ${PX4_BOARD_DIR}/bootloader/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.bin CACHE FILEPATH "bootloader original binary path")
|
||||
set(bootloader_bin "${PX4_BINARY_DIR}/romfs_extras/bootloader.bin" CACHE FILEPATH "bootloader binary path")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${bootloader_bin}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PX4_BINARY_DIR}/romfs_extras
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${board_bootloader_firmware} ${PX4_BINARY_DIR}/romfs_extras/bootloader.bin
|
||||
DEPENDS ${board_bootloader_firmware}
|
||||
COMMENT "Copying ${board_bootloader_firmware} to ROMFS extras"
|
||||
)
|
||||
add_custom_target(copy_bootloader_bin DEPENDS ${bootloader_bin})
|
||||
|
||||
else()
|
||||
file(GLOB bootloader_bin_files ${PX4_BOARD_DIR}/bootloader/*.bin)
|
||||
foreach(bin_file ${bootloader_bin_files})
|
||||
message(FATAL_ERROR "incorrect bootloader filename ${bin_file} should be ${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_bootloader.bin")
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user