Skip to content

Commit 1bea5fc

Browse files
tejlmandcarlescufi
authored andcommitted
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>
1 parent f7ebd61 commit 1bea5fc

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

share/sysbuild/cmake/modules/sysbuild_extensions.cmake

+15-2
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ function(ExternalZephyrProject_Add)
332332
menuconfig
333333
hardenconfig
334334
guiconfig
335-
${EXTRA_KCONFIG_TARGETS}
335+
$CACHE{EXTRA_KCONFIG_TARGETS}
336336
)
337337

338338
if(NOT ZBUILD_APP_TYPE STREQUAL "MAIN")
@@ -345,16 +345,28 @@ function(ExternalZephyrProject_Add)
345345
USES_TERMINAL
346346
)
347347
endforeach()
348+
349+
set(list_separator ",")
350+
set(image_extra_kconfig_targets "-DEXTRA_KCONFIG_TARGETS=$CACHE{EXTRA_KCONFIG_TARGETS}")
351+
string(REPLACE ";" "${list_separator}" image_extra_kconfig_targets "${image_extra_kconfig_targets}")
352+
foreach(target $CACHE{EXTRA_KCONFIG_TARGETS})
353+
list(APPEND image_extra_kconfig_targets
354+
-DEXTRA_KCONFIG_TARGET_COMMAND_FOR_${target}=$CACHE{EXTRA_KCONFIG_TARGET_COMMAND_FOR_${target}}
355+
)
356+
endforeach()
357+
348358
include(ExternalProject)
349359
set(application_binary_dir ${CMAKE_BINARY_DIR}/${ZBUILD_APPLICATION})
350360
ExternalProject_Add(
351361
${ZBUILD_APPLICATION}
352362
SOURCE_DIR ${ZBUILD_SOURCE_DIR}
353363
BINARY_DIR ${application_binary_dir}
354364
CONFIGURE_COMMAND ""
365+
LIST_SEPARATOR "${list_separator}"
355366
CMAKE_ARGS -DSYSBUILD:BOOL=True
356367
-DSYSBUILD_CACHE:FILEPATH=${sysbuild_cache_file}
357368
${shared_cmake_vars_argument}
369+
${image_extra_kconfig_targets}
358370
BUILD_COMMAND ${CMAKE_COMMAND} --build .
359371
INSTALL_COMMAND ""
360372
BUILD_ALWAYS True
@@ -453,7 +465,7 @@ function(ExternalZephyrProject_Cmake)
453465
" ${image_banner_header}\n"
454466
)
455467

456-
ExternalProject_Get_Property(${ZCMAKE_APPLICATION} SOURCE_DIR BINARY_DIR CMAKE_ARGS)
468+
ExternalProject_Get_Property(${ZCMAKE_APPLICATION} SOURCE_DIR BINARY_DIR CMAKE_ARGS LIST_SEPARATOR)
457469
get_target_property(${ZCMAKE_APPLICATION}_BOARD ${ZCMAKE_APPLICATION} BOARD)
458470

459471
get_property(${ZCMAKE_APPLICATION}_CONF_SCRIPT TARGET ${ZCMAKE_APPLICATION}
@@ -471,6 +483,7 @@ function(ExternalZephyrProject_Cmake)
471483
string(CONFIGURE "${config_content}" config_content)
472484
file(WRITE ${dotconfigsysbuild} ${config_content})
473485

486+
string(REPLACE "${LIST_SEPARATOR}" "\\;" CMAKE_ARGS "${CMAKE_ARGS}")
474487
execute_process(
475488
COMMAND ${CMAKE_COMMAND}
476489
-G${CMAKE_GENERATOR}

share/sysbuild/cmake/modules/sysbuild_kconfig.cmake

+5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ set(EXTRA_KCONFIG_TARGET_COMMAND_FOR_sysbuild_guiconfig
1111
)
1212

1313
set(KCONFIG_TARGETS sysbuild_menuconfig sysbuild_guiconfig)
14+
foreach(extra_target ${EXTRA_KCONFIG_TARGETS})
15+
set(EXTRA_KCONFIG_TARGET_COMMAND_FOR_sysbuild_${extra_target}
16+
"${EXTRA_KCONFIG_TARGET_COMMAND_FOR_${extra_target}}"
17+
)
18+
endforeach()
1419
list(TRANSFORM EXTRA_KCONFIG_TARGETS PREPEND "sysbuild_")
1520

1621
zephyr_get(APPLICATION_CONFIG_DIR)

0 commit comments

Comments
 (0)