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 0c757ca5c43..a5f58ed7a2b 100644 --- a/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt +++ b/components/bt/common/ble_log/extension/log_compression/CMakeLists.txt @@ -239,7 +239,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/host/bluedroid/CMakeLists.txt b/components/bt/host/bluedroid/CMakeLists.txt index 6d353315eca..f9b9f3a63ca 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_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/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/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/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/tools.json b/tools/tools.json index b9d5d63420b..17252ab4de3 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": "20fcaef7e0215e5f9df53238ad348ab6697027b3b952d300c5580dba7ac84cc5", + "size": 402998392, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-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": "b18abc4af0943b16ffa4f2b0b42f9470e5caea8e484192f3b1e5602b69fe34a9", + "size": 383335096, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-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": "906a89b0294b5407d3d3bdf4d0da7982d14436e772a7b814a6931c3861bebdec", + "size": 386312220, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-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": "861921ee9cc3b42db84fc855cce56a5007636aa615a8b75000a5406638581f99", + "size": 362775768, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-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": "032a8f7cd45be8a789db4f60a759da226c89cea46bad28f72fef34aaf2a1e20e", + "size": 340139076, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-aarch64-apple-darwin.tar.xz" }, - "name": "esp-20.1.1_20250829", + "name": "esp-21.1.3_20260304", "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": "134138f1e06188cedb900f9394ab6e0ac0b5ab8692dd9bb02af758a46060ef83", + "size": 426854292, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/clang-esp-21.1.3_20260304-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": "0b2afb4e573214f43ea2e87f6e0d779fbbf5d35a3611eb4af8470adf868bf8f2", + "size": 83035456, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-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": "346f8cc307b5d6db7e8cb082e8c5c86948bc0e8a08c1be1659ab27c8f7ddad46", + "size": 71970332, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-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": "b47969e9a8f256568e2aa795f751a979fc8045dd8050b61804d57726fb2b7233", + "size": 75175176, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-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": "531e765e9ed6462813566da097350840fe7376c5c2d4f7fec0e377105e15c93d", + "size": 59697272, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-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": "ac0d5fee8257bf2f85cdeea170cfbe5b5f125b7c7c355c971a6c9ec6610ec36e", + "size": 50230216, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-aarch64-apple-darwin.tar.xz" }, - "name": "esp-20.1.1_20250829", + "name": "esp-21.1.3_20260304", "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": "a0f74c029e1d138252f4c29d0db31a0ddad1648975125fe538cdc52cddcbdb32", + "size": 42904900, + "url": "https://github.com/espressif/llvm-project/releases/download/esp-21.1.3_20260304/libs-clang-esp-21.1.3_20260304-x86_64-w64-mingw32.tar.xz" } } ]