diff --git a/cmake/toolchain/espressif/generic.cmake b/cmake/toolchain/espressif/generic.cmake index d418a2add89..0ec5424be83 100644 --- a/cmake/toolchain/espressif/generic.cmake +++ b/cmake/toolchain/espressif/generic.cmake @@ -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} + ${TOOLCHAIN_HOME}/*-esp32*/*-elf + ${TOOLCHAIN_HOME}/*-esp*/*-elf ) -if(toolchain_paths) - list(GET toolchain_paths 0 soc_toolchain_path) +# 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} + ) - 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})") diff --git a/cmake/toolchain/espressif/target.cmake b/cmake/toolchain/espressif/target.cmake index 5a1a0e51313..5245bf9d083 100644 --- a/cmake/toolchain/espressif/target.cmake +++ b/cmake/toolchain/espressif/target.cmake @@ -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})") diff --git a/west.yml b/west.yml index 400b113cc37..2db90413ad2 100644 --- a/west.yml +++ b/west.yml @@ -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: