|  | # 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: | 
|  | # | 
|  | # - CMAKE_DTS_PREPROCESSOR: the path to the preprocessor to use | 
|  | #   for devicetree files | 
|  | # - 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) | 
|  |  | 
|  | if(HWMv1) | 
|  | set(arch_include dts/${ARCH}) | 
|  | else() | 
|  | foreach(arch ${ARCH_V2_NAME_LIST}) | 
|  | list(APPEND arch_include dts/${arch}) | 
|  | endforeach() | 
|  | endif() | 
|  |  | 
|  | # 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 | 
|  | ${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() |