diff --git a/CMakeLists.txt b/CMakeLists.txt index 4669a8f3333..c87bc17b38c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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. diff --git a/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt b/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt index 35416088f91..fba9d33cfea 100644 --- a/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt +++ b/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt @@ -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}" diff --git a/components/bt/common/tinycrypt/src/hmac.c b/components/bt/common/tinycrypt/src/hmac.c index 77232434755..1c5ea74b50a 100644 --- a/components/bt/common/tinycrypt/src/hmac.c +++ b/components/bt/common/tinycrypt/src/hmac.c @@ -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); diff --git a/components/bt/host/bluedroid/CMakeLists.txt b/components/bt/host/bluedroid/CMakeLists.txt index f02b1b11bfc..b2e8f1036a1 100644 --- a/components/bt/host/bluedroid/CMakeLists.txt +++ b/components/bt/host/bluedroid/CMakeLists.txt @@ -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() diff --git a/components/esp_coex/CMakeLists.txt b/components/esp_coex/CMakeLists.txt index 252d3402eca..e1c163527bd 100644 --- a/components/esp_coex/CMakeLists.txt +++ b/components/esp_coex/CMakeLists.txt @@ -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) diff --git a/components/esp_hal_gpio/esp32s31/include/hal/gpio_ll.h b/components/esp_hal_gpio/esp32s31/include/hal/gpio_ll.h index 79c97180ac0..983678f57fd 100644 --- a/components/esp_hal_gpio/esp32s31/include/hal/gpio_ll.h +++ b/components/esp_hal_gpio/esp32s31/include/hal/gpio_ll.h @@ -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; } /** diff --git a/components/esp_hw_support/CMakeLists.txt b/components/esp_hw_support/CMakeLists.txt index 1802f717e84..422e215c425 100644 --- a/components/esp_hw_support/CMakeLists.txt +++ b/components/esp_hw_support/CMakeLists.txt @@ -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) diff --git a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu.c index f8d82367065..b78bc5d1c26 100644 --- a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu.c +++ b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu.c @@ -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]; diff --git a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_dynamic.c b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_dynamic.c index b5de6b40508..441d6f54762 100644 --- a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_dynamic.c +++ b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_dynamic.c @@ -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) { diff --git a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_retention.h b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_retention.h index 7b4e6bfaee3..e7e14f8333a 100644 --- a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_retention.h +++ b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_retention.h @@ -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 diff --git a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_static.c b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_static.c index a07461ce7f8..cf6ef359fd6 100644 --- a/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_static.c +++ b/components/esp_hw_support/lowpower/port/esp32h4/sleep_cpu_static.c @@ -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))); diff --git a/components/esp_hw_support/lowpower/port/esp32p4/p4_rev3_mspi_workaround.S b/components/esp_hw_support/lowpower/port/esp32p4/p4_rev3_mspi_workaround.S index 64a105929d2..14dd5143978 100644 --- a/components/esp_hw_support/lowpower/port/esp32p4/p4_rev3_mspi_workaround.S +++ b/components/esp_hw_support/lowpower/port/esp32p4/p4_rev3_mspi_workaround.S @@ -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) diff --git a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c index 577ad9a53a3..b278b24f629 100644 --- a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c +++ b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c @@ -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]; diff --git a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_dynamic.c b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_dynamic.c index beff8bce7b6..9e884c544b1 100644 --- a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_dynamic.c +++ b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_dynamic.c @@ -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) { diff --git a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_retention.h b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_retention.h index 78d3ae2cf71..b8e069dbb5e 100644 --- a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_retention.h +++ b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_retention.h @@ -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 diff --git a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_static.c b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_static.c index 491ff21294a..f555718ed69 100644 --- a/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_static.c +++ b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_static.c @@ -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))); diff --git a/components/esp_libc/CMakeLists.txt b/components/esp_libc/CMakeLists.txt index 5c9462ca516..5f3beec8a04 100644 --- a/components/esp_libc/CMakeLists.txt +++ b/components/esp_libc/CMakeLists.txt @@ -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} diff --git a/components/esp_system/ld/ld.flash.sections b/components/esp_system/ld/ld.flash.sections index 8d06bde52ab..22cc9e2ae47 100644 --- a/components/esp_system/ld/ld.flash.sections +++ b/components/esp_system/ld/ld.flash.sections @@ -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)) diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index 9180a79bd61..3e673cae6cd 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -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) diff --git a/components/mbedtls/CMakeLists.txt b/components/mbedtls/CMakeLists.txt index 6d5c314338e..fffeec93aab 100644 --- a/components/mbedtls/CMakeLists.txt +++ b/components/mbedtls/CMakeLists.txt @@ -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. diff --git a/components/soc/project_include.cmake b/components/soc/project_include.cmake index 34b1059d4d3..145e8e8e156 100644 --- a/components/soc/project_include.cmake +++ b/components/soc/project_include.cmake @@ -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() diff --git a/docs/en/api-guides/tools/idf-tools-notes.inc b/docs/en/api-guides/tools/idf-tools-notes.inc index 7baaca01a99..37a2b631c22 100644 --- a/docs/en/api-guides/tools/idf-tools-notes.inc +++ b/docs/en/api-guides/tools/idf-tools-notes.inc @@ -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 --- diff --git a/docs/zh_CN/api-guides/tools/idf-tools-notes.inc b/docs/zh_CN/api-guides/tools/idf-tools-notes.inc index 73582b6f988..da663966cc4 100644 --- a/docs/zh_CN/api-guides/tools/idf-tools-notes.inc +++ b/docs/zh_CN/api-guides/tools/idf-tools-notes.inc @@ -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 diff --git a/examples/cxx/rtti/main/CMakeLists.txt b/examples/cxx/rtti/main/CMakeLists.txt index ee808f50804..90ab1580f83 100644 --- a/examples/cxx/rtti/main/CMakeLists.txt +++ b/examples/cxx/rtti/main/CMakeLists.txt @@ -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() diff --git a/tools/ci/ignore_build_warnings.txt b/tools/ci/ignore_build_warnings.txt index 0b77e1a5f28..7dea2e38e2e 100644 --- a/tools/ci/ignore_build_warnings.txt +++ b/tools/ci/ignore_build_warnings.txt @@ -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 diff --git a/tools/cmake/toolchain-clang-esp32.cmake b/tools/cmake/toolchain-clang-esp32.cmake index 698b7e09042..8c1e461e2e4 100644 --- a/tools/cmake/toolchain-clang-esp32.cmake +++ b/tools/cmake/toolchain-clang-esp32.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32c2.cmake b/tools/cmake/toolchain-clang-esp32c2.cmake index 3b6755d05b7..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32c2.cmake +++ b/tools/cmake/toolchain-clang-esp32c2.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32c3.cmake b/tools/cmake/toolchain-clang-esp32c3.cmake index 3b6755d05b7..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32c3.cmake +++ b/tools/cmake/toolchain-clang-esp32c3.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32c5.cmake b/tools/cmake/toolchain-clang-esp32c5.cmake index a5138edf6fe..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32c5.cmake +++ b/tools/cmake/toolchain-clang-esp32c5.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32c6.cmake b/tools/cmake/toolchain-clang-esp32c6.cmake index a5138edf6fe..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32c6.cmake +++ b/tools/cmake/toolchain-clang-esp32c6.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32c61.cmake b/tools/cmake/toolchain-clang-esp32c61.cmake index a5138edf6fe..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32c61.cmake +++ b/tools/cmake/toolchain-clang-esp32c61.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32h2.cmake b/tools/cmake/toolchain-clang-esp32h2.cmake index 3b6755d05b7..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32h2.cmake +++ b/tools/cmake/toolchain-clang-esp32h2.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32h21.cmake b/tools/cmake/toolchain-clang-esp32h21.cmake new file mode 100644 index 00000000000..9833188d7db --- /dev/null +++ b/tools/cmake/toolchain-clang-esp32h21.cmake @@ -0,0 +1,2 @@ +set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-) +include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake) diff --git a/tools/cmake/toolchain-clang-esp32h4.cmake b/tools/cmake/toolchain-clang-esp32h4.cmake index 5a5a707e97a..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32h4.cmake +++ b/tools/cmake/toolchain-clang-esp32h4.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32p4.cmake b/tools/cmake/toolchain-clang-esp32p4.cmake index c88781ae19b..9833188d7db 100644 --- a/tools/cmake/toolchain-clang-esp32p4.cmake +++ b/tools/cmake/toolchain-clang-esp32p4.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32s2.cmake b/tools/cmake/toolchain-clang-esp32s2.cmake index 2a92a1657e5..74922e28dd4 100644 --- a/tools/cmake/toolchain-clang-esp32s2.cmake +++ b/tools/cmake/toolchain-clang-esp32s2.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32s3.cmake b/tools/cmake/toolchain-clang-esp32s3.cmake index 2941e7c6a94..2deb82c2aca 100644 --- a/tools/cmake/toolchain-clang-esp32s3.cmake +++ b/tools/cmake/toolchain-clang-esp32s3.cmake @@ -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) diff --git a/tools/cmake/toolchain-clang-esp32s31.cmake b/tools/cmake/toolchain-clang-esp32s31.cmake new file mode 100644 index 00000000000..9833188d7db --- /dev/null +++ b/tools/cmake/toolchain-clang-esp32s31.cmake @@ -0,0 +1,2 @@ +set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-) +include($ENV{IDF_PATH}/tools/cmake/toolchain.cmake) diff --git a/tools/cmake/toolchain.cmake b/tools/cmake/toolchain.cmake index 2d0d9b33d40..d31f276affe 100644 --- a/tools/cmake/toolchain.cmake +++ b/tools/cmake/toolchain.cmake @@ -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) diff --git a/tools/idf_py_actions/hints.yml b/tools/idf_py_actions/hints.yml index 3cdcd17f101..94cc8b37b43 100644 --- a/tools/idf_py_actions/hints.yml +++ b/tools/idf_py_actions/hints.yml @@ -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: - diff --git a/tools/test_idf_tools/test_idf_tools.py b/tools/test_idf_tools/test_idf_tools.py index 6fd848a9ce5..bce1276151b 100755 --- a/tools/test_idf_tools/test_idf_tools.py +++ b/tools/test_idf_tools/test_idf_tools.py @@ -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')) diff --git a/tools/tools.json b/tools/tools.json index b9d5d63420b..f310054bf30 100644 --- a/tools/tools.json +++ b/tools/tools.json @@ -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