px4-firmware/src/firmware/nuttx/CMakeLists.txt

172 lines
4.1 KiB
CMake
Raw Normal View History

include(common/px4_upload)
2015-09-08 16:18:59 -03:00
px4_nuttx_generate_builtin_commands(
OUT builtin_commands.c
MODULE_LIST
${module_libraries}
2015-09-12 02:53:01 -03:00
${config_extra_builtin_cmds}
)
2015-09-08 16:18:59 -03:00
# add executable
add_executable(firmware_nuttx
2015-09-19 18:57:54 -03:00
builtin_commands.c)
2016-12-12 19:11:51 -04:00
set(nuttx_export_dir ${PX4_BINARY_DIR}/${BOARD}/NuttX/nuttx/nuttx-export)
2015-09-12 06:26:31 -03:00
set(link_libs
2016-12-12 19:11:51 -04:00
apps nuttx m gcc
2015-09-08 16:18:59 -03:00
)
2016-12-12 19:11:51 -04:00
if("${romfs_used}" STREQUAL "y")
list(APPEND link_libs romfs)
endif()
#
# Bootloaders use a different ld file, a seperate startup file
# and need to override the os version of sched_process_timer
#
set(startup_libs)
if("${config_nuttx_config}" STREQUAL "bootloader")
set(nuttx_ld_prefix "bootloader")
set(nuttx_startup_files ${nuttx_export_dir}/startup/${nuttx_startup_files})
set(nuttx_bootloader_wrapers "-Wl,-wrap,sched_process_timer -Wl,-wrap,sem_post -Wl,-wrap,sem_wait")
2016-12-12 19:11:51 -04:00
add_custom_command(OUTPUT
${nuttx_startup_files}
DEPENDS nuttx_export_${BOARD})
set_source_files_properties(
${nuttx_startup_files}
PROPERTIES
EXTERNAL_OBJECT true
GENERATED true)
add_library(startup
${nuttx_startup_files})
set_target_properties(startup
PROPERTIES
LINKER_LANGUAGE C)
list(APPEND startup_libs startup)
endif()
2015-09-12 06:26:31 -03:00
if(NOT ${BOARD} STREQUAL "sim")
set(main_link_flags
2016-12-12 19:11:51 -04:00
"-T${nuttx_export_dir}/build/${nuttx_ld_prefix}ld.script"
"-Wl,-Map=${PX4_BINARY_DIR}/${BOARD}/main.map"
2015-09-12 06:26:31 -03:00
)
px4_join(OUT main_link_flags LIST ${main_link_flags} GLUE " ")
set_target_properties(firmware_nuttx PROPERTIES LINK_FLAGS ${main_link_flags})
endif()
2015-09-08 16:18:59 -03:00
target_link_libraries(firmware_nuttx
2016-12-12 19:11:51 -04:00
-Wl,--warn-common
-Wl,--gc-sections
2015-09-08 16:18:59 -03:00
-Wl,--start-group
2016-12-12 19:11:51 -04:00
${startup_libs}
${module_libraries}
${df_driver_libs}
2016-12-12 19:11:51 -04:00
${nuttx_bootloader_wrapers}
2015-09-12 06:26:31 -03:00
${link_libs}
2015-09-08 16:18:59 -03:00
-Wl,--end-group)
add_custom_target(check_weak
2015-09-12 06:26:31 -03:00
COMMAND ${NM} firmware_nuttx | ${GREP} " w " | cat
DEPENDS firmware_nuttx
2015-09-12 06:26:31 -03:00
VERBATIM
)
2015-09-12 06:26:31 -03:00
if(NOT ${BOARD} STREQUAL "sim")
2015-10-24 11:57:46 -03:00
2016-12-12 19:11:51 -04:00
if ("${romfs_used}" STREQUAL "y")
2015-10-24 11:57:46 -03:00
2016-12-12 19:11:51 -04:00
if (config_io_board)
set(extras "${CMAKE_BINARY_DIR}/src/modules/px4iofirmware/${config_io_board}.bin")
endif()
2016-07-12 21:47:55 -03:00
2016-12-12 19:11:51 -04:00
message(STATUS "Adding ROMFS on ${BOARD}")
px4_nuttx_add_romfs(OUT romfs
ROOT ROMFS/${config_romfs_root}
EXTRAS ${extras}
)
if (config_io_board)
add_dependencies(romfs fw_io)
endif()
endif()
2016-04-22 16:15:37 -03:00
2016-12-12 19:11:51 -04:00
set(fw_file
2017-01-26 17:34:40 -04:00
${CMAKE_CURRENT_BINARY_DIR}/${BOARD}_${LABEL}.px4)
2016-12-12 19:11:51 -04:00
#
# Bootloaders do not need .px4 or xml
#
if(NOT "${config_nuttx_config}" STREQUAL "bootloader")
px4_nuttx_add_firmware(OUT ${fw_file}
BOARD ${BOARD}
EXE ${CMAKE_CURRENT_BINARY_DIR}/firmware_nuttx
PARAM_XML ${PX4_BINARY_DIR}/parameters.xml
AIRFRAMES_XML ${PX4_BINARY_DIR}/airframes.xml
)
endif()
2015-09-12 06:26:31 -03:00
configure_file(gdbinit.in .gdbinit)
add_custom_target(debug
2015-10-06 13:10:23 -03:00
COMMAND ${GDB} ${CMAKE_CURRENT_BINARY_DIR}/firmware_nuttx
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
add_custom_target(debug_tui
2015-09-19 11:39:54 -03:00
COMMAND ${GDBTUI} ${CMAKE_CURRENT_BINARY_DIR}/firmware_nuttx
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
2015-10-06 13:10:23 -03:00
add_custom_target(debug_ddd
COMMAND ${DDD} --debugger ${GDB} ${CMAKE_CURRENT_BINARY_DIR}/firmware_nuttx
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
2015-09-19 11:39:54 -03:00
add_custom_target(debug_io
2015-10-06 13:10:23 -03:00
COMMAND ${GDB}
${PX4_BINARY_DIR}/src/modules/px4iofirmware/${config_io_board}
2015-10-06 13:10:23 -03:00
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
add_custom_target(debug_io_tui
2015-09-19 11:39:54 -03:00
COMMAND ${GDBTUI}
${PX4_BINARY_DIR}/src/modules/px4iofirmware/${config_io_board}
2015-09-12 06:26:31 -03:00
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
2015-10-06 13:10:23 -03:00
add_custom_target(debug_io_ddd
COMMAND ${DDD} --debugger ${GDB}
${PX4_BINARY_DIR}/src/modules/px4iofirmware/${config_io_board}
2015-10-06 13:10:23 -03:00
DEPENDS firmware_nuttx
${CMAKE_CURRENT_BINARY_DIR}/.gdbinit
)
2016-12-12 19:11:51 -04:00
if(NOT "${config_nuttx_config}" STREQUAL "bootloader")
if ("${BOARD}" STREQUAL "aerofc-v1")
px4_add_upload_aero(OUT upload OS ${OS} BOARD ${BOARD}
BUNDLE ${fw_file})
else()
px4_add_upload(OUT upload OS ${OS} BOARD ${BOARD}
BUNDLE ${fw_file})
endif()
endif()
2015-09-12 06:26:31 -03:00
endif()
2015-09-11 07:38:39 -03:00
2016-12-12 19:11:51 -04:00
if(NOT "${config_nuttx_config}" STREQUAL "bootloader")
install(FILES ${fw_file} DESTINATION .)
endif()
2015-09-08 16:18:59 -03:00
# vim: set noet ft=cmake fenc=utf-8 ff=unix :