You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.7 KiB
90 lines
2.7 KiB
# SPDX-License-Identifier: Apache-2.0 |
|
# |
|
# Copyright (c) 2021, 2023 Nordic Semiconductor ASA |
|
|
|
include_guard(GLOBAL) |
|
include(extensions) |
|
|
|
# Finalize the value of DTS_ROOT, so we know where all our |
|
# DTS files, bindings, and vendor prefixes are. |
|
# |
|
# Outcome: |
|
# The following variables will be defined when this CMake module completes: |
|
# |
|
# - DTS_ROOT: a deduplicated list of places where devicetree |
|
# implementation files (like bindings, vendor prefixes, etc.) are |
|
# found |
|
# - DTS_ROOT_SYSTEM_INCLUDE_DIRS: set to "PATH1 PATH2 ...", |
|
# with one path per potential location where C preprocessor #includes |
|
# may be found for devicetree files |
|
# |
|
# Required variables: |
|
# None. |
|
# |
|
# Optional variables: |
|
# - APPLICATION_SOURCE_DIR: path to app (added to DTS_ROOT) |
|
# - BOARD_DIR: directory containing the board definition (added to DTS_ROOT) |
|
# - DTS_ROOT: initial contents may be populated here |
|
# - ZEPHYR_BASE: path to zephyr repository (added to DTS_ROOT) |
|
# - SHIELD_DIRS: paths to shield definitions (added to DTS_ROOT) |
|
|
|
# Using a function avoids polluting the parent scope unnecessarily. |
|
function(pre_dt_module_run) |
|
# Convert relative paths to absolute paths relative to the application |
|
# source directory. |
|
zephyr_file(APPLICATION_ROOT DTS_ROOT) |
|
|
|
# DTS_ROOT always includes the application directory, the board |
|
# directory, shield directories, and ZEPHYR_BASE. |
|
list(APPEND |
|
DTS_ROOT |
|
${APPLICATION_SOURCE_DIR} |
|
${BOARD_DIR} |
|
${SHIELD_DIRS} |
|
${ZEPHYR_BASE} |
|
) |
|
|
|
# Convert the directories in DTS_ROOT to absolute paths without |
|
# symlinks. |
|
# |
|
# DTS directories can come from multiple places. Some places, like a |
|
# user's CMakeLists.txt can preserve symbolic links. Others, like |
|
# scripts/zephyr_module.py --settings-out resolve them. |
|
unset(real_dts_root) |
|
foreach(dts_dir ${DTS_ROOT}) |
|
file(REAL_PATH ${dts_dir} real_dts_dir) |
|
list(APPEND real_dts_root ${real_dts_dir}) |
|
endforeach() |
|
set(DTS_ROOT ${real_dts_root}) |
|
|
|
# Finalize DTS_ROOT. |
|
list(REMOVE_DUPLICATES DTS_ROOT) |
|
|
|
foreach(arch ${ARCH_V2_NAME_LIST}) |
|
list(APPEND arch_include dts/${arch}) |
|
endforeach() |
|
|
|
# Finalize DTS_ROOT_SYSTEM_INCLUDE_DIRS. |
|
set(DTS_ROOT_SYSTEM_INCLUDE_DIRS) |
|
foreach(dts_root ${DTS_ROOT}) |
|
foreach(dts_root_path |
|
include |
|
include/zephyr |
|
dts/common |
|
dts/vendor |
|
${arch_include} |
|
dts |
|
) |
|
get_filename_component(full_path ${dts_root}/${dts_root_path} REALPATH) |
|
if(EXISTS ${full_path}) |
|
list(APPEND DTS_ROOT_SYSTEM_INCLUDE_DIRS ${full_path}) |
|
endif() |
|
endforeach() |
|
endforeach() |
|
|
|
# Set output variables. |
|
set(DTS_ROOT ${DTS_ROOT} PARENT_SCOPE) |
|
set(DTS_ROOT_SYSTEM_INCLUDE_DIRS ${DTS_ROOT_SYSTEM_INCLUDE_DIRS} PARENT_SCOPE) |
|
endfunction() |
|
|
|
pre_dt_module_run()
|
|
|