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 <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
Torsten Rasmussen 2025-01-14 13:46:40 +01:00 committed by Fabio Baltieri
commit 642e9484e3

View file

@ -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})