Merge branch 'feature/update-esp-clang-to-esp-21.1.3_20260304' into 'master'

feat(tools): update esp-clang version to esp-21.1.3_20260408

Closes IDF-14965, LLVM-501, and LLVM-531

See merge request espressif/esp-idf!46361
This commit is contained in:
Alexey Gerenkov
2026-05-13 22:54:10 +08:00
42 changed files with 263 additions and 523 deletions

View File

@@ -155,6 +155,9 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
# warning: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
list(APPEND compile_options "-Wno-single-bit-bitfield-constant-conversion")
endif()
# warning: initializer overrides prior initialization of this subobject
# in esp32c61 pmu_param.c when static unions are initialized (e.g. in pmu_hp_system_analog_param_default)
list(APPEND compile_options "-Wno-initializer-overrides")
endif()
# More warnings may exist in unit tests and example projects.

View File

@@ -275,7 +275,8 @@ if(LOG_COMPRESSED_MODULE)
"${jump_table_opts}")
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
if((CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0) OR
CMAKE_C_COMPILER_ID MATCHES "Clang")
set(files_with_compile_flags "host/bluedroid/device/controller.c")
add_flags_if_in_list("${src}"
"${files_with_compile_flags}"

View File

@@ -64,7 +64,7 @@ int tc_hmac_set_key(TCHmacState_t ctx, const uint8_t *key,
return TC_CRYPTO_FAIL;
}
const uint8_t dummy_key[key_size];
uint8_t dummy_key[key_size];
struct tc_hmac_state_struct dummy_state;
if (key_size <= TC_SHA256_BLOCK_SIZE) {
@@ -76,6 +76,7 @@ int tc_hmac_set_key(TCHmacState_t ctx, const uint8_t *key,
* consumed in this process.
*/
(void)tc_sha256_init(&dummy_state.hash_state);
_set(dummy_key, 0, sizeof(dummy_key));
(void)tc_sha256_update(&dummy_state.hash_state,
dummy_key,
key_size);

View File

@@ -22,7 +22,8 @@ function(set_bluedroid_host_compile_flags)
PROPERTIES COMPILE_FLAGS "${jump_table_opts}")
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
if((CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0) OR
CMAKE_C_COMPILER_ID MATCHES "Clang")
set_source_files_properties("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/device/controller.c"
PROPERTIES COMPILE_FLAGS "-Wno-unterminated-string-initialization")
endif()

View File

@@ -6,7 +6,8 @@ if(${idf_target} STREQUAL "linux")
return() # This component is not supported by the POSIX/Linux simulator
endif()
if(CONFIG_ESP_COEX_ENABLED)
# There are no subdir with implementation for esp32h4
if(CONFIG_ESP_COEX_ENABLED AND NOT CONFIG_IDF_TARGET_ESP32H4)
if(CONFIG_ESP_COEX_SW_COEXIST_ENABLE OR CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE)
if(CONFIG_APP_NO_BLOBS)
set(link_binary_libs 0)
@@ -32,7 +33,8 @@ idf_component_register(SRCS "${srcs}"
PRIV_REQUIRES esp_timer esp_driver_gpio
LDFRAGMENTS "${ldfragments}")
if(CONFIG_ESP_COEX_ENABLED)
# There are no subdir with implementation for esp32h4
if(CONFIG_ESP_COEX_ENABLED AND NOT CONFIG_IDF_TARGET_ESP32H4)
if(CONFIG_ESP_COEX_SW_COEXIST_ENABLE OR CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE)
idf_build_get_property(build_dir BUILD_DIR)

View File

@@ -633,6 +633,7 @@ static inline bool gpio_ll_is_digital_io_hold(gpio_dev_t *hw, uint32_t gpio_num)
return !!(LP_SYS.hp_gpio_o_hold_ctrl1.hp_gpio_0_hold_ctrl1 & (bit_mask >> (32 + SOC_RTCIO_PIN_COUNT)));
}
}
return false;
}
/**

View File

@@ -187,12 +187,6 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/include/soc/${target}")
)
endif()
if(NOT CONFIG_ESP32P4_SELECTS_REV_LESS_V3 AND CONFIG_IDF_TARGET_ESP32P4)
if(CMAKE_C_COMPILER_ID MATCHES "Clang") # TODO: LLVM-478 IDF-14338
message(FATAL_ERROR "ESP32-P4 rev. 3.0 or higher is not supported in Clang-based toolchain")
endif()
endif()
if(${target} STREQUAL "esp32p4")
# for mipi_csi_share_hw_ctrl.c
list(APPEND priv_requires esp_hal_cam)

View File

@@ -40,7 +40,7 @@
#endif
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
static DRAM_ATTR smp_retention_state_t s_smp_retention_state[portNUM_PROCESSORS];
static DRAM_ATTR _Atomic(smp_retention_state_t) s_smp_retention_state[portNUM_PROCESSORS];
#endif
static bool s_fpu_saved[portNUM_PROCESSORS];

View File

@@ -74,7 +74,7 @@ static inline void * cpu_domain_clic_sleep_frame_alloc_and_init(uint8_t core_id)
}
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state)
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state)
{
for (uint8_t core_id = 0; core_id < portNUM_PROCESSORS; ++core_id) {
if (sleep_cpu_retention_ptr->retent.critical_frame[core_id] == NULL) {

View File

@@ -49,7 +49,7 @@ typedef struct {
} sleep_cpu_retention_t;
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state);
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state);
#else
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr);
#endif

View File

@@ -143,7 +143,7 @@ static inline void * cpu_domain_clic_sleep_frame_alloc_and_init(uint8_t core_id)
}
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state)
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state)
{
static DRAM_ATTR uint8_t rv_core_critical_regs[RV_SLEEP_CTX_FRMSZ * portNUM_PROCESSORS] __attribute__((aligned(4)));
static DRAM_ATTR uint8_t rv_core_non_critical_regs[sizeof(RvCoreNonCriticalSleepFrame)* portNUM_PROCESSORS] __attribute__((aligned(4)));

View File

@@ -38,7 +38,8 @@
.macro REG_CLR_BIT addr, value
li a0, \addr
/* Since all our parameters will be constants, we can pre-calculate it at assemble time */
li a1, ~\value
li a1, \value
not a1, a1
lw a2, (a0)
and a2, a2, a1
sw a2, (a0)

View File

@@ -41,7 +41,7 @@
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
static SPM_DRAM_ATTR smp_retention_state_t s_smp_retention_state[portNUM_PROCESSORS];
static SPM_DRAM_ATTR _Atomic(smp_retention_state_t) s_smp_retention_state[portNUM_PROCESSORS];
#endif
static bool s_fpu_saved[portNUM_PROCESSORS];

View File

@@ -51,7 +51,7 @@ static inline void * cpu_domain_clic_sleep_frame_alloc_and_init(uint8_t core_id)
}
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state)
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state)
{
for (uint8_t core_id = 0; core_id < portNUM_PROCESSORS; ++core_id) {
if (sleep_cpu_retention_ptr->retent.critical_frame[core_id] == NULL) {

View File

@@ -47,7 +47,7 @@ typedef struct {
} sleep_cpu_retention_t;
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state);
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state);
#else
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr);
#endif

View File

@@ -83,7 +83,7 @@ static inline void * cpu_domain_clic_sleep_frame_alloc_and_init(uint8_t core_id)
}
#if CONFIG_PM_ESP_SLEEP_POWER_DOWN_CPU && !CONFIG_FREERTOS_UNICORE
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, smp_retention_state_t *s_smp_retention_state)
esp_err_t esp_sleep_cpu_retention_init_impl(sleep_cpu_retention_t *sleep_cpu_retention_ptr, _Atomic(smp_retention_state_t) *s_smp_retention_state)
{
static DRAM_ATTR uint8_t rv_core_critical_regs[RV_SLEEP_CTX_FRMSZ * portNUM_PROCESSORS] __attribute__((aligned(4)));
static DRAM_ATTR uint8_t rv_core_non_critical_regs[sizeof(RvCoreNonCriticalSleepFrame)* portNUM_PROCESSORS] __attribute__((aligned(4)));

View File

@@ -158,6 +158,9 @@ if(CONFIG_LIBC_NEWLIB_NANO_FORMAT)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
set(libc_dir_cmd ${CMAKE_C_COMPILER})
string(REPLACE " " ";" cflags_list ${CMAKE_C_FLAGS})
# execute_process() quotes every argument, so we need to unquote response file path
# otherwise it will be treated in wrong way and clang will ignore it
string(REGEX REPLACE "@\"([^\"]*)\"" "@\\1" cflags_list ${cflags_list})
list(APPEND libc_dir_cmd ${cflags_list} "-print-file-name=libc.a")
execute_process(
COMMAND ${libc_dir_cmd}

View File

@@ -148,6 +148,7 @@
.eh_frame_hdr :
{
ALIGNED_SYMBOL(4, __eh_frame_hdr)
ALIGNED_SYMBOL(4, __eh_frame_hdr_start)
KEEP (*(.eh_frame_hdr))
@@ -160,6 +161,7 @@
.eh_frame :
{
ALIGNED_SYMBOL(4, __eh_frame)
ALIGNED_SYMBOL(4, __eh_frame_start)
KEEP (*(.eh_frame))

View File

@@ -123,11 +123,9 @@ if(CONFIG_ESP_WIFI_ENABLED OR CONFIG_ESP_HOST_WIFI_ENABLED)
endforeach()
endif()
# TODO IDF-13365: remove the following lines
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
set_source_files_properties(regulatory/esp_wifi_regulatory.c
PROPERTIES COMPILE_FLAGS
-Wno-unterminated-string-initialization)
endif()
set_source_files_properties(regulatory/esp_wifi_regulatory.c
PROPERTIES COMPILE_FLAGS
-Wno-unterminated-string-initialization)
endif()
if(CONFIG_SPIRAM)

View File

@@ -259,10 +259,11 @@ if(${IDF_TARGET} STREQUAL "linux")
set(mbedtls_target_sources ${mbedtls_target_sources} "${COMPONENT_DIR}/port/net_sockets.c")
endif()
# While updating to MbedTLS release/v3.4.0, building mbedtls/library/psa_crypto.c
# clang produces an unreachable-code warning.
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
target_compile_options(tfpsacrypto PRIVATE "-Wno-unreachable-code")
# while building mbedtls/library/x509_crt.c
# clang 21 produces an uninitialized-const-pointer warning
target_compile_options(mbedx509 PRIVATE "-Wno-uninitialized-const-pointer")
endif()
# net_sockets.c should only be compiled if BSD socket functions are available.

View File

@@ -84,4 +84,23 @@ if(CONFIG_IDF_TOOLCHAIN_GCC)
else()
message(FATAL_ERROR "Unknown Espressif architecture: ${CONFIG_IDF_TARGET_ARCH}")
endif()
elseif(CONFIG_IDF_TOOLCHAIN_CLANG)
idf_toolchain_add_flags(LINK_OPTIONS "-nostartfiles --ld-path=${CMAKE_LINKER} -z noexecstack")
# Clean compile options that were added by previous configurations and may be outdated
idf_toolchain_remove_flags(COMPILE_OPTIONS "-mcpu=")
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
idf_toolchain_add_flags(COMPILE_OPTIONS "--target=xtensa-esp-elf")
idf_toolchain_add_flags(ASM_COMPILE_OPTIONS "-Xassembler --longcalls")
idf_toolchain_add_flags(COMPILE_OPTIONS "-mcpu=${CONFIG_IDF_TARGET}")
elseif(CONFIG_IDF_TARGET_ARCH_RISCV)
idf_toolchain_add_flags(COMPILE_OPTIONS "--target=riscv32-esp-elf")
if(CONFIG_IDF_TARGET_ESP32P4 AND CONFIG_ESP32P4_SELECTS_REV_LESS_V3)
idf_toolchain_add_flags(COMPILE_OPTIONS "-mcpu=esp32p4eco4")
else()
idf_toolchain_add_flags(COMPILE_OPTIONS "-mcpu=${CONFIG_IDF_TARGET}")
endif()
idf_toolchain_rerun_abi_detection()
else()
message(FATAL_ERROR "Unknown Espressif architecture: ${CONFIG_IDF_TARGET_ARCH}")
endif()
endif()

View File

@@ -47,6 +47,9 @@ On Linux and macOS, it is recommended to install CMake using the OS-specific pac
.. tool-esp-clang-libs-notes
---
.. tool-esp-clangd-notes
---

View File

@@ -48,6 +48,11 @@ On Linux and macOS, it is recommended to install CMake using the OS-specific pac
.. tool-esp-clang-libs-notes
---
.. tool-esp-clangd-notes
---
.. tool-ninja-notes

View File

@@ -1,2 +1,9 @@
idf_component_register(SRCS "rtti_example_main.cpp"
INCLUDE_DIRS ".")
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
# Fix Clang 21 potentially-evaluated-expression warning
# rtti_example_main.cpp: error: expression with side effects will be evaluated
# despite being used as an operand to 'typeid'
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-potentially-evaluated-expression)
endif()

View File

@@ -46,3 +46,4 @@ warning: unknown kconfig symbol 'ETHERNET_MDC_GPIO' assigned to '23' in .*/examp
warning: unknown kconfig symbol 'ETHERNET_MDIO_GPIO' assigned to '18' in .*/examples/protocols/esp_http_client/sdkconfig.ci.*
warning: unknown kconfig symbol 'ETHERNET_PHY_RST_GPIO' assigned to '5' in .*/examples/protocols/esp_http_client/sdkconfig.ci.*
warning: unknown kconfig symbol 'ETHERNET_PHY_ADDR' assigned to '1' in .*/examples/protocols/esp_http_client/sdkconfig.ci.*
warning: \S+ changed binding to STB_WEAK

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER xtensa-esp32-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP xtensa-esp32-elf-clang-objdump)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32 -Xassembler --longcalls \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=xtensa-esp32-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imac_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -0,0 +1,2 @@
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei -mabi=ilp32 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei -mabi=ilp32f \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei -mabi=ilp32f \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER riscv32-esp-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP riscv32-esp-elf-clang-objdump)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=riscv32-esp-elf -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=riscv32-esp-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER xtensa-esp32s2-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP xtensa-esp32s2-elf-clang-objdump)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s2 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s2 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s2 -Xassembler --longcalls \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=xtensa-esp32s2-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s2-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -1,40 +1,2 @@
include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER xtensa-esp32s3-elf-clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP xtensa-esp32s3-elf-clang-objdump)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s3 \
${CMAKE_C_FLAGS}"
UNIQ_CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}"
CACHE STRING "C Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s3 \
${CMAKE_CXX_FLAGS}"
UNIQ_CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}"
CACHE STRING "C++ Compiler Base Flags"
FORCE)
remove_duplicated_flags("--target=xtensa-esp-elf -mcpu=esp32s3 -Xassembler --longcalls \
${CMAKE_ASM_FLAGS}"
UNIQ_CMAKE_ASM_FLAGS)
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}"
CACHE STRING "Assembler Base Flags"
FORCE)
remove_duplicated_flags("-nostartfiles --ld-path=xtensa-esp32s3-elf-clang-ld -z noexecstack \
${CMAKE_EXE_LINKER_FLAGS}"
UNIQ_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_EXE_LINKER_FLAGS}"
CACHE STRING "Linker Base Flags"
FORCE)
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s3-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -0,0 +1,2 @@
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake)

View File

@@ -23,10 +23,10 @@ if(NOT found_clang EQUAL -1)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_LINKER ${_CMAKE_TOOLCHAIN_PREFIX}ld)
set(CMAKE_LINKER ${_CMAKE_TOOLCHAIN_PREFIX}clang-ld)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
set(CMAKE_OBJDUMP ${_CMAKE_TOOLCHAIN_PREFIX}objdump)
set(CMAKE_OBJDUMP ${_CMAKE_TOOLCHAIN_PREFIX}clang-objdump)
else()
set(IDF_TOOLCHAIN "gcc" CACHE STRING "IDF Build Toolchain Type" FORCE)

View File

@@ -59,7 +59,7 @@
hint: "'esp_secure_boot_verify_rsa_signature_block()' has been made private and is no longer available."
-
re: "error: implicit declaration of function '{}'"
re: "error: (implicit declaration of function|use of undeclared identifier) '{}'"
hint: '{0}.h header file is not included by esp_system.h anymore. It shall then be manually included with #include "{0}.h"'
variables:
-

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
# SPDX-FileCopyrightText: 2019-2025 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2019-2026 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import json
import os
@@ -57,6 +57,8 @@ RISCV_ESP_GDB = 'riscv32-esp-elf-gdb'
ESP_ROM_ELFS = 'esp-rom-elfs'
QEMU_RISCV = 'qemu-riscv32'
QEMU_XTENSA = 'qemu-xtensa'
CLANGD = 'esp-clangd'
CLANGD_ARCHIVE = 'clangd'
# Win tools
CMAKE = 'cmake'
NINJA = 'ninja'
@@ -89,6 +91,7 @@ RISCV_ESP_GDB_VERSION = version_dict[RISCV_ESP_GDB]
ESP_ROM_ELFS_VERSION = version_dict[ESP_ROM_ELFS]
QEMU_RISCV_VERSION = version_dict[QEMU_RISCV]
QEMU_XTENSA_VERSION = version_dict[QEMU_XTENSA]
CLANGD_VERSION = version_dict[CLANGD]
# Win tools
CMAKE_VERSION = version_dict[CMAKE]
NINJA_VERSION = version_dict[NINJA]
@@ -377,8 +380,10 @@ class TestUsageUnix(TestUsage):
self.assertIn(f'- {RISCV_ELF_VERSION} (recommended)', output)
self.assertIn(f'* {XTENSA_ELF}:', output)
self.assertIn(f'- {XTENSA_ELF_VERSION} (recommended)', output)
self.assertIn(f'* {CLANGD}:', output)
self.assertIn(f'- {CLANGD_VERSION} (recommended)', output)
required_tools_installed = 7
required_tools_installed = 8
output = self.run_idf_tools_with_action(['install'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -387,6 +392,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_installed(output, RISCV_ESP_GDB, RISCV_ESP_GDB_VERSION)
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -399,6 +405,7 @@ class TestUsageUnix(TestUsage):
XTENSA_ESP_GDB_VERSION,
RISCV_ESP_GDB_VERSION,
ESP_ROM_ELFS_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -416,6 +423,7 @@ class TestUsageUnix(TestUsage):
output,
)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-rom-elfs/{ESP_ROM_ELFS_VERSION}/', output)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-clangd/{CLANGD_VERSION}/esp-clangd/bin', output)
output = self.run_idf_tools_with_action(['list', '--outdated'])
self.assertEqual('', output)
@@ -443,7 +451,7 @@ class TestUsageUnix(TestUsage):
self.assertIn((f'{XTENSA_ELF}: version {XTENSA_ELF_VERSION} is outdated by {new_version}'), output)
def test_tools_for_esp32(self):
required_tools_installed = 5
required_tools_installed = 6
output = self.run_idf_tools_with_action(['install', '--targets=esp32'])
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -452,6 +460,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_not_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
self.assert_tool_not_installed(output, RISCV_ESP_GDB, RISCV_ESP_GDB_VERSION)
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -462,6 +471,7 @@ class TestUsageUnix(TestUsage):
XTENSA_ELF_VERSION,
XTENSA_ESP_GDB_VERSION,
ESP_ROM_ELFS_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -479,9 +489,10 @@ class TestUsageUnix(TestUsage):
output,
)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-rom-elfs/{ESP_ROM_ELFS_VERSION}/', output)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-clangd/{CLANGD_VERSION}/esp-clangd/bin', output)
def test_tools_for_esp32c3(self):
required_tools_installed = 4
required_tools_installed = 5
output = self.run_idf_tools_with_action(['install', '--targets=esp32c3'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -490,6 +501,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_not_installed(output, ESP32ULP, ESP32ULP_VERSION)
self.assert_tool_not_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -507,9 +519,10 @@ class TestUsageUnix(TestUsage):
output,
)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-rom-elfs/{ESP_ROM_ELFS_VERSION}/', output)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-clangd/{CLANGD_VERSION}/esp-clangd/bin', output)
def test_tools_for_esp32s2(self):
required_tools_installed = 6
required_tools_installed = 7
output = self.run_idf_tools_with_action(['install', '--targets=esp32s2'])
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -518,6 +531,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_not_installed(output, RISCV_ESP_GDB, RISCV_ESP_GDB_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -539,9 +553,10 @@ class TestUsageUnix(TestUsage):
output,
)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-rom-elfs/{ESP_ROM_ELFS_VERSION}/', output)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-clangd/{CLANGD_VERSION}/esp-clangd/bin', output)
def test_tools_for_esp32s3(self):
required_tools_installed = 6
required_tools_installed = 7
output = self.run_idf_tools_with_action(['install', '--targets=esp32s3'])
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -550,6 +565,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_not_installed(output, RISCV_ESP_GDB, RISCV_ESP_GDB_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -560,6 +576,7 @@ class TestUsageUnix(TestUsage):
XTENSA_ESP_GDB_VERSION,
RISCV_ESP_GDB_VERSION,
ESP_ROM_ELFS_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -577,9 +594,10 @@ class TestUsageUnix(TestUsage):
output,
)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-rom-elfs/{ESP_ROM_ELFS_VERSION}/', output)
self.assertIn(f'{self.temp_tools_dir}/tools/esp-clangd/{CLANGD_VERSION}/esp-clangd/bin', output)
def test_tools_for_esp32p4(self):
required_tools_installed = 4
required_tools_installed = 5
output = self.run_idf_tools_with_action(['install', '--targets=esp32p4'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -588,6 +606,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_not_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_not_installed(output, ESP32ULP, ESP32ULP_VERSION)
self.assert_tool_not_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertEqual(required_tools_installed, output.count('Done'))
output = self.run_idf_tools_with_action(['check'])
@@ -614,10 +633,11 @@ class TestUsageUnix(TestUsage):
os.path.join(self.temp_tools_dir, 'tools', XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION, XTENSA_ESP_GDB, 'bin'),
output,
)
self.assertIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
# a different test for qemu because of "on_request"
def test_tools_for_qemu_with_required(self):
required_tools_installed = 9
required_tools_installed = 10
output = self.run_idf_tools_with_action(['install', 'required', 'qemu-xtensa', 'qemu-riscv32'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -628,6 +648,7 @@ class TestUsageUnix(TestUsage):
self.assert_tool_installed(output, ESP_ROM_ELFS, ESP_ROM_ELFS_VERSION)
self.assert_tool_installed(output, QEMU_RISCV, QEMU_RISCV_VERSION)
self.assert_tool_installed(output, QEMU_XTENSA, QEMU_XTENSA_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -652,7 +673,8 @@ class TestUsageWin(TestUsage):
self.assertIn(f'- {RISCV_ELF_VERSION} (recommended)', output)
self.assertIn(f'* {XTENSA_ELF}:', output)
self.assertIn(f'- {XTENSA_ELF_VERSION} (recommended)', output)
self.assertIn(f'* {CLANGD}:', output)
self.assertIn(f'- {CLANGD_VERSION} (recommended)', output)
required_tools_installed = 12
output = self.run_idf_tools_with_action(['install'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -667,6 +689,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -684,6 +707,7 @@ class TestUsageWin(TestUsage):
IDF_EXE_VERSION,
CCACHE_VERSION,
DFU_UTIL_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -724,6 +748,7 @@ class TestUsageWin(TestUsage):
self.assertIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
output = self.run_idf_tools_with_action(['list', '--outdated'])
self.assertEqual('', output)
@@ -751,7 +776,7 @@ class TestUsageWin(TestUsage):
self.assertIn((f'{XTENSA_ELF}: version {XTENSA_ELF_VERSION} is outdated by {new_version}'), output)
def test_tools_for_esp32_win(self):
required_tools_installed = 9
required_tools_installed = 10
output = self.run_idf_tools_with_action(['install', '--targets=esp32'])
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -765,6 +790,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_not_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -779,6 +805,7 @@ class TestUsageWin(TestUsage):
NINJA_VERSION,
IDF_EXE_VERSION,
CCACHE_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
self.assertNotIn('version installed in tools directory: ' + DFU_UTIL_VERSION, output)
@@ -828,9 +855,10 @@ class TestUsageWin(TestUsage):
self.assertNotIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertNotIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
def test_tools_for_esp32c3_win(self):
required_tools_installed = 8
required_tools_installed = 9
output = self.run_idf_tools_with_action(['install', '--targets=esp32c3'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -844,6 +872,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_not_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -857,6 +886,7 @@ class TestUsageWin(TestUsage):
NINJA_VERSION,
IDF_EXE_VERSION,
CCACHE_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
self.assertNotIn('version installed in tools directory: ' + DFU_UTIL_VERSION, output)
@@ -900,9 +930,10 @@ class TestUsageWin(TestUsage):
self.assertNotIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertNotIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
def test_tools_for_esp32s2_win(self):
required_tools_installed = 11
required_tools_installed = 12
output = self.run_idf_tools_with_action(['install', '--targets=esp32s2'])
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
@@ -916,6 +947,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -930,6 +962,7 @@ class TestUsageWin(TestUsage):
NINJA_VERSION,
IDF_EXE_VERSION,
CCACHE_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -978,9 +1011,10 @@ class TestUsageWin(TestUsage):
self.assertIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
def test_tools_for_esp32s3_win(self):
required_tools_installed = 11
required_tools_installed = 12
output = self.run_idf_tools_with_action(['install', '--targets=esp32s3'])
print(output)
self.assert_tool_installed(output, XTENSA_ELF, XTENSA_ELF_VERSION, XTENSA_ELF_ARCHIVE_PATTERN)
@@ -995,6 +1029,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))
@@ -1010,6 +1045,7 @@ class TestUsageWin(TestUsage):
NINJA_VERSION,
IDF_EXE_VERSION,
CCACHE_VERSION,
CLANGD_VERSION,
]:
self.assertIn('version installed in tools directory: ' + tool_version, output)
@@ -1058,9 +1094,10 @@ class TestUsageWin(TestUsage):
self.assertIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
def test_tools_for_esp32p4_win(self):
required_tools_installed = 8
required_tools_installed = 9
output = self.run_idf_tools_with_action(['install', '--targets=esp32p4'])
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
self.assert_tool_installed(output, RISCV_ESP_GDB, RISCV_ESP_GDB_VERSION)
@@ -1074,6 +1111,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_not_installed(output, ESP32ULP, ESP32ULP_VERSION)
self.assert_tool_not_installed(output, XTENSA_ESP_GDB, XTENSA_ESP_GDB_VERSION)
self.assert_tool_not_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertEqual(required_tools_installed, output.count('Done'))
output = self.run_idf_tools_with_action(['check'])
@@ -1086,6 +1124,7 @@ class TestUsageWin(TestUsage):
NINJA_VERSION,
IDF_EXE_VERSION,
CCACHE_VERSION,
CLANGD_VERSION,
]:
self.assertIn(f'version installed in tools directory: {tool_version}', output)
@@ -1118,10 +1157,11 @@ class TestUsageWin(TestUsage):
self.assertNotIn(
os.path.join(self.temp_tools_dir, 'tools', DFU_UTIL, DFU_UTIL_VERSION, 'dfu-util-0.11-win64'), output
)
self.assertNotIn(os.path.join(self.temp_tools_dir, 'tools', CLANGD, CLANGD_VERSION, CLANGD, 'bin'), output)
# a different test for qemu because of "on_request"
def test_tools_for_qemu_with_required_win(self):
required_tools_installed = 14
required_tools_installed = 15
output = self.run_idf_tools_with_action(['install', 'required', 'qemu-xtensa', 'qemu-riscv32'])
self.assert_tool_installed(output, OPENOCD, OPENOCD_VERSION)
self.assert_tool_installed(output, RISCV_ELF, RISCV_ELF_VERSION, RISCV_ELF_ARCHIVE_PATTERN)
@@ -1137,6 +1177,7 @@ class TestUsageWin(TestUsage):
self.assert_tool_installed(output, IDF_EXE, IDF_EXE_VERSION)
self.assert_tool_installed(output, CCACHE, CCACHE_VERSION)
self.assert_tool_installed(output, DFU_UTIL, DFU_UTIL_VERSION)
self.assert_tool_installed(output, CLANGD, CLANGD_VERSION, CLANGD_ARCHIVE)
self.assertIn('Destination: {}'.format(os.path.join(self.temp_tools_dir, 'dist')), output)
self.assertEqual(required_tools_installed, output.count('Done'))

View File

@@ -278,36 +278,36 @@
"versions": [
{
"linux-amd64": {
"sha256": "88910c21350c06a521f243304d1a3adbdb78447123b3f8e27493aab75e3cc07f",
"size": 339870496,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-x86_64-linux-gnu.tar.xz"
"sha256": "6e62bf1973b57b5388aad281ce1463e953e70b3d8df74ef4668c70f31fbeda63",
"size": 416927952,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-x86_64-linux-gnu.tar.xz"
},
"linux-arm64": {
"sha256": "41f536fdee22527011d89e416b301648afd9f738d03e1c62f2b27e36ec395c4c",
"size": 319722760,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-aarch64-linux-gnu.tar.xz"
"sha256": "a25e5446ba3aa4bccfafa4328cec240c5b1ae7638978d868c26777c4ceca241b",
"size": 371652712,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-aarch64-linux-gnu.tar.xz"
},
"linux-armhf": {
"sha256": "7b695e88e21ba8a503d504f940dd34a7e4d3e98605c856b6836eec9117a5be94",
"size": 323395316,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-arm-linux-gnueabihf.tar.xz"
"sha256": "dea30c6e3548aea856e047727054b8d9fe91dcf19dbb76ae426951a8bc7d960e",
"size": 383104848,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-arm-linux-gnueabihf.tar.xz"
},
"macos": {
"sha256": "7dca85cd594185d8f9cf76f7e0c3420ee07057c1538b0016d8342677463f9ade",
"size": 303055152,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-x86_64-apple-darwin.tar.xz"
"sha256": "0096cbd1713b226bb403b19547003918943ec3294481d2a69c1596c9597f1ba5",
"size": 362965152,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-x86_64-apple-darwin.tar.xz"
},
"macos-arm64": {
"sha256": "85ff833a326593df376010a2aa18d6aa444f239c1dfed604e13502d00c19db30",
"size": 278008728,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-aarch64-apple-darwin.tar.xz"
"sha256": "b04a345c7b4125400e4de78734cece01147e0cc43b57aeef846ef3b8ff57ef7d",
"size": 340183960,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-aarch64-apple-darwin.tar.xz"
},
"name": "esp-20.1.1_20250829",
"name": "esp-21.1.3_20260408",
"status": "recommended",
"win64": {
"sha256": "f40d7fa0efa399d129b675585355a7ef42a3492188d743e8e089b6038fcc0da1",
"size": 365038604,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/clang-esp-20.1.1_20250829-x86_64-w64-mingw32.tar.xz"
"sha256": "415566ace6f47a9abc302b4ba79776d27668fd3f4e9c0d26861ec4f970323618",
"size": 426383328,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clang-esp-21.1.3_20260408-x86_64-w64-mingw32.tar.xz"
}
}
]
@@ -342,36 +342,36 @@
"versions": [
{
"linux-amd64": {
"sha256": "0128e2a86b262e3edfce026034ede07e2f45732b10c6cb8ac522c8f4c72befd8",
"size": 79625368,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-x86_64-linux-gnu.tar.xz"
"sha256": "c75406f5f0a1fe9692cdf6e6628cbbdf3f25e5721bb58d5e5540ea756d1197f3",
"size": 83267264,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-x86_64-linux-gnu.tar.xz"
},
"linux-arm64": {
"sha256": "cca598861f999bfd408491f4288c2f381b448f9ddbdac2fb4144747329878405",
"size": 72943108,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-aarch64-linux-gnu.tar.xz"
"sha256": "a3d89fcb12b59b7b96a20c05e32a4c7ffe3400f965c153310137ffa02e27ec38",
"size": 72333960,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-aarch64-linux-gnu.tar.xz"
},
"linux-armhf": {
"sha256": "26251ee323f616199fcef7a8ea5ee95a2cda2c1e781196ec002c49aeb99de1db",
"size": 75990564,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-arm-linux-gnueabihf.tar.xz"
"sha256": "79995c0ce185aad89b3f96d097e6ca6c0273cccf47961c5e6c89d6cd494ea0d0",
"size": 75211944,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-arm-linux-gnueabihf.tar.xz"
},
"macos": {
"sha256": "1c8ad98599a58c64396476ae9f66e33f408a2b2ed8ee6f8b2f0a92a5bd6bad84",
"size": 60626132,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-x86_64-apple-darwin.tar.xz"
"sha256": "2e3c51ffa570f7f3ea562686b3fef1a1c07a541096ac291b9bb8bfbac7b82f9c",
"size": 59725364,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-x86_64-apple-darwin.tar.xz"
},
"macos-arm64": {
"sha256": "9582374ed7664aa46c5fc8cedde74b81ec85db9013e7ce85d01e172e92f0ac1f",
"size": 51084140,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-aarch64-apple-darwin.tar.xz"
"sha256": "b524f0f36c6b8897b5dc2a85f66102cc44a2d1dcfdde15fa96796b7c1778b8d3",
"size": 50260232,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-aarch64-apple-darwin.tar.xz"
},
"name": "esp-20.1.1_20250829",
"name": "esp-21.1.3_20260408",
"status": "recommended",
"win64": {
"sha256": "f4346641a38e6a9adad79c429be506b3df26540c50f39ab49dba9ad2c797a805",
"size": 42491440,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-20.1.1_20250829/libs-clang-esp-20.1.1_20250829-x86_64-w64-mingw32.tar.xz"
"sha256": "00cc2ba925b6d807d722635516a1c44ce3e82cb9f01a2ea9385f19e6cb88c7c5",
"size": 43058104,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/libs-clang-esp-21.1.3_20260408-x86_64-w64-mingw32.tar.xz"
}
}
]
@@ -1080,6 +1080,76 @@
}
}
]
},
{
"description": "Clangd for all Espressif chips",
"export_paths": [
[
"esp-clangd",
"bin"
]
],
"export_vars": {},
"info_url": "https://github.com/espressif/llvm-project",
"install": "always",
"license": "Apache-2.0",
"name": "esp-clangd",
"supported_targets": [
"esp32",
"esp32s2",
"esp32s3",
"esp32c3",
"esp32c2",
"esp32c6",
"esp32c5",
"esp32h2",
"esp32p4",
"esp32c61",
"esp32h21",
"esp32h4",
"esp32s31"
],
"version_cmd": [
"clangd",
"--version"
],
"version_regex": "\\([^\\s]+\\s+([0-9a-zA-Z\\.\\-_]+)\\)",
"versions": [
{
"linux-amd64": {
"sha256": "7133e67db271ca96b30ec9f5c34c903eaf5fe10120cfe44f85eb88db7ddbe230",
"size": 17077740,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-x86_64-linux-gnu.tar.xz"
},
"linux-arm64": {
"sha256": "468e6fa03def6bcf0c0469d25b8d8b86212e5a94716d0b3db149f21b77791c54",
"size": 14706612,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-aarch64-linux-gnu.tar.xz"
},
"linux-armhf": {
"sha256": "401a3b08011de2a52af6ed729ddf49f970072047886423b148a3cae980e1ef2d",
"size": 15367384,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-arm-linux-gnueabihf.tar.xz"
},
"macos": {
"sha256": "cb8ac31ea7f8e20da69cea9e1720500571c8f2bae335eb1721b676f7ef3950fe",
"size": 12662520,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-x86_64-apple-darwin.tar.xz"
},
"macos-arm64": {
"sha256": "6dccab9acc9766c90383e9b2585fa1cfabad6125bdc32987a86a02cea598970d",
"size": 10995644,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-aarch64-apple-darwin.tar.xz"
},
"name": "esp-21.1.3_20260408",
"status": "recommended",
"win64": {
"sha256": "1a91c04bb570e0740eede529b20c98c2dd0be6750eb7d91a7226e19f3d88d490",
"size": 14144936,
"url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260408/clangd-esp-21.1.3_20260408-x86_64-w64-mingw32.tar.xz"
}
}
]
}
],
"version": 3