sysbuild: fix extra kconfig targets when using sysbuild

Zephyr provides a feature to hook in custom menuconfig implementations
by setting EXTRA_KCONFIG_TARGETS and then defining the corresponding
command to invoke as EXTRA_KCONFIG_TARGET_COMMAND_FOR_<target>.

This feature is broken with sysbuild because sysbuild will try to create
multiple custom targets with identical names.

This commit fix the sysbuild handling of extra kconfig targets.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
Torsten Rasmussen 2024-09-04 10:09:52 +02:00 committed by Carles Cufí
parent f7ebd61ae9
commit 1bea5fcacb
2 changed files with 20 additions and 2 deletions

View file

@ -332,7 +332,7 @@ function(ExternalZephyrProject_Add)
menuconfig menuconfig
hardenconfig hardenconfig
guiconfig guiconfig
${EXTRA_KCONFIG_TARGETS} $CACHE{EXTRA_KCONFIG_TARGETS}
) )
if(NOT ZBUILD_APP_TYPE STREQUAL "MAIN") if(NOT ZBUILD_APP_TYPE STREQUAL "MAIN")
@ -345,6 +345,16 @@ function(ExternalZephyrProject_Add)
USES_TERMINAL USES_TERMINAL
) )
endforeach() endforeach()
set(list_separator ",")
set(image_extra_kconfig_targets "-DEXTRA_KCONFIG_TARGETS=$CACHE{EXTRA_KCONFIG_TARGETS}")
string(REPLACE ";" "${list_separator}" image_extra_kconfig_targets "${image_extra_kconfig_targets}")
foreach(target $CACHE{EXTRA_KCONFIG_TARGETS})
list(APPEND image_extra_kconfig_targets
-DEXTRA_KCONFIG_TARGET_COMMAND_FOR_${target}=$CACHE{EXTRA_KCONFIG_TARGET_COMMAND_FOR_${target}}
)
endforeach()
include(ExternalProject) include(ExternalProject)
set(application_binary_dir ${CMAKE_BINARY_DIR}/${ZBUILD_APPLICATION}) set(application_binary_dir ${CMAKE_BINARY_DIR}/${ZBUILD_APPLICATION})
ExternalProject_Add( ExternalProject_Add(
@ -352,9 +362,11 @@ function(ExternalZephyrProject_Add)
SOURCE_DIR ${ZBUILD_SOURCE_DIR} SOURCE_DIR ${ZBUILD_SOURCE_DIR}
BINARY_DIR ${application_binary_dir} BINARY_DIR ${application_binary_dir}
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
LIST_SEPARATOR "${list_separator}"
CMAKE_ARGS -DSYSBUILD:BOOL=True CMAKE_ARGS -DSYSBUILD:BOOL=True
-DSYSBUILD_CACHE:FILEPATH=${sysbuild_cache_file} -DSYSBUILD_CACHE:FILEPATH=${sysbuild_cache_file}
${shared_cmake_vars_argument} ${shared_cmake_vars_argument}
${image_extra_kconfig_targets}
BUILD_COMMAND ${CMAKE_COMMAND} --build . BUILD_COMMAND ${CMAKE_COMMAND} --build .
INSTALL_COMMAND "" INSTALL_COMMAND ""
BUILD_ALWAYS True BUILD_ALWAYS True
@ -453,7 +465,7 @@ function(ExternalZephyrProject_Cmake)
" ${image_banner_header}\n" " ${image_banner_header}\n"
) )
ExternalProject_Get_Property(${ZCMAKE_APPLICATION} SOURCE_DIR BINARY_DIR CMAKE_ARGS) ExternalProject_Get_Property(${ZCMAKE_APPLICATION} SOURCE_DIR BINARY_DIR CMAKE_ARGS LIST_SEPARATOR)
get_target_property(${ZCMAKE_APPLICATION}_BOARD ${ZCMAKE_APPLICATION} BOARD) get_target_property(${ZCMAKE_APPLICATION}_BOARD ${ZCMAKE_APPLICATION} BOARD)
get_property(${ZCMAKE_APPLICATION}_CONF_SCRIPT TARGET ${ZCMAKE_APPLICATION} get_property(${ZCMAKE_APPLICATION}_CONF_SCRIPT TARGET ${ZCMAKE_APPLICATION}
@ -471,6 +483,7 @@ function(ExternalZephyrProject_Cmake)
string(CONFIGURE "${config_content}" config_content) string(CONFIGURE "${config_content}" config_content)
file(WRITE ${dotconfigsysbuild} ${config_content}) file(WRITE ${dotconfigsysbuild} ${config_content})
string(REPLACE "${LIST_SEPARATOR}" "\\;" CMAKE_ARGS "${CMAKE_ARGS}")
execute_process( execute_process(
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
-G${CMAKE_GENERATOR} -G${CMAKE_GENERATOR}

View file

@ -11,6 +11,11 @@ set(EXTRA_KCONFIG_TARGET_COMMAND_FOR_sysbuild_guiconfig
) )
set(KCONFIG_TARGETS sysbuild_menuconfig sysbuild_guiconfig) set(KCONFIG_TARGETS sysbuild_menuconfig sysbuild_guiconfig)
foreach(extra_target ${EXTRA_KCONFIG_TARGETS})
set(EXTRA_KCONFIG_TARGET_COMMAND_FOR_sysbuild_${extra_target}
"${EXTRA_KCONFIG_TARGET_COMMAND_FOR_${extra_target}}"
)
endforeach()
list(TRANSFORM EXTRA_KCONFIG_TARGETS PREPEND "sysbuild_") list(TRANSFORM EXTRA_KCONFIG_TARGETS PREPEND "sysbuild_")
zephyr_get(APPLICATION_CONFIG_DIR) zephyr_get(APPLICATION_CONFIG_DIR)