Browse Source
Introduce dedicated arch and soc hw model v2 CMake module files. Rename existing arch and soc cmake file to have a `_v1` post fix. This help to identify the purpose of each of those files and thus a cleaner implementation. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>pull/69687/head
6 changed files with 168 additions and 88 deletions
@ -0,0 +1,41 @@ |
|||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
# |
||||||
|
# Copyright (c) 2023, Nordic Semiconductor ASA |
||||||
|
|
||||||
|
# |
||||||
|
# Configure ARCH settings based on KConfig settings 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 |
||||||
|
# |
||||||
|
# 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(HWMv2) |
||||||
|
# HWMv2 obtains arch from Kconfig for the given Board / SoC variant because |
||||||
|
# the Board / SoC path is no longer sufficient for determine the arch |
||||||
|
# (read: multi-core and multi-arch SoC). |
||||||
|
set(ARCH ${CONFIG_ARCH}) |
||||||
|
string(TOUPPER "${ARCH}" arch_upper) |
||||||
|
cmake_path(GET ARCH_V2_${arch_upper}_DIR PARENT_PATH ARCH_DIR) |
||||||
|
|
||||||
|
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() |
@ -1,71 +0,0 @@ |
|||||||
# SPDX-License-Identifier: Apache-2.0 |
|
||||||
# |
|
||||||
# Copyright (c) 2021, Nordic Semiconductor ASA |
|
||||||
|
|
||||||
# Configure SoC settings based on Kconfig settings and SoC root. |
|
||||||
# |
|
||||||
# This CMake module will set the following variables in the build system based |
|
||||||
# on Kconfig settings and selected SoC. |
|
||||||
# |
|
||||||
# If no implementation is available for the selected SoC an error will be raised. |
|
||||||
# |
|
||||||
# Outcome: |
|
||||||
# The following variables will be defined when this CMake module completes: |
|
||||||
# |
|
||||||
# - SOC_NAME: Name of the SoC in use, identical to CONFIG_SOC |
|
||||||
# - SOC_SERIES: Name of the SoC series in use, identical to CONFIG_SOC_SERIES |
|
||||||
# - SOC_FAMILY: Name of the SoC family, identical to CONFIG_SOC_FAMILY |
|
||||||
# - SOC_PATH: Path fragment defined by either SOC_NAME or SOC_FAMILY/SOC_SERIES. |
|
||||||
# - SOC_DIR: Directory containing the SoC implementation |
|
||||||
# - SOC_ROOT: SOC_ROOT with ZEPHYR_BASE appended |
|
||||||
# |
|
||||||
# Variable dependencies: |
|
||||||
# - SOC_ROOT: CMake list of SoC roots containing SoC implementations |
|
||||||
# |
|
||||||
# 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) |
|
||||||
|
|
||||||
include(kconfig) |
|
||||||
|
|
||||||
# 'SOC_ROOT' is a prioritized list of directories where socs may be |
|
||||||
# found. It always includes ${ZEPHYR_BASE}/soc at the lowest priority. |
|
||||||
list(APPEND SOC_ROOT ${ZEPHYR_BASE}) |
|
||||||
|
|
||||||
set(SOC_NAME ${CONFIG_SOC}) |
|
||||||
set(SOC_SERIES ${CONFIG_SOC_SERIES}) |
|
||||||
set(SOC_TOOLCHAIN_NAME ${CONFIG_SOC_TOOLCHAIN_NAME}) |
|
||||||
set(SOC_FAMILY ${CONFIG_SOC_FAMILY}) |
|
||||||
|
|
||||||
if("${SOC_SERIES}" STREQUAL "") |
|
||||||
set(SOC_PATH ${SOC_NAME}) |
|
||||||
else() |
|
||||||
set(SOC_PATH ${SOC_FAMILY}/${SOC_SERIES}) |
|
||||||
endif() |
|
||||||
|
|
||||||
# Use SOC to search for a 'CMakeLists.txt' file. |
|
||||||
# e.g. zephyr/soc/xtensa/intel_adsp/CMakeLists.txt. |
|
||||||
foreach(root ${SOC_ROOT}) |
|
||||||
# Check that the root looks reasonable. |
|
||||||
if(NOT IS_DIRECTORY "${root}/soc") |
|
||||||
message(WARNING "\nSOC_ROOT element(s) without a 'soc' subdirectory: |
|
||||||
${root} |
|
||||||
Hints: |
|
||||||
- if your SoC family directory is '/foo/bar/soc/<ARCH>/my_soc_family', then add '/foo/bar' to SOC_ROOT, not the entire SoC family path |
|
||||||
- if in doubt, use absolute paths\n") |
|
||||||
endif() |
|
||||||
|
|
||||||
if(EXISTS ${root}/soc/${ARCH}/${SOC_PATH}) |
|
||||||
set(SOC_DIR ${root}/soc) |
|
||||||
break() |
|
||||||
endif() |
|
||||||
endforeach() |
|
||||||
|
|
||||||
if(NOT SOC_DIR) |
|
||||||
message(FATAL_ERROR "Could not find SOC=${SOC_NAME} for BOARD=${BOARD},\n" |
|
||||||
"please check your installation.\n" |
|
||||||
"SOC roots searched:\n" |
|
||||||
"${SOC_ROOT}\n" |
|
||||||
) |
|
||||||
endif() |
|
@ -0,0 +1,73 @@ |
|||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
# |
||||||
|
# Copyright (c) 2021, Nordic Semiconductor ASA |
||||||
|
|
||||||
|
# Configure SoC settings based on Kconfig settings and SoC root. |
||||||
|
# |
||||||
|
# This CMake module will set the following variables in the build system based |
||||||
|
# on Kconfig settings and selected SoC. |
||||||
|
# |
||||||
|
# If no implementation is available for the selected SoC an error will be raised. |
||||||
|
# |
||||||
|
# Outcome: |
||||||
|
# The following variables will be defined when this CMake module completes: |
||||||
|
# |
||||||
|
# - SOC_NAME: Name of the SoC in use, identical to CONFIG_SOC |
||||||
|
# - SOC_SERIES: Name of the SoC series in use, identical to CONFIG_SOC_SERIES |
||||||
|
# - SOC_FAMILY: Name of the SoC family, identical to CONFIG_SOC_FAMILY |
||||||
|
# - SOC_PATH: Path fragment defined by either SOC_NAME or SOC_FAMILY/SOC_SERIES. |
||||||
|
# - SOC_DIR: Directory containing the SoC implementation |
||||||
|
# - SOC_ROOT: SOC_ROOT with ZEPHYR_BASE appended |
||||||
|
# |
||||||
|
# Variable dependencies: |
||||||
|
# - SOC_ROOT: CMake list of SoC roots containing SoC implementations |
||||||
|
# |
||||||
|
# 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) |
||||||
|
|
||||||
|
include(kconfig) |
||||||
|
|
||||||
|
if(HWMv1) |
||||||
|
# 'SOC_ROOT' is a prioritized list of directories where socs may be |
||||||
|
# found. It always includes ${ZEPHYR_BASE}/soc at the lowest priority. |
||||||
|
list(APPEND SOC_ROOT ${ZEPHYR_BASE}) |
||||||
|
|
||||||
|
set(SOC_NAME ${CONFIG_SOC}) |
||||||
|
set(SOC_SERIES ${CONFIG_SOC_SERIES}) |
||||||
|
set(SOC_TOOLCHAIN_NAME ${CONFIG_SOC_TOOLCHAIN_NAME}) |
||||||
|
set(SOC_FAMILY ${CONFIG_SOC_FAMILY}) |
||||||
|
|
||||||
|
if("${SOC_SERIES}" STREQUAL "") |
||||||
|
set(SOC_PATH ${SOC_NAME}) |
||||||
|
else() |
||||||
|
set(SOC_PATH ${SOC_FAMILY}/${SOC_SERIES}) |
||||||
|
endif() |
||||||
|
|
||||||
|
# Use SOC to search for a 'CMakeLists.txt' file. |
||||||
|
# e.g. zephyr/soc/xtensa/intel_adsp/CMakeLists.txt. |
||||||
|
foreach(root ${SOC_ROOT}) |
||||||
|
# Check that the root looks reasonable. |
||||||
|
if(NOT IS_DIRECTORY "${root}/soc") |
||||||
|
message(WARNING "\nSOC_ROOT element(s) without a 'soc' subdirectory: |
||||||
|
${root} |
||||||
|
Hints: |
||||||
|
- if your SoC family directory is '/foo/bar/soc/<ARCH>/my_soc_family', then add '/foo/bar' to SOC_ROOT, not the entire SoC family path |
||||||
|
- if in doubt, use absolute paths\n") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(EXISTS ${root}/soc/${ARCH}/${SOC_PATH}) |
||||||
|
set(SOC_DIR ${root}/soc) |
||||||
|
break() |
||||||
|
endif() |
||||||
|
endforeach() |
||||||
|
|
||||||
|
if(NOT SOC_DIR) |
||||||
|
message(FATAL_ERROR "Could not find SOC=${SOC_NAME} for BOARD=${BOARD},\n" |
||||||
|
"please check your installation.\n" |
||||||
|
"SOC roots searched:\n" |
||||||
|
"${SOC_ROOT}\n" |
||||||
|
) |
||||||
|
endif() |
||||||
|
endif() |
@ -0,0 +1,29 @@ |
|||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
# |
||||||
|
# Copyright (c) 2021, Nordic Semiconductor ASA |
||||||
|
|
||||||
|
# Configure SoC settings based on Kconfig settings. |
||||||
|
# |
||||||
|
# This CMake module will set the following variables in the build system based |
||||||
|
# on Kconfig settings for the selected SoC. |
||||||
|
# |
||||||
|
# Outcome: |
||||||
|
# The following variables will be defined when this CMake module completes: |
||||||
|
# |
||||||
|
# - SOC_NAME: Name of the SoC in use, identical to CONFIG_SOC |
||||||
|
# - SOC_SERIES: Name of the SoC series in use, identical to CONFIG_SOC_SERIES |
||||||
|
# - SOC_FAMILY: Name of the SoC family, identical to CONFIG_SOC_FAMILY |
||||||
|
# |
||||||
|
# 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) |
||||||
|
|
||||||
|
include(kconfig) |
||||||
|
|
||||||
|
if(HWMv2) |
||||||
|
set(SOC_NAME ${CONFIG_SOC}) |
||||||
|
set(SOC_SERIES ${CONFIG_SOC_SERIES}) |
||||||
|
set(SOC_TOOLCHAIN_NAME ${CONFIG_SOC_TOOLCHAIN_NAME}) |
||||||
|
set(SOC_FAMILY ${CONFIG_SOC_FAMILY}) |
||||||
|
endif() |
Loading…
Reference in new issue