# 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()