From 642e9484e3aba2c10276cdc868137509f26d0fe7 Mon Sep 17 00:00:00 2001 From: Torsten Rasmussen Date: Tue, 14 Jan 2025 13:46:40 +0100 Subject: [PATCH] sysbuild: populate build_info with list of images Populate the build_info.yml created by sysbuild CMake with list of images and write the build info file afterwards. This allows users and external tools to examine which images was included in the build even if one or more of those images fails CMake configure or generate stage. Signed-off-by: Torsten Rasmussen --- .../cmake/modules/sysbuild_images.cmake | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/share/sysbuild/cmake/modules/sysbuild_images.cmake b/share/sysbuild/cmake/modules/sysbuild_images.cmake index eb73ec99448..7115567b8d9 100644 --- a/share/sysbuild/cmake/modules/sysbuild_images.cmake +++ b/share/sysbuild/cmake/modules/sysbuild_images.cmake @@ -5,6 +5,26 @@ # This module is responsible for including images into sysbuild and to call # pre and post hooks. +# Internal function to update build info with list of images abnd write the file. +# Main reason for using an internal function is to properly scope variable usage. +# Function takes a list of images. +function(sysbuild_info_image images) + set(info_image_list) + foreach(image ${images}) + ExternalProject_Get_Property(${image} SOURCE_DIR) + get_target_property(type ${image} APP_TYPE) + if(type) + list(APPEND info_image_list MAP "name: ${image}, source-dir: ${SOURCE_DIR}, type: ${type}") + else() + list(APPEND info_image_list MAP "name: ${image}, source-dir: ${source_dir}") + endif() + endforeach() + build_info(images VALUE ${info_image_list}) + # Save current state of build info. This allow external tools to fetch sysbuild controlled images + # even in the event that one or more image fails configuration stage. + yaml_save(NAME build_info) +endfunction() + get_filename_component(APP_DIR ${APP_DIR} ABSOLUTE) get_filename_component(app_name ${APP_DIR} NAME) set(DEFAULT_IMAGE "${app_name}") @@ -15,6 +35,9 @@ sysbuild_add_subdirectory(${sysbuild_toplevel_SOURCE_DIR}/images sysbuild/images get_property(IMAGES GLOBAL PROPERTY sysbuild_images) sysbuild_module_call(PRE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES}) sysbuild_images_order(IMAGES_CONFIGURATION_ORDER CONFIGURE IMAGES ${IMAGES}) + +sysbuild_info_image("${IMAGES}") + foreach(image ${IMAGES_CONFIGURATION_ORDER}) sysbuild_module_call(PRE_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image}) ExternalZephyrProject_Cmake(APPLICATION ${image})