# SPDX-License-Identifier: Apache-2.0 # # Copyright (c) 2022, Nordic Semiconductor ASA # # This CMake module is only valid for hw model v1. # In hw model v1, then arch is determined by the board folder structure. # # Configure ARCH settings based on board directory and arch root. # # This CMake module will set the following variables in the build system based # on board directory and arch root. # # If no implementation is available for the current arch an error will be raised. # # Outcome: # The following variables will be defined when this CMake module completes: # # - ARCH: Name of the arch in use. # - ARCH_DIR: Directory containing the arch implementation. # - ARCH_ROOT: ARCH_ROOT with ZEPHYR_BASE appended # # Variable dependencies: # - ARCH_ROOT: CMake list of arch roots containing arch implementations # - BOARD_DIR: CMake variable specifying the directory of the selected BOARD # # Variables set by this module and not mentioned above are considered internal # use only and may be removed, renamed, or re-purposed without prior notice. include_guard(GLOBAL) if(HWMv1) # 'ARCH_ROOT' is a prioritized list of directories where archs may be # found. It always includes ${ZEPHYR_BASE} at the lowest priority (except for unittesting). if(NOT unittest IN_LIST Zephyr_FIND_COMPONENTS) list(APPEND ARCH_ROOT ${ZEPHYR_BASE}) endif() cmake_path(GET BOARD_DIR PARENT_PATH board_arch_dir) cmake_path(GET board_arch_dir FILENAME ARCH) foreach(root ${ARCH_ROOT}) if(EXISTS ${root}/arch/${ARCH}/CMakeLists.txt) set(ARCH_DIR ${root}/arch) break() endif() endforeach() if(NOT ARCH_DIR) message(FATAL_ERROR "Could not find ARCH=${ARCH} for BOARD=${BOARD}, \ please check your installation. ARCH roots searched: \n\ ${ARCH_ROOT}") endif() endif()