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 <raiden00@railab.me>
Assisted-by: Claude Code
This commit is contained in:
raiden00pl 2026-08-04 21:37:03 +02:00 committed by Xiang Xiao
parent 30cbb23e6b
commit 9b0d46c222
2 changed files with 18 additions and 5 deletions

View file

@ -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

View file

@ -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
# save the orig compressed formatted defconfig at the very beginning; only valid
# during the initial configure while .config.compressed exists
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)