# 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})

# Custom targets for compiler and linker flags.
add_custom_target(asm)
add_custom_target(compiler)
add_custom_target(compiler-cpp)
add_custom_target(linker)

# 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)
