1# Copyright (c) 2024 Nordic Semiconductor 2# 3# SPDX-License-Identifier: Apache-2.0 4 5# This module is responsible for including images into sysbuild and to call 6# pre and post hooks. 7 8# Internal function to update build info with list of images abnd write the file. 9# Main reason for using an internal function is to properly scope variable usage. 10# Function takes a list of images. 11function(sysbuild_info_image images) 12 set(info_image_list) 13 foreach(image ${images}) 14 ExternalProject_Get_Property(${image} SOURCE_DIR) 15 get_target_property(type ${image} APP_TYPE) 16 if(type) 17 list(APPEND info_image_list MAP "name: ${image}, source-dir: ${SOURCE_DIR}, type: ${type}") 18 else() 19 list(APPEND info_image_list MAP "name: ${image}, source-dir: ${source_dir}") 20 endif() 21 endforeach() 22 build_info(images VALUE ${info_image_list}) 23 # Save current state of build info. This allow external tools to fetch sysbuild controlled images 24 # even in the event that one or more image fails configuration stage. 25 yaml_save(NAME build_info) 26endfunction() 27 28get_filename_component(APP_DIR ${APP_DIR} ABSOLUTE) 29get_filename_component(app_name ${APP_DIR} NAME) 30set(DEFAULT_IMAGE "${app_name}") 31 32# This is where all Zephyr applications are added to the multi-image build. 33sysbuild_add_subdirectory(${sysbuild_toplevel_SOURCE_DIR}/images sysbuild/images) 34 35get_property(IMAGES GLOBAL PROPERTY sysbuild_images) 36sysbuild_module_call(PRE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES}) 37sysbuild_images_order(IMAGES_CONFIGURATION_ORDER CONFIGURE IMAGES ${IMAGES}) 38 39sysbuild_info_image("${IMAGES}") 40 41foreach(image ${IMAGES_CONFIGURATION_ORDER}) 42 sysbuild_module_call(PRE_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image}) 43 ExternalZephyrProject_Cmake(APPLICATION ${image}) 44 sysbuild_module_call(POST_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image}) 45endforeach() 46sysbuild_module_call(POST_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES}) 47 48sysbuild_module_call(PRE_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES}) 49include(${sysbuild_toplevel_SOURCE_DIR}/cmake/domains.cmake) 50sysbuild_module_call(POST_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES}) 51