From 88a4f9db22738f82be395c44892ef9c70a0433ef Mon Sep 17 00:00:00 2001 From: Tomasz Chyrowicz Date: Tue, 25 Feb 2025 12:34:46 +0100 Subject: [PATCH] sysbuild: Add flag to customize variant app config Add a flag to allow for customizing the variant application Kconfig values. Ref: NCSDK-30812 Signed-off-by: Tomasz Chyrowicz --- cmake/modules/kconfig.cmake | 31 ++++++++++++------- .../modules/ncs_sysbuild_extensions.cmake | 12 +++++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/cmake/modules/kconfig.cmake b/cmake/modules/kconfig.cmake index 1cacbe4f0ba7..bc7664060a51 100644 --- a/cmake/modules/kconfig.cmake +++ b/cmake/modules/kconfig.cmake @@ -7,24 +7,31 @@ include_guard(GLOBAL) if(CONFIG_NCS_IS_VARIANT_IMAGE) - # A variant build should reuse same .config and thus autoconf.h, therefore - # copy files from original and bypass Kconfig invocation. set(AUTOCONF_H ${PROJECT_BINARY_DIR}/include/generated/zephyr/autoconf.h) set(DOTCONFIG ${PROJECT_BINARY_DIR}/.config) - set(preload_autoconf_h ${PRELOAD_BINARY_DIR}/zephyr/include/generated/zephyr/autoconf.h) - set(preload_dotconfig ${PRELOAD_BINARY_DIR}/zephyr/.config) - - file(COPY ${preload_dotconfig} DESTINATION ${PROJECT_BINARY_DIR}) - file(COPY ${preload_autoconf_h} DESTINATION ${PROJECT_BINARY_DIR}/include/generated/zephyr) - file(APPEND ${AUTOCONF_H} "#define CONFIG_NCS_IS_VARIANT_IMAGE 1") - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${AUTOCONF_H}) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${DOTCONFIG}) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${preload_autoconf_h}) - set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${preload_dotconfig}) - import_kconfig("CONFIG" ${DOTCONFIG}) + if(CONFIG_NCS_VARIANT_MERGE_KCONFIG) + # A variant build should reuse same .config and thus autoconf.h, therefore + # copy files from original and bypass Kconfig invocation. + set(preload_autoconf_h ${PRELOAD_BINARY_DIR}/zephyr/include/generated/zephyr/autoconf.h) + set(preload_dotconfig ${PRELOAD_BINARY_DIR}/zephyr/.config) + + file(COPY ${preload_dotconfig} DESTINATION ${PROJECT_BINARY_DIR}) + file(COPY ${preload_autoconf_h} DESTINATION ${PROJECT_BINARY_DIR}/include/generated/zephyr) + + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${preload_autoconf_h}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${preload_dotconfig}) + + import_kconfig("CONFIG" ${DOTCONFIG}) + else() + # First generate autoconf.h as well as .config files. + include(${ZEPHYR_BASE}/cmake/modules/kconfig.cmake) + endif() + + file(APPEND ${AUTOCONF_H} "#define CONFIG_NCS_IS_VARIANT_IMAGE 1") else() include(${ZEPHYR_BASE}/cmake/modules/kconfig.cmake) endif() diff --git a/cmake/sysbuild/modules/ncs_sysbuild_extensions.cmake b/cmake/sysbuild/modules/ncs_sysbuild_extensions.cmake index 4e3683fb36a1..e5c48351829b 100644 --- a/cmake/sysbuild/modules/ncs_sysbuild_extensions.cmake +++ b/cmake/sysbuild/modules/ncs_sysbuild_extensions.cmake @@ -16,8 +16,10 @@ include_guard(GLOBAL) # APPLICATION : Name of the application which is used as the source for # the variant build. # VARIANT : Name of the variant build. +# SPLIT_KCONFIG: Flag indicating that the variant image should +# not reuse the same .config files. function(ExternalNcsVariantProject_Add) - cmake_parse_arguments(VBUILD "" "APPLICATION;VARIANT" "" ${ARGN}) + cmake_parse_arguments(VBUILD "SPLIT_KCONFIG" "APPLICATION;VARIANT" "" ${ARGN}) ExternalProject_Get_Property(${VBUILD_APPLICATION} SOURCE_DIR BINARY_DIR) set(${VBUILD_APPLICATION}_BINARY_DIR ${BINARY_DIR}) @@ -41,9 +43,15 @@ function(ExternalNcsVariantProject_Add) set_property(TARGET ${VBUILD_VARIANT} PROPERTY NCS_VARIANT_APPLICATION ${VBUILD_APPLICATION}) set_property(TARGET ${VBUILD_VARIANT} APPEND PROPERTY _EP_CMAKE_ARGS -DCONFIG_NCS_IS_VARIANT_IMAGE=y - -DPRELOAD_BINARY_DIR=${${VBUILD_APPLICATION}_BINARY_DIR} ) + if(NOT VBUILD_SPLIT_KCONFIG) + set_property(TARGET ${VBUILD_VARIANT} APPEND PROPERTY _EP_CMAKE_ARGS + -DPRELOAD_BINARY_DIR=${${VBUILD_APPLICATION}_BINARY_DIR} + -DCONFIG_NCS_VARIANT_MERGE_KCONFIG=y + ) + endif() + # Configure variant image after application so that the configuration is present sysbuild_add_dependencies(CONFIGURE ${VBUILD_VARIANT} ${VBUILD_APPLICATION}) endfunction()