diff --git a/CMakeLists.txt b/CMakeLists.txt index 351a209c45..e975e2c33c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,14 +172,19 @@ include(px4_add_module) set(config_module_list) set(config_kernel_list) -# Find Python -find_package(PythonInterp 3) -# We have a custom error message to tell users how to install python3. -if(NOT PYTHONINTERP_FOUND) - message(FATAL_ERROR "Python 3 not found. Please install Python 3:\n" - " Ubuntu: sudo apt install python3 python3-dev python3-pip\n" - " macOS: brew install python") +# Find Python. The call below sets Python3_EXECUTABLE; we then provide +# PYTHON_EXECUTABLE as a backward-compat alias for the rest of the +# codebase that still uses the legacy name. +find_package(Python3 COMPONENTS Interpreter REQUIRED) + +# Preserve PYTHON_EXECUTABLE as passed if any (e.g. via -D on command +# line, or from the top Makefile); or else default to what +# find_package(Python3) resolved. Promote to a CACHE FILEPATH entry so +# cmake -L lists it, to avoid spurious reconfiguration. +if(NOT DEFINED PYTHON_EXECUTABLE OR PYTHON_EXECUTABLE STREQUAL "") + set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}") endif() +set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}" CACHE FILEPATH "Python 3 interpreter" FORCE) option(PYTHON_COVERAGE "Python code coverage" OFF) if(PYTHON_COVERAGE) diff --git a/cmake/kconfig.cmake b/cmake/kconfig.cmake index e483ee6f0e..45fb7bd1fc 100644 --- a/cmake/kconfig.cmake +++ b/cmake/kconfig.cmake @@ -44,6 +44,10 @@ if(EXISTS ${BOARD_DEFCONFIG}) OUTPUT_VARIABLE DUMMY_RESULTS ) else() + # Non-default labels merge default.px4board + {label}.px4board, + # so reconfigure must also trigger on changes to default.px4board. + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PX4_BOARD_DIR}/default.px4board) + # Generate boardconfig from default.px4board and {label}.px4board execute_process( COMMAND ${CMAKE_COMMAND} -E env ${COMMON_KCONFIG_ENV_SETTINGS} diff --git a/cmake/px4_config.cmake b/cmake/px4_config.cmake index e1ab6e5545..ee63a4f39a 100644 --- a/cmake/px4_config.cmake +++ b/cmake/px4_config.cmake @@ -41,6 +41,11 @@ if(NOT CONFIG) else() set(CONFIG "px4_sitl_default" CACHE STRING "desired configuration") endif() +else() + # Promote CONFIG from UNINITIALIZED (set by -D on command line) to STRING + # so that cmake -L lists it. The Makefile's cmake-cache-check relies on + # finding CONFIG in cmake -L output to avoid unnecessary reconfiguration. + set(CONFIG "${CONFIG}" CACHE STRING "desired configuration" FORCE) endif() if(NOT PX4_CONFIG_FILE) diff --git a/platforms/nuttx/NuttX/CMakeLists.txt b/platforms/nuttx/NuttX/CMakeLists.txt index f28ea9fdb4..3a700ce9ff 100644 --- a/platforms/nuttx/NuttX/CMakeLists.txt +++ b/platforms/nuttx/NuttX/CMakeLists.txt @@ -144,15 +144,22 @@ file(GLOB_RECURSE nuttx_apps_files LIST_DIRECTORIES false ${APPS_DIR}/*.c ${APPS_DIR}/*.h ) + +# Exclude generated builtin headers - they are regenerated by the apps +# build from registry files and would create a perpetual dirty cycle +# if tracked. +list(FILTER nuttx_apps_files EXCLUDE REGEX "builtin/builtin_list\\.h|builtin/builtin_proto\\.h") + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/apps/libapps.a - COMMAND ${CMAKE_COMMAND} -E remove -f ${APPS_DIR}/libapps.a ${APPS_DIR}/builtin/builtin_list.h ${APPS_DIR}/builtin/builtin_proto.h - COMMAND find ${APPS_DIR} -type f -name \*.o -delete COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/px4.bdat ${APPS_DIR}/builtin/registry/px4.bdat COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/px4.pdat ${APPS_DIR}/builtin/registry/px4.pdat COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${APPS_DIR}/builtin/registry/.updated + COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${APPS_DIR}/builtin/builtin_list.c COMMAND make --no-print-directory --silent TOPDIR="${NUTTX_DIR}" > ${CMAKE_CURRENT_BINARY_DIR}/nuttx_apps.log COMMAND ${CMAKE_COMMAND} -E copy_if_different ${APPS_DIR}/libapps.a ${CMAKE_CURRENT_BINARY_DIR}/apps/libapps.a DEPENDS ${nuttx_apps_files} nuttx_context ${NUTTX_DIR}/include/nuttx/config.h + ${CMAKE_CURRENT_BINARY_DIR}/px4.bdat + ${CMAKE_CURRENT_BINARY_DIR}/px4.pdat WORKING_DIRECTORY ${APPS_DIR} #USES_TERMINAL ) @@ -175,8 +182,6 @@ function(add_nuttx_dir nuttx_lib nuttx_lib_dir kernel extra target) ) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/nuttx/${nuttx_lib_dir}/lib${nuttx_lib}.a - COMMAND ${CMAKE_COMMAND} -E remove -f ${NUTTX_DIR}/${nuttx_lib_dir}/lib${nuttx_lib}.a - COMMAND find ${nuttx_lib_dir} -type f -name \*.o -delete COMMAND make -C ${nuttx_lib_dir} --no-print-directory --silent ${nuttx_lib_target} TOPDIR="${NUTTX_DIR}" KERNEL=${kernel} EXTRAFLAGS=${extra} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${NUTTX_DIR}/${nuttx_lib_dir}/lib${nuttx_lib}.a ${CMAKE_CURRENT_BINARY_DIR}/nuttx/${nuttx_lib_dir}/lib${nuttx_lib}.a DEPENDS