# Uniquely identify the toolchain wrt. it's capabilities.
#
# What we are looking for, is a signature definition that is defined
# like this:
#  * The MD5 sum of the compiler itself. A MD5 checksum is taken of the content
#    after symlinks are resolved. This ensure that if the content changes, then
#    the MD5 will also change (as example toolchain upgrade in same folder)
#  * The CMAKE_C_COMPILER itself. This may be a symlink, but it ensures that
#    multiple symlinks pointing to same executable will generate different
#    signatures, as example: clang, gcc, arm-zephyr-eabi-gcc, links pointing to
#    ccache will generate unique signatures
#  * CMAKE_C_COMPILER_ID is taking the CMake compiler id for extra signature.
#  * CMAKE_C_COMPILER_VERSION will ensure that even when using the previous
#    methods, where an upgraded compiler could have same signature due to ccache
#    usage and symbolic links, then the upgraded compiler will have new version
#    and thus generate a new signature.
#
#  Toolchains with the same signature will always support the same set of flags.
#
file(MD5 ${CMAKE_C_COMPILER} CMAKE_C_COMPILER_MD5_SUM)
set(TOOLCHAIN_SIGNATURE ${CMAKE_C_COMPILER_MD5_SUM})

# Extend the CMAKE_C_COMPILER_MD5_SUM with the compiler signature.
string(MD5 COMPILER_SIGNATURE ${CMAKE_C_COMPILER}_${CMAKE_C_COMPILER_ID}_${CMAKE_C_COMPILER_VERSION})
set(TOOLCHAIN_SIGNATURE ${TOOLCHAIN_SIGNATURE}_${COMPILER_SIGNATURE})

# Load the compile features file which will provide compile features lists for
# various C / CXX language dialects that can then be exported based on current
# Zephyr Kconfig settings or the CSTD global property.
include(${CMAKE_CURRENT_LIST_DIR}/compiler/compiler_features.cmake)

# Loading of templates are strictly not needed as they does not set any
# properties.
# They purely provides an overview as well as a starting point for supporting
# a new toolchain.
include(${CMAKE_CURRENT_LIST_DIR}/compiler/compiler_flags_template.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/linker/linker_flags_template.cmake)

# Configure the toolchain flags based on what toolchain technology is used
# (gcc, host-gcc etc.)
include(${TOOLCHAIN_ROOT}/cmake/compiler/${COMPILER}/compiler_flags.cmake OPTIONAL)
include(${TOOLCHAIN_ROOT}/cmake/linker/${LINKER}/linker_flags.cmake OPTIONAL)
