aed9ea79b5
This forms the foundation for the abstraction of the binary tools, where the following steps are taken: - Move binary tool resolving, such as objcopy, objdump, readelf and so forth, out of compiler definitions and place in a dedicated binary tools folder with the binary tools supplier as subfolder, similar to the compiler and linker directories. - Create binary tool sets, gnu, host-gnu and llvm. - Each toolchain selects the required set of binary tools by setting BINTOOLS via its generic.cmake as it also does for compiler and 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>
71 lines
2.6 KiB
CMake
71 lines
2.6 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
if(NOT TOOLCHAIN_ROOT)
|
|
if(DEFINED ENV{TOOLCHAIN_ROOT})
|
|
# Support for out-of-tree toolchain
|
|
set(TOOLCHAIN_ROOT $ENV{TOOLCHAIN_ROOT})
|
|
else()
|
|
# Default toolchain cmake file
|
|
set(TOOLCHAIN_ROOT ${ZEPHYR_BASE})
|
|
endif()
|
|
endif()
|
|
|
|
# Don't inherit compiler flags from the environment
|
|
foreach(var CFLAGS CXXFLAGS)
|
|
if(DEFINED ENV{${var}})
|
|
message(WARNING "The environment variable '${var}' was set to $ENV{${var}},
|
|
but Zephyr ignores flags from the environment. Use 'cmake -DEXTRA_${var}=$ENV{${var}}' instead.")
|
|
unset(ENV{${var}})
|
|
endif()
|
|
endforeach()
|
|
|
|
# Until we completely deprecate it
|
|
if(NOT DEFINED ENV{ZEPHYR_TOOLCHAIN_VARIANT})
|
|
if(DEFINED ENV{ZEPHYR_GCC_VARIANT})
|
|
message(WARNING "ZEPHYR_GCC_VARIANT is deprecated, please use ZEPHYR_TOOLCHAIN_VARIANT instead")
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT $ENV{ZEPHYR_GCC_VARIANT})
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT ZEPHYR_TOOLCHAIN_VARIANT)
|
|
if(DEFINED ENV{ZEPHYR_TOOLCHAIN_VARIANT})
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT $ENV{ZEPHYR_TOOLCHAIN_VARIANT})
|
|
elseif(CROSS_COMPILE OR (DEFINED ENV{CROSS_COMPILE}))
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT cross-compile)
|
|
endif()
|
|
endif()
|
|
|
|
# Until we completely deprecate it
|
|
if("${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "gccarmemb")
|
|
message(WARNING "gccarmemb is deprecated, please use gnuarmemb instead")
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT "gnuarmemb")
|
|
endif()
|
|
|
|
# Host-tools don't unconditionally set TOOLCHAIN_HOME anymore,
|
|
# but in case Zephyr's SDK toolchain is used, set TOOLCHAIN_HOME
|
|
if("${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "zephyr")
|
|
set(TOOLCHAIN_HOME ${HOST_TOOLS_HOME})
|
|
endif()
|
|
|
|
set(TOOLCHAIN_ROOT ${TOOLCHAIN_ROOT} CACHE STRING "Zephyr toolchain root")
|
|
assert(TOOLCHAIN_ROOT "Zephyr toolchain root path invalid: please set the TOOLCHAIN_ROOT-variable")
|
|
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT ${ZEPHYR_TOOLCHAIN_VARIANT} CACHE STRING "Zephyr toolchain variant")
|
|
assert(ZEPHYR_TOOLCHAIN_VARIANT "Zephyr toolchain variant invalid: please set the ZEPHYR_TOOLCHAIN_VARIANT-variable")
|
|
|
|
# Pick host system's toolchain if we are targeting posix
|
|
if(${ARCH} STREQUAL "posix")
|
|
if(NOT "${ZEPHYR_TOOLCHAIN_VARIANT}" STREQUAL "llvm")
|
|
set(ZEPHYR_TOOLCHAIN_VARIANT "host")
|
|
endif()
|
|
endif()
|
|
|
|
# Configure the toolchain based on what SDK/toolchain is in use.
|
|
include(${TOOLCHAIN_ROOT}/cmake/toolchain/${ZEPHYR_TOOLCHAIN_VARIANT}/generic.cmake)
|
|
|
|
# Configure the toolchain based on what toolchain technology is used
|
|
# (gcc, host-gcc etc.)
|
|
include(${TOOLCHAIN_ROOT}/cmake/compiler/${COMPILER}/generic.cmake OPTIONAL)
|
|
include(${TOOLCHAIN_ROOT}/cmake/linker/${LINKER}/generic.cmake OPTIONAL)
|
|
include(${TOOLCHAIN_ROOT}/cmake/bintools/${BINTOOLS}/generic.cmake OPTIONAL)
|