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