| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Copyright (c) 2022, Nordic Semiconductor ASA |
| |
| # 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) |
| |
| # '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() |