From 65fbcd55b49d74baacdd72a714de05f413cd95a1 Mon Sep 17 00:00:00 2001 From: Torsten Rasmussen Date: Wed, 4 Sep 2024 10:09:52 +0200 Subject: [PATCH] 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_. 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 --- .../cmake/modules/sysbuild_extensions.cmake | 17 +++++++++++++++-- .../cmake/modules/sysbuild_kconfig.cmake | 5 +++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/share/sysbuild/cmake/modules/sysbuild_extensions.cmake b/share/sysbuild/cmake/modules/sysbuild_extensions.cmake index c20fcdb1e5156..c1b2513d192f5 100644 --- a/share/sysbuild/cmake/modules/sysbuild_extensions.cmake +++ b/share/sysbuild/cmake/modules/sysbuild_extensions.cmake @@ -332,7 +332,7 @@ function(ExternalZephyrProject_Add) menuconfig hardenconfig guiconfig - ${EXTRA_KCONFIG_TARGETS} + $CACHE{EXTRA_KCONFIG_TARGETS} ) if(NOT ZBUILD_APP_TYPE STREQUAL "MAIN") @@ -345,6 +345,16 @@ function(ExternalZephyrProject_Add) USES_TERMINAL ) 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) set(application_binary_dir ${CMAKE_BINARY_DIR}/${ZBUILD_APPLICATION}) ExternalProject_Add( @@ -352,9 +362,11 @@ function(ExternalZephyrProject_Add) SOURCE_DIR ${ZBUILD_SOURCE_DIR} BINARY_DIR ${application_binary_dir} CONFIGURE_COMMAND "" + LIST_SEPARATOR "${list_separator}" CMAKE_ARGS -DSYSBUILD:BOOL=True -DSYSBUILD_CACHE:FILEPATH=${sysbuild_cache_file} ${shared_cmake_vars_argument} + ${image_extra_kconfig_targets} BUILD_COMMAND ${CMAKE_COMMAND} --build . INSTALL_COMMAND "" BUILD_ALWAYS True @@ -453,7 +465,7 @@ function(ExternalZephyrProject_Cmake) " ${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_property(${ZCMAKE_APPLICATION}_CONF_SCRIPT TARGET ${ZCMAKE_APPLICATION} @@ -471,6 +483,7 @@ function(ExternalZephyrProject_Cmake) string(CONFIGURE "${config_content}" config_content) file(WRITE ${dotconfigsysbuild} ${config_content}) + string(REPLACE "${LIST_SEPARATOR}" "\\;" CMAKE_ARGS "${CMAKE_ARGS}") execute_process( COMMAND ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} diff --git a/share/sysbuild/cmake/modules/sysbuild_kconfig.cmake b/share/sysbuild/cmake/modules/sysbuild_kconfig.cmake index 2d563676ef61f..41094454116e0 100644 --- a/share/sysbuild/cmake/modules/sysbuild_kconfig.cmake +++ b/share/sysbuild/cmake/modules/sysbuild_kconfig.cmake @@ -11,6 +11,11 @@ set(EXTRA_KCONFIG_TARGET_COMMAND_FOR_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_") zephyr_get(APPLICATION_CONFIG_DIR)