toolchain: esp32: define target toolchain

In order to retrieve TOOLCHAIN_NAME from Kconfig,
generic.cmake points to any toolchain as a
boilerplate implementation. Now, target.cmake file handles
proper toolchain selection.

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
This commit is contained in:
Sylvio Alves 2021-09-06 09:58:19 -03:00 committed by Christopher Friedt
commit e47eeec810
3 changed files with 64 additions and 13 deletions

View file

@ -10,23 +10,48 @@ set(COMPILER gcc)
set(LINKER ld)
set(BINTOOLS gnu)
# find some toolchain
file(GLOB toolchain_paths
LIST_DIRECTORIES true
${TOOLCHAIN_HOME}/*-esp32*/*-elf
${TOOLCHAIN_HOME}/*-esp*/*-elf
)
# Old toolchain installation path has been deprecated in 2.7.
# This code and related code depending on ESPRESSIF_DEPRECATED_PATH can be removed after two releases.
if(NOT toolchain_paths)
# find some toolchain
file(GLOB toolchain_paths
LIST_DIRECTORIES true
${TOOLCHAIN_HOME}
)
if(toolchain_paths)
list(GET toolchain_paths 0 soc_toolchain_path)
get_filename_component(soc_toolchain "${soc_toolchain_path}" NAME)
set(CROSS_COMPILE_TARGET ${soc_toolchain})
set(SYSROOT_TARGET ${soc_toolchain})
set(ESPRESSIF_DEPRECATED_PATH TRUE)
endif()
set(CROSS_COMPILE ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-)
set(SYSROOT_DIR ${TOOLCHAIN_HOME}/${SYSROOT_TARGET})
if(toolchain_paths)
list(GET toolchain_paths 0 some_toolchain_path)
get_filename_component(one_toolchain_root "${some_toolchain_path}" DIRECTORY)
get_filename_component(one_toolchain "${some_toolchain_path}" NAME)
set(CROSS_COMPILE_TARGET ${one_toolchain})
set(SYSROOT_TARGET ${one_toolchain})
if(ESPRESSIF_DEPRECATED_PATH)
set(CROSS_COMPILE ${ESPRESSIF_TOOLCHAIN_PATH}/bin/${CROSS_COMPILE_TARGET}-)
set(SYSROOT_DIR ${ESPRESSIF_TOOLCHAIN_PATH}/${SYSROOT_TARGET})
else()
set(CROSS_COMPILE ${one_toolchain_root}/bin/${CROSS_COMPILE_TARGET}-)
set(SYSROOT_DIR ${one_toolchain_root}/${SYSROOT_TARGET})
endif()
endif()
if(NOT CROSS_COMPILE_TARGET)
message(FATAL_ERROR
"Unable to find toolchain in ${TOOLCHAIN_HOME} "
"Run `west espressif install` to download it. Then, export to path accordingly.")
endif()
set(TOOLCHAIN_HAS_NEWLIB ON CACHE BOOL "True if toolchain supports newlib")
message(STATUS "Found toolchain: espressif (${ESPRESSIF_TOOLCHAIN_PATH})")

View file

@ -1,3 +1,29 @@
# SPDX-License-Identifier: Apache-2.0
# This file intentionally left blank.
set_ifndef(ESPRESSIF_TOOLCHAIN_PATH "$ENV{ESPRESSIF_TOOLCHAIN_PATH}")
set( ESPRESSIF_TOOLCHAIN_PATH ${ESPRESSIF_TOOLCHAIN_PATH} CACHE PATH "")
assert( ESPRESSIF_TOOLCHAIN_PATH "ESPRESSIF_TOOLCHAIN_PATH is not set")
set(COMPILER gcc)
set(LINKER ld)
set(BINTOOLS gnu)
set(CROSS_COMPILE_TARGET_xtensa_esp32 xtensa-esp32-elf)
set(CROSS_COMPILE_TARGET_xtensa_esp32s2 xtensa-esp32s2-elf)
set(CROSS_COMPILE_TARGET_riscv_esp32c3 riscv32-esp-elf)
set(CROSS_COMPILE_TARGET ${CROSS_COMPILE_TARGET_${ARCH}_${CONFIG_SOC}})
set(SYSROOT_TARGET ${CROSS_COMPILE_TARGET})
if(ESPRESSIF_DEPRECATED_PATH)
set(TOOLCHAIN_HOME ${ESPRESSIF_TOOLCHAIN_PATH})
else()
set(TOOLCHAIN_HOME ${ESPRESSIF_TOOLCHAIN_PATH}/${CROSS_COMPILE_TARGET})
endif()
set(CROSS_COMPILE ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-)
set(SYSROOT_DIR ${TOOLCHAIN_HOME}/${SYSROOT_TARGET})
set(TOOLCHAIN_HAS_NEWLIB ON CACHE BOOL "True if toolchain supports newlib")
message(STATUS "Found toolchain: espressif (${ESPRESSIF_TOOLCHAIN_PATH})")

View file

@ -62,7 +62,7 @@ manifest:
groups:
- hal
- name: hal_espressif
revision: 0d30edf01a41b2c12e6715ff909f81421e96127e
revision: 6cb37487b6ee42f96b4ba0d4719bb5759b098822
path: modules/hal/espressif
west-commands: west/west-commands.yml
groups: