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)

Reply via email to