diff --git a/platforms/nuttx/NuttX/CMakeLists.txt b/platforms/nuttx/NuttX/CMakeLists.txt index 22d9f196e8..7eff5567e4 100644 --- a/platforms/nuttx/NuttX/CMakeLists.txt +++ b/platforms/nuttx/NuttX/CMakeLists.txt @@ -115,34 +115,45 @@ add_library(nuttx_build INTERFACE) add_dependencies(nuttx_build nuttx_context) # builtins -add_custom_target(nuttx_builtins) +set(nuttx_builtin_list) if (CONFIG_NSH_LIBRARY) - # add additional commands to nuttx builtins - set(builtin_registry ${APPS_DIR}/builtin/registry) + # force builtins regeneration and apps rebuild if nuttx or px4 configuration have changed + add_custom_command(OUTPUT builtins_clean.stamp + COMMAND find ${APPS_DIR}/builtin/registry -name \*.bdat -delete + COMMAND find ${APPS_DIR}/builtin/registry -name \*.pdat -delete + COMMAND rm -f ${APPS_DIR}/builtin/builtin_list.h + COMMAND ${CMAKE_COMMAND} -E touch builtins_clean.stamp + DEPENDS + nuttx_configure + nuttx_context + ${PX4_SOURCE_DIR}/cmake/configs/${CONFIG}.cmake + ) + foreach(module ${module_libraries}) get_target_property(MAIN ${module} MAIN) get_target_property(STACK_MAIN ${module} STACK_MAIN) get_target_property(PRIORITY ${module} PRIORITY) if(MAIN) - add_custom_command(OUTPUT ${builtin_registry}/${MAIN}_main.bdat - COMMAND echo "{ \"${MAIN}\", ${PRIORITY}, ${STACK_MAIN}, ${MAIN}_main }," > ${builtin_registry}/${MAIN}_main.bdat - DEPENDS nuttx_context + add_custom_command(OUTPUT ${APPS_DIR}/builtin/registry/${MAIN}_main.bdat + COMMAND echo "{ \"${MAIN}\", ${PRIORITY}, ${STACK_MAIN}, ${MAIN}_main }," > ${APPS_DIR}/builtin/registry/${MAIN}_main.bdat + COMMAND ${CMAKE_COMMAND} -E touch ${APPS_DIR}/builtin/registry/.updated + DEPENDS nuttx_context builtins_clean.stamp VERBATIM ) + list(APPEND nuttx_builtin_list ${APPS_DIR}/builtin/registry/${MAIN}_main.bdat) - add_custom_command(OUTPUT ${builtin_registry}/${MAIN}_main.pdat - COMMAND echo "int ${MAIN}_main(int argc, char *argv[]);" > ${builtin_registry}/${MAIN}_main.pdat - DEPENDS nuttx_context + add_custom_command(OUTPUT ${APPS_DIR}/builtin/registry/${MAIN}_main.pdat + COMMAND echo "int ${MAIN}_main(int argc, char *argv[]);" > ${APPS_DIR}/builtin/registry/${MAIN}_main.pdat + COMMAND ${CMAKE_COMMAND} -E touch ${APPS_DIR}/builtin/registry/.updated + DEPENDS nuttx_context builtins_clean.stamp VERBATIM ) + list(APPEND nuttx_builtin_list ${APPS_DIR}/builtin/registry/${MAIN}_main.pdat) - add_custom_target(nuttx_builtins_${MAIN} DEPENDS ${builtin_registry}/${MAIN}_main.bdat ${builtin_registry}/${MAIN}_main.pdat) - add_dependencies(nuttx_builtins nuttx_builtins_${MAIN}) endif() endforeach() endif() -add_dependencies(nuttx_build nuttx_builtins) # APPS @@ -150,7 +161,7 @@ add_dependencies(nuttx_build nuttx_builtins) add_custom_command(OUTPUT ${APPS_DIR}/libapps.a ${APPS_DIR}/platform/.built COMMAND find ${APPS_DIR} -name \*.o -delete COMMAND make ${nuttx_build_options} --no-print-directory -C ../apps TOPDIR="${NUTTX_DIR}" libapps.a ${nuttx_build_output} - DEPENDS nuttx_context nuttx_builtins + DEPENDS nuttx_context ${nuttx_builtin_list} WORKING_DIRECTORY ${NUTTX_DIR} ${nuttx_build_uses_terminal} )