Skip to content

Commit ecb3d83

Browse files
committed
[nrf fromtree] sysbuild: support sysbuild/CMakeLists.txt as entry point for samples
This commit refactors sysbuild entry code by creating a CMake sysbuild module for image processing and place sysbuild entry code in a <app>/sysbuild/CMakeLists.txt file. A template/CMakeLists.txt file will be use as template for applications which doesn't provide their own entry file. An application may create a sysbuild/CMakeLists.txt file. The sysbuild/CMakeLists.txt file is similar in nature to the toplevel CMakeLists.txt file but intended to used by sysbuild. This allows application developers to adjust how an application is built with sysbuild. Signed-off-by: Torsten Rasmussen <[email protected]> (cherry picked from commit fc1884e)
1 parent a6ed71f commit ecb3d83

File tree

7 files changed

+80
-34
lines changed

7 files changed

+80
-34
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
if(Sysbuild_FIND_COMPONENTS)
4+
set(Zephyr_FIND_COMPONENTS ${Sysbuild_FIND_COMPONENTS})
5+
else()
6+
set(Zephyr_FIND_COMPONENTS sysbuild_default)
7+
endif()
8+
include(${CMAKE_CURRENT_LIST_DIR}/../../zephyr-package/cmake/ZephyrConfig.cmake)
9+
set(Sysbuild_FOUND True)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
include(${CMAKE_CURRENT_LIST_DIR}/../../zephyr-package/cmake/ZephyrConfigVersion.cmake)
4+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../../sysbuild/cmake/modules)
5+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} PARENT_SCOPE)

share/sysbuild/CMakeLists.txt

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,12 @@ endif()
1212
# If APP_DIR is a relative path, then CMake will adjust to absolute path based
1313
# on current working dir.
1414
set(APP_DIR ${APP_DIR} CACHE PATH "Main Application Source Directory")
15+
set(Sysbuild_DIR ${CMAKE_CURRENT_LIST_DIR}/../sysbuild-package/cmake)
1516

16-
# Add sysbuild/cmake/modules to CMAKE_MODULE_PATH which allows us to integrate
17-
# sysbuild CMake modules with general Zephyr CMake modules.
18-
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules)
19-
# List of Zephyr and sysbuild CMake modules we need for sysbuild.
20-
# Note: sysbuild_kconfig will internally load kconfig CMake module.
21-
set(zephyr_modules extensions
22-
sysbuild_extensions python west root zephyr_module boards shields hwm_v2
23-
sysbuild_kconfig native_simulator_sb_extensions
24-
)
17+
project(sysbuild_toplevel LANGUAGES)
2518

26-
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE} COMPONENTS ${zephyr_modules})
27-
28-
project(sysbuild LANGUAGES)
29-
30-
get_filename_component(APP_DIR ${APP_DIR} ABSOLUTE)
31-
get_filename_component(app_name ${APP_DIR} NAME)
32-
set(DEFAULT_IMAGE "${app_name}")
33-
34-
# This is where all Zephyr applications are added to the multi-image build.
35-
sysbuild_add_subdirectory(images)
36-
37-
get_property(IMAGES GLOBAL PROPERTY sysbuild_images)
38-
sysbuild_module_call(PRE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
39-
sysbuild_images_order(IMAGES_CONFIGURATION_ORDER CONFIGURE IMAGES ${IMAGES})
40-
foreach(image ${IMAGES_CONFIGURATION_ORDER})
41-
sysbuild_module_call(PRE_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image})
42-
ExternalZephyrProject_Cmake(APPLICATION ${image})
43-
sysbuild_module_call(POST_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image})
44-
endforeach()
45-
sysbuild_module_call(POST_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
46-
47-
sysbuild_module_call(PRE_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
48-
include(cmake/domains.cmake)
49-
sysbuild_module_call(POST_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
19+
if(EXISTS ${APP_DIR}/sysbuild/CMakeLists.txt)
20+
add_subdirectory(${APP_DIR}/sysbuild sysbuild/application)
21+
else()
22+
add_subdirectory(template sysbuild/application)
23+
endif()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright (c) 2024 Nordic Semiconductor
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
#
6+
# Sysbuild default list of CMake modules to include in a regular sysbuild session.
7+
#
8+
include(extensions)
9+
include(sysbuild_extensions)
10+
include(python)
11+
include(west)
12+
include(root)
13+
include(zephyr_module)
14+
include(boards)
15+
include(shields)
16+
include(hwm_v2)
17+
include(sysbuild_kconfig)
18+
include(native_simulator_sb_extensions)
19+
include(sysbuild_images)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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+
get_filename_component(APP_DIR ${APP_DIR} ABSOLUTE)
9+
get_filename_component(app_name ${APP_DIR} NAME)
10+
set(DEFAULT_IMAGE "${app_name}")
11+
12+
# This is where all Zephyr applications are added to the multi-image build.
13+
sysbuild_add_subdirectory(${sysbuild_toplevel_SOURCE_DIR}/images sysbuild/images)
14+
15+
get_property(IMAGES GLOBAL PROPERTY sysbuild_images)
16+
sysbuild_module_call(PRE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
17+
sysbuild_images_order(IMAGES_CONFIGURATION_ORDER CONFIGURE IMAGES ${IMAGES})
18+
foreach(image ${IMAGES_CONFIGURATION_ORDER})
19+
sysbuild_module_call(PRE_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image})
20+
ExternalZephyrProject_Cmake(APPLICATION ${image})
21+
sysbuild_module_call(POST_IMAGE_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES} IMAGE ${image})
22+
endforeach()
23+
sysbuild_module_call(POST_CMAKE MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
24+
25+
sysbuild_module_call(PRE_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})
26+
include(${sysbuild_toplevel_SOURCE_DIR}/cmake/domains.cmake)
27+
sysbuild_module_call(POST_DOMAINS MODULES ${SYSBUILD_MODULE_NAMES} IMAGES ${IMAGES})

share/sysbuild/cmake/modules/sysbuild_kconfig.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ endif()
5656

5757
# Empty files to make kconfig.py happy.
5858
file(TOUCH ${CMAKE_CURRENT_BINARY_DIR}/empty.conf)
59-
set(APPLICATION_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
59+
set(APPLICATION_SOURCE_DIR ${sysbuild_toplevel_SOURCE_DIR})
6060
set(AUTOCONF_H ${CMAKE_CURRENT_BINARY_DIR}/autoconf.h)
6161
set(CONF_FILE ${SB_CONF_FILE})
6262
set(EXTRA_CONF_FILE "${SB_EXTRA_CONF_FILE}")
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright (c) 2024 Nordic Semiconductor
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
# Generic sysbuild CMakeLists.txt file used as sysbuild entry point for multi-image builds.
6+
#
7+
# Applications which requires custom handling when built using sysbuild may copy this
8+
# file to the folder `<app-dir>/sysbuild` and use as a template and extend as needed.
9+
10+
find_package(Sysbuild REQUIRED HINTS $ENV{ZEPHYR_BASE})
11+
12+
project(sysbuild LANGUAGES)

0 commit comments

Comments
 (0)