sysbuild: introduce sysbuild_root for root adjustment
Fixes: #73066 Introduce sysbuild_root CMake module similar to the Zephyr root CMake module. The sysbuild_root CMake module works similar to existing root module, but with the difference that root paths are adjusted relative to APP_DIR which is the main image, instead of relative to sysbuild. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
parent
8b3d4c6f0d
commit
24acc7d43d
5 changed files with 74 additions and 14 deletions
|
@ -2549,6 +2549,8 @@ endfunction()
|
|||
# to absolute path, relative from `APPLICATION_SOURCE_DIR`
|
||||
# Issue an error for any relative path not specified
|
||||
# by user with `-D<path>`
|
||||
# BASE_DIR <base-dir>: convert paths relative to <base-dir>
|
||||
# instead of `APPLICATION_SOURCE_DIR`
|
||||
#
|
||||
# returns an updated list of absolute paths
|
||||
#
|
||||
|
@ -2602,7 +2604,7 @@ Please provide one of following: APPLICATION_ROOT, CONF_FILES")
|
|||
endif()
|
||||
|
||||
if(${ARGV0} STREQUAL APPLICATION_ROOT)
|
||||
set(single_args APPLICATION_ROOT)
|
||||
set(single_args APPLICATION_ROOT BASE_DIR)
|
||||
elseif(${ARGV0} STREQUAL CONF_FILES)
|
||||
set(options QUALIFIERS REQUIRED)
|
||||
set(single_args BOARD BOARD_REVISION BOARD_QUALIFIERS DTS KCONF DEFCONFIG BUILD SUFFIX)
|
||||
|
@ -2615,6 +2617,10 @@ Please provide one of following: APPLICATION_ROOT, CONF_FILES")
|
|||
endif()
|
||||
|
||||
if(ZFILE_APPLICATION_ROOT)
|
||||
if(NOT DEFINED ZFILE_BASE_DIR)
|
||||
set(ZFILE_BASE_DIR ${APPLICATION_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
# Note: user can do: `-D<var>=<relative-path>` and app can at same
|
||||
# time specify `list(APPEND <var> <abs-path>)`
|
||||
# Thus need to check and update only CACHED variables (-D<var>).
|
||||
|
@ -2625,7 +2631,7 @@ Please provide one of following: APPLICATION_ROOT, CONF_FILES")
|
|||
# path from `APPLICATION_SOURCE_DIR`.
|
||||
if(NOT IS_ABSOLUTE ${path})
|
||||
list(FIND ${ZFILE_APPLICATION_ROOT} ${path} index)
|
||||
cmake_path(ABSOLUTE_PATH path BASE_DIRECTORY ${APPLICATION_SOURCE_DIR} NORMALIZE)
|
||||
cmake_path(ABSOLUTE_PATH path BASE_DIRECTORY ${ZFILE_BASE_DIR} NORMALIZE)
|
||||
if(NOT ${index} LESS 0)
|
||||
list(REMOVE_AT ${ZFILE_APPLICATION_ROOT} ${index})
|
||||
list(INSERT ${ZFILE_APPLICATION_ROOT} ${index} ${path})
|
||||
|
@ -2645,7 +2651,7 @@ Relative paths are only allowed with `-D${ARGV1}=<path>`")
|
|||
endif()
|
||||
endforeach()
|
||||
|
||||
list(REMOVE_DUPLICATES ZFILE_APPLICATION_ROOT)
|
||||
list(REMOVE_DUPLICATES ${ZFILE_APPLICATION_ROOT})
|
||||
# This updates the provided argument in parent scope (callers scope)
|
||||
set(${ZFILE_APPLICATION_ROOT} ${${ZFILE_APPLICATION_ROOT}} PARENT_SCOPE)
|
||||
endif()
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
# - SOC_ROOT: CMake list of SoC roots containing SoC implementations
|
||||
# - BOARD_ROOT: CMake list of board roots containing board and shield implementations
|
||||
# - MODULE_EXT_ROOT: CMake list of module external roots containing module glue code
|
||||
# - SCA_ROOT: CMake list of SCA roots containing static code analysis integration code
|
||||
#
|
||||
# If a root is defined it will check the list of paths in the root and convert
|
||||
# any relative path to absolute path and update the root list.
|
||||
|
|
|
@ -9,7 +9,7 @@ include(extensions)
|
|||
include(sysbuild_extensions)
|
||||
include(python)
|
||||
include(west)
|
||||
include(root)
|
||||
include(sysbuild_root)
|
||||
include(zephyr_module)
|
||||
include(boards)
|
||||
include(shields)
|
||||
|
|
|
@ -460,16 +460,6 @@ function(ExternalZephyrProject_Cmake)
|
|||
PROPERTY IMAGE_CONF_SCRIPT
|
||||
)
|
||||
|
||||
# Update ROOT variables with relative paths to use absolute paths based on
|
||||
# the source application directory.
|
||||
foreach(type MODULE_EXT BOARD SOC ARCH SCA)
|
||||
if(DEFINED CACHE{${type}_ROOT} AND NOT IS_ABSOLUTE $CACHE{${type}_ROOT})
|
||||
set(rel_path $CACHE{${type}_ROOT})
|
||||
cmake_path(ABSOLUTE_PATH rel_path BASE_DIRECTORY "${APP_DIR}" NORMALIZE OUTPUT_VARIABLE abs_path)
|
||||
set(${type}_ROOT ${abs_path} CACHE PATH "Sysbuild adjusted absolute path" FORCE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
sysbuild_cache(CREATE APPLICATION ${ZCMAKE_APPLICATION})
|
||||
|
||||
foreach(script ${${ZCMAKE_APPLICATION}_CONF_SCRIPT})
|
||||
|
|
63
share/sysbuild/cmake/modules/sysbuild_root.cmake
Normal file
63
share/sysbuild/cmake/modules/sysbuild_root.cmake
Normal file
|
@ -0,0 +1,63 @@
|
|||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Copyright (c) 2024, Nordic Semiconductor ASA
|
||||
|
||||
# Convert Zephyr roots to absolute paths to be used by sysbuild.
|
||||
#
|
||||
# This CMake module will convert all relative paths in existing ROOT lists to
|
||||
# absolute path relative from APP_DIR.
|
||||
#
|
||||
# Optional variables:
|
||||
# - ARCH_ROOT: CMake list of arch roots containing arch implementations
|
||||
# - SOC_ROOT: CMake list of SoC roots containing SoC implementations
|
||||
# - BOARD_ROOT: CMake list of board roots containing board and shield implementations
|
||||
# - MODULE_EXT_ROOT: CMake list of module external roots containing module glue code
|
||||
# - SCA_ROOT: CMake list of SCA roots containing static code analysis integration code
|
||||
#
|
||||
# If a root is defined it will check the list of paths in the root and convert
|
||||
# any relative path to absolute path and update the root list.
|
||||
# If a root is undefined it will still be undefined when this module has loaded.
|
||||
#
|
||||
# Converted paths are placed in the CMake cache so that they are propagated
|
||||
# correctly to image builds.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
include(extensions)
|
||||
|
||||
# Merge in variables from other sources
|
||||
zephyr_get(MODULE_EXT_ROOT MERGE)
|
||||
zephyr_get(BOARD_ROOT MERGE)
|
||||
zephyr_get(SOC_ROOT MERGE)
|
||||
zephyr_get(ARCH_ROOT MERGE)
|
||||
zephyr_get(SCA_ROOT MERGE)
|
||||
|
||||
# Convert paths to absolute, relative from APP_DIR
|
||||
zephyr_file(APPLICATION_ROOT MODULE_EXT_ROOT BASE_DIR ${APP_DIR})
|
||||
zephyr_file(APPLICATION_ROOT BOARD_ROOT BASE_DIR ${APP_DIR})
|
||||
zephyr_file(APPLICATION_ROOT SOC_ROOT BASE_DIR ${APP_DIR})
|
||||
zephyr_file(APPLICATION_ROOT ARCH_ROOT BASE_DIR ${APP_DIR})
|
||||
zephyr_file(APPLICATION_ROOT SCA_ROOT BASE_DIR ${APP_DIR})
|
||||
|
||||
# Sysbuild must ensure any locally defined variables in sysbuild/CMakeLists.txt
|
||||
# have been added to the cache in order for the settings to propagate to images.
|
||||
# note: zephyr_file has removed any list duplicates
|
||||
if(DEFINED MODULE_EXT_ROOT)
|
||||
set(MODULE_EXT_ROOT ${MODULE_EXT_ROOT} CACHE PATH "Sysbuild adjusted MODULE_EXT_ROOT" FORCE)
|
||||
endif()
|
||||
|
||||
if(DEFINED BOARD_ROOT)
|
||||
set(BOARD_ROOT ${BOARD_ROOT} CACHE PATH "Sysbuild adjusted BOARD_ROOT" FORCE)
|
||||
endif()
|
||||
|
||||
if(DEFINED SOC_ROOT)
|
||||
set(SOC_ROOT ${SOC_ROOT} CACHE PATH "Sysbuild adjusted SOC_ROOT" FORCE)
|
||||
endif()
|
||||
|
||||
if(DEFINED ARCH_ROOT)
|
||||
set(ARCH_ROOT ${ARCH_ROOT} CACHE PATH "Sysbuild adjusted ARCH_ROOT" FORCE)
|
||||
endif()
|
||||
|
||||
if(DEFINED SCA_ROOT)
|
||||
set(SCA_ROOT ${SCA_ROOT} CACHE PATH "Sysbuild adjusted SCA_ROOT" FORCE)
|
||||
endif()
|
Loading…
Add table
Add a link
Reference in a new issue