d017a5ab57
This allows for inclusion of out-of-tree toolchain cmake files relating to compiler and linker for both target and generic toolchains. The base path used was ZEPHYR_BASE, instead of TOOLCHAIN_ROOT, thus making it impossible to load the out-of-tree toolchain specific cmake files. In addition, the generic toolchain may now specify a generic cmake file for the linker, similar to the target toolchain linker. The intent here is to abstract Zephyr's dependence on toolchains, thus allowing for easier porting to other, perhaps commercial, toolchains and/or usecases. No functional change expected. Signed-off-by: Danny Oerndrup <daor@demant.com>
62 lines
2.7 KiB
CMake
62 lines
2.7 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# No official documentation exists for the "Generic" value, except their wiki.
|
|
#
|
|
# https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling:
|
|
# CMAKE_SYSTEM_NAME : this one is mandatory, it is the name of the target
|
|
# system, i.e. the same as CMAKE_SYSTEM_NAME would have if CMake would run
|
|
# on the target system. Typical examples are "Linux" and "Windows". This
|
|
# variable is used for constructing the file names of the platform files
|
|
# like Linux.cmake or Windows-gcc.cmake. If your target is an embedded
|
|
# system without OS set CMAKE_SYSTEM_NAME to "Generic".
|
|
set(CMAKE_SYSTEM_NAME Generic)
|
|
|
|
# https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_PROCESSOR.html:
|
|
# The name of the CPU CMake is building for.
|
|
#
|
|
# https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling:
|
|
# CMAKE_SYSTEM_PROCESSOR : optional, processor (or hardware) of the
|
|
# target system. This variable is not used very much except for one
|
|
# purpose, it is used to load a
|
|
# CMAKE_SYSTEM_NAME-compiler-CMAKE_SYSTEM_PROCESSOR.cmake file,
|
|
# which can be used to modify settings like compiler flags etc. for
|
|
# the target
|
|
set(CMAKE_SYSTEM_PROCESSOR ${ARCH})
|
|
|
|
# https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_VERSION.html:
|
|
# When the CMAKE_SYSTEM_NAME variable is set explicitly to enable cross
|
|
# compiling then the value of CMAKE_SYSTEM_VERSION must also be set
|
|
# explicitly to specify the target system version.
|
|
set(CMAKE_SYSTEM_VERSION ${PROJECT_VERSION})
|
|
|
|
# We are not building dynamically loadable libraries
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
|
|
if(NOT (COMPILER STREQUAL "host-gcc"))
|
|
include(${TOOLCHAIN_ROOT}/cmake/toolchain/${ZEPHYR_TOOLCHAIN_VARIANT}/target.cmake)
|
|
endif()
|
|
|
|
# The 'generic' compiler and the 'target' compiler might be different,
|
|
# so we unset the 'generic' one and thereby force the 'target' to
|
|
# re-set it.
|
|
unset(CMAKE_C_COMPILER)
|
|
unset(CMAKE_C_COMPILER CACHE)
|
|
|
|
# A toolchain consist of a compiler and a linker.
|
|
# In Zephyr, toolchains require a port under cmake/toolchain/.
|
|
# Each toolchain port must set COMPILER and LINKER.
|
|
# E.g. toolchain/llvm may pick {clang, ld} or {clang, lld}.
|
|
include(${TOOLCHAIN_ROOT}/cmake/compiler/${COMPILER}/target.cmake OPTIONAL)
|
|
include(${TOOLCHAIN_ROOT}/cmake/linker/${LINKER}/target.cmake OPTIONAL)
|
|
|
|
# Uniquely identify the toolchain wrt. it's capabilities.
|
|
#
|
|
# What we are looking for, is a signature definition that is defined
|
|
# like this:
|
|
# * Toolchains with the same signature will always support the same set
|
|
# of flags.
|
|
# It is not clear how this signature should be constructed. The
|
|
# strategy chosen is to md5sum the CC binary.
|
|
file(MD5 ${CMAKE_C_COMPILER} CMAKE_C_COMPILER_MD5_SUM)
|
|
set(TOOLCHAIN_SIGNATURE ${CMAKE_C_COMPILER_MD5_SUM})
|