@@ -20,6 +20,8 @@ file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/kconfig/include/config)
2020
2121set_ifndef (KCONFIG_NAMESPACE "CONFIG" )
2222
23+ set_ifndef (KCONFIG_STRICT_USER_CONFIG ON )
24+
2325set_ifndef (KCONFIG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR } /Kconfig )
2426set (KCONFIG_BOARD_DIR ${KCONFIG_BINARY_DIR } /boards)
2527file (MAKE_DIRECTORY ${KCONFIG_BINARY_DIR } )
@@ -328,6 +330,21 @@ foreach(f ${merge_config_files})
328330endforeach ()
329331set (merge_config_files ${merge_config_files_with_absolute_paths} )
330332
333+ # User-provided configuration fragments (prj.conf, sysbuild.conf, CLI, etc.)
334+ # used for strict assignment checking. Board/shield defaults are excluded.
335+ set (KCONFIG_USER_CONFIG_FILES "" )
336+ foreach (user_conf IN LISTS CONF_FILE_AS_LIST EXTRA_CONF_FILE_AS_LIST config_files)
337+ if (IS_ABSOLUTE ${user_conf} )
338+ set (user_conf_path ${user_conf} )
339+ else ()
340+ set (user_conf_path ${APPLICATION_CONFIG_DIR} /${user_conf} )
341+ endif ()
342+ list (APPEND KCONFIG_USER_CONFIG_FILES ${user_conf_path} )
343+ endforeach ()
344+ if (EXTRA_KCONFIG_OPTIONS_FILE)
345+ list (APPEND KCONFIG_USER_CONFIG_FILES ${EXTRA_KCONFIG_OPTIONS_FILE} )
346+ endif ()
347+
331348foreach (f ${merge_config_files} )
332349 if (NOT EXISTS ${f} OR IS_DIRECTORY ${f} )
333350 message (FATAL_ERROR "File not found: ${f} " )
@@ -397,6 +414,28 @@ if(DEFINED FORCED_CONF_FILE)
397414 list (APPEND input_configs_flags --forced-input-configs)
398415endif ()
399416
417+ set (kconfig_strict_args)
418+ set (kconfig_strict_user_config_files "" )
419+ zephyr_get (KCONFIG_STRICT_USER_CONFIG SYSBUILD GLOBAL )
420+ if (KCONFIG_STRICT_USER_CONFIG)
421+ list (APPEND kconfig_strict_user_config_files ${KCONFIG_USER_CONFIG_FILES} )
422+ elseif (EXTRA_KCONFIG_OPTIONS_FILE AND EXISTS ${EXTRA_KCONFIG_OPTIONS_FILE} )
423+ file (READ ${EXTRA_KCONFIG_OPTIONS_FILE} extra_kconfig_options_content )
424+ string (STRIP "${extra_kconfig_options_content} " extra_kconfig_options_content)
425+ if (extra_kconfig_options_content)
426+ set (KCONFIG_STRICT_USER_CONFIG ON )
427+ list (APPEND kconfig_strict_user_config_files ${EXTRA_KCONFIG_OPTIONS_FILE} )
428+ endif ()
429+ endif ()
430+ if (KCONFIG_STRICT_USER_CONFIG)
431+ list (APPEND kconfig_strict_args --strict-user-configs)
432+ foreach (user_conf ${kconfig_strict_user_config_files} )
433+ if (EXISTS ${user_conf} )
434+ list (APPEND kconfig_strict_args --user-config-files ${user_conf} )
435+ endif ()
436+ endforeach ()
437+ endif ()
438+
400439cmake_path (GET AUTOCONF_H PARENT_PATH autoconf_h_path )
401440if (NOT EXISTS ${autoconf_h_path} )
402441 file (MAKE_DIRECTORY ${autoconf_h_path} )
@@ -410,6 +449,7 @@ execute_process(
410449 ${ZEPHYR_BASE} /scripts/kconfig/kconfig.py
411450 --zephyr-base=${ZEPHYR_BASE}
412451 ${input_configs_flags}
452+ ${kconfig_strict_args}
413453 ${KCONFIG_ROOT}
414454 ${DOTCONFIG}
415455 ${AUTOCONF_H}
0 commit comments