This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 9b0d46c2229 cmake: normalize .config on reconfigure
9b0d46c2229 is described below
commit 9b0d46c222907112e5127591e05cb1e39f7cb1de
Author: raiden00pl <[email protected]>
AuthorDate: Tue Aug 4 21:37:03 2026 +0200
cmake: normalize .config on reconfigure
olddefconfig only ran when .config was generated from the defconfig,
so changes applied to an existing .config (e.g. with kconfig-tweak)
never got their dependent defaults. Run olddefconfig on reconfigure as
well, as the Make flow does on every build.
Signed-off-by: raiden00pl <[email protected]>
Assisted-by: Claude Code
---
CMakeLists.txt | 16 +++++++++++++---
cmake/nuttx_kconfig.cmake | 7 +++++--
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 820c5a4faa7..aec00333606 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -368,6 +368,9 @@ if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config OR NOT
"${NUTTX_DEFCONFIG}" STREQUAL
# Do olddefconfig step to expand the abbreviated defconfig into normal config
nuttx_olddefconfig()
+ # save the orig compressed formatted defconfig at the very beginning
+ nuttx_save_defconfig_orig()
+
file(RENAME ${NUTTX_BINARY_DIR}/.config.compressed
${NUTTX_BINARY_DIR}/.config)
set(ENV{KCONFIG_CONFIG} ${NUTTX_BINARY_DIR}/.config)
@@ -385,9 +388,11 @@ if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config OR NOT
"${NUTTX_DEFCONFIG}" STREQUAL
endif()
file(WRITE ${NUTTX_BINARY_DIR}/.config "${_config_init_content}")
- # store original expanded .config
- configure_file(${NUTTX_BINARY_DIR}/.config ${NUTTX_BINARY_DIR}/.config.orig
- COPYONLY)
+ # store original expanded .config; plain copy so .config does not become a
+ # configure dependency: the compiler cannot change after the first configure,
+ # so a modified .config must not reconfigure mid-build
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/.config
+ ${NUTTX_BINARY_DIR}/.config.orig)
set(NUTTX_DEFCONFIG_SAVED
${NUTTX_DEFCONFIG}
@@ -411,6 +416,11 @@ if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config OR NOT
"${NUTTX_DEFCONFIG}" STREQUAL
message(STATUS " Board: ${NUTTX_BOARD}")
message(STATUS " Config: ${NUTTX_CONFIG}")
message(STATUS " Appdir: ${NUTTX_APPS_DIR}")
+else()
+ # Normalize user modifications to .config (e.g. kconfig-tweak) so dependent
+ # defaults materialize, as the Make flow does on each build
+ set(ENV{KCONFIG_CONFIG} ${NUTTX_BINARY_DIR}/.config)
+ nuttx_olddefconfig()
endif()
# declare global custom targets at very beginning `nuttx_global` is used to
hold
diff --git a/cmake/nuttx_kconfig.cmake b/cmake/nuttx_kconfig.cmake
index 9247dad5dfe..94be42ddd83 100644
--- a/cmake/nuttx_kconfig.cmake
+++ b/cmake/nuttx_kconfig.cmake
@@ -216,8 +216,12 @@ function(nuttx_olddefconfig)
"nuttx_olddefconfig: Failed to initialize Kconfig configuration:
${KCONFIG_OUTPUT}"
)
endif()
+endfunction()
+
+# save the orig compressed formatted defconfig at the very beginning; only
valid
+# during the initial configure while .config.compressed exists
- # save the orig compressed formatted defconfig at the very beginning
+function(nuttx_save_defconfig_orig)
execute_process(COMMAND savedefconfig --out ${NUTTX_BINARY_DIR}/defconfig.tmp
WORKING_DIRECTORY ${NUTTX_DIR})
@@ -227,7 +231,6 @@ function(nuttx_olddefconfig)
${NUTTX_BINARY_DIR}/.config.compressed ${NUTTX_BINARY_DIR}/defconfig.tmp
${NUTTX_BINARY_DIR}/defconfig.orig
WORKING_DIRECTORY ${NUTTX_DIR})
-
endfunction()
function(nuttx_setconfig)