From 48b1594238a743b632ae9a9574effe41ca48e040 Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Mon, 20 Oct 2025 13:29:32 +0200 Subject: [PATCH] feat(toolchain): more remove_duplicated_flags function to separate file Currently, the toolchain CMake files use the remove_duplicated_flags function from utilities.cmake. The cmakev2 implementation also includes this function for backward compatibility. Move the remove_duplicated_flags function to a separate file, deduplicate_flags.cmake, so it can be shared between cmakev1 and cmakev2. Signed-off-by: Frantisek Hrbata --- tools/cmake/deduplicate_flags.cmake | 15 +++++++++++ tools/cmake/toolchain-clang-esp32.cmake | 2 +- tools/cmake/toolchain-clang-esp32c2.cmake | 2 +- tools/cmake/toolchain-clang-esp32c3.cmake | 2 +- tools/cmake/toolchain-clang-esp32c5.cmake | 2 +- tools/cmake/toolchain-clang-esp32c6.cmake | 2 +- tools/cmake/toolchain-clang-esp32c61.cmake | 2 +- tools/cmake/toolchain-clang-esp32h2.cmake | 2 +- tools/cmake/toolchain-clang-esp32h4.cmake | 2 +- tools/cmake/toolchain-clang-esp32p4.cmake | 2 +- tools/cmake/toolchain-clang-esp32s2.cmake | 2 +- tools/cmake/toolchain-clang-esp32s3.cmake | 2 +- tools/cmake/toolchain-esp32.cmake | 2 +- tools/cmake/toolchain-esp32c2.cmake | 2 +- tools/cmake/toolchain-esp32c3.cmake | 2 +- tools/cmake/toolchain-esp32c5.cmake | 2 +- tools/cmake/toolchain-esp32c6.cmake | 2 +- tools/cmake/toolchain-esp32c61.cmake | 2 +- tools/cmake/toolchain-esp32h2.cmake | 2 +- tools/cmake/toolchain-esp32h21.cmake | 2 +- tools/cmake/toolchain-esp32h4.cmake | 2 +- tools/cmake/toolchain-esp32p4.cmake | 2 +- tools/cmake/toolchain-esp32s2.cmake | 2 +- tools/cmake/toolchain-esp32s3.cmake | 2 +- tools/cmake/utilities.cmake | 16 ++--------- tools/cmakev2/utilities.cmake | 31 +++++----------------- 26 files changed, 46 insertions(+), 62 deletions(-) create mode 100644 tools/cmake/deduplicate_flags.cmake diff --git a/tools/cmake/deduplicate_flags.cmake b/tools/cmake/deduplicate_flags.cmake new file mode 100644 index 00000000000..7398f2c7432 --- /dev/null +++ b/tools/cmake/deduplicate_flags.cmake @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +# Remove duplicates from a string containing compilation flags +function(remove_duplicated_flags FLAGS UNIQFLAGS) + set(FLAGS_LIST "${FLAGS}") + # Convert the given flags, as a string, into a CMake list type + separate_arguments(FLAGS_LIST) + # Remove all the duplicated flags + list(REMOVE_DUPLICATES FLAGS_LIST) + # Convert the list back to a string + string(REPLACE ";" " " FLAGS_LIST "${FLAGS_LIST}") + # Return that string to the caller + set(${UNIQFLAGS} "${FLAGS_LIST}" PARENT_SCOPE) +endfunction() diff --git a/tools/cmake/toolchain-clang-esp32.cmake b/tools/cmake/toolchain-clang-esp32.cmake index edbee79c6cb..698b7e09042 100644 --- a/tools/cmake/toolchain-clang-esp32.cmake +++ b/tools/cmake/toolchain-clang-esp32.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32c2.cmake b/tools/cmake/toolchain-clang-esp32c2.cmake index b23084a05cd..3b6755d05b7 100644 --- a/tools/cmake/toolchain-clang-esp32c2.cmake +++ b/tools/cmake/toolchain-clang-esp32c2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32c3.cmake b/tools/cmake/toolchain-clang-esp32c3.cmake index b23084a05cd..3b6755d05b7 100644 --- a/tools/cmake/toolchain-clang-esp32c3.cmake +++ b/tools/cmake/toolchain-clang-esp32c3.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32c5.cmake b/tools/cmake/toolchain-clang-esp32c5.cmake index 16c004ab7f1..a5138edf6fe 100644 --- a/tools/cmake/toolchain-clang-esp32c5.cmake +++ b/tools/cmake/toolchain-clang-esp32c5.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32c6.cmake b/tools/cmake/toolchain-clang-esp32c6.cmake index 16c004ab7f1..a5138edf6fe 100644 --- a/tools/cmake/toolchain-clang-esp32c6.cmake +++ b/tools/cmake/toolchain-clang-esp32c6.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32c61.cmake b/tools/cmake/toolchain-clang-esp32c61.cmake index 16c004ab7f1..a5138edf6fe 100644 --- a/tools/cmake/toolchain-clang-esp32c61.cmake +++ b/tools/cmake/toolchain-clang-esp32c61.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32h2.cmake b/tools/cmake/toolchain-clang-esp32h2.cmake index b23084a05cd..3b6755d05b7 100644 --- a/tools/cmake/toolchain-clang-esp32h2.cmake +++ b/tools/cmake/toolchain-clang-esp32h2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32h4.cmake b/tools/cmake/toolchain-clang-esp32h4.cmake index 3da3860bfbb..5a5a707e97a 100644 --- a/tools/cmake/toolchain-clang-esp32h4.cmake +++ b/tools/cmake/toolchain-clang-esp32h4.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32p4.cmake b/tools/cmake/toolchain-clang-esp32p4.cmake index 69949aa38a7..c88781ae19b 100644 --- a/tools/cmake/toolchain-clang-esp32p4.cmake +++ b/tools/cmake/toolchain-clang-esp32p4.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32s2.cmake b/tools/cmake/toolchain-clang-esp32s2.cmake index 68fcec9e943..2a92a1657e5 100644 --- a/tools/cmake/toolchain-clang-esp32s2.cmake +++ b/tools/cmake/toolchain-clang-esp32s2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-clang-esp32s3.cmake b/tools/cmake/toolchain-clang-esp32s3.cmake index 2c3f4a0ac81..2941e7c6a94 100644 --- a/tools/cmake/toolchain-clang-esp32s3.cmake +++ b/tools/cmake/toolchain-clang-esp32s3.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32.cmake b/tools/cmake/toolchain-esp32.cmake index 6b885c51630..afec940e257 100644 --- a/tools/cmake/toolchain-esp32.cmake +++ b/tools/cmake/toolchain-esp32.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32c2.cmake b/tools/cmake/toolchain-esp32c2.cmake index a1bb1453947..4f21adc72ee 100644 --- a/tools/cmake/toolchain-esp32c2.cmake +++ b/tools/cmake/toolchain-esp32c2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32c3.cmake b/tools/cmake/toolchain-esp32c3.cmake index a1bb1453947..4f21adc72ee 100644 --- a/tools/cmake/toolchain-esp32c3.cmake +++ b/tools/cmake/toolchain-esp32c3.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32c5.cmake b/tools/cmake/toolchain-esp32c5.cmake index f894ff3492c..e84b261e681 100644 --- a/tools/cmake/toolchain-esp32c5.cmake +++ b/tools/cmake/toolchain-esp32c5.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32c6.cmake b/tools/cmake/toolchain-esp32c6.cmake index 9baa6ed890e..ccfa5a60ed1 100644 --- a/tools/cmake/toolchain-esp32c6.cmake +++ b/tools/cmake/toolchain-esp32c6.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32c61.cmake b/tools/cmake/toolchain-esp32c61.cmake index f894ff3492c..e84b261e681 100644 --- a/tools/cmake/toolchain-esp32c61.cmake +++ b/tools/cmake/toolchain-esp32c61.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32h2.cmake b/tools/cmake/toolchain-esp32h2.cmake index 9baa6ed890e..ccfa5a60ed1 100644 --- a/tools/cmake/toolchain-esp32h2.cmake +++ b/tools/cmake/toolchain-esp32h2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32h21.cmake b/tools/cmake/toolchain-esp32h21.cmake index 9baa6ed890e..ccfa5a60ed1 100644 --- a/tools/cmake/toolchain-esp32h21.cmake +++ b/tools/cmake/toolchain-esp32h21.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32h4.cmake b/tools/cmake/toolchain-esp32h4.cmake index 9341e5b49b3..c4937c4ab5a 100644 --- a/tools/cmake/toolchain-esp32h4.cmake +++ b/tools/cmake/toolchain-esp32h4.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32p4.cmake b/tools/cmake/toolchain-esp32p4.cmake index 500e44520ed..33751e1af4b 100644 --- a/tools/cmake/toolchain-esp32p4.cmake +++ b/tools/cmake/toolchain-esp32p4.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32s2.cmake b/tools/cmake/toolchain-esp32s2.cmake index 9f061a35e55..b0763bde62b 100644 --- a/tools/cmake/toolchain-esp32s2.cmake +++ b/tools/cmake/toolchain-esp32s2.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/toolchain-esp32s3.cmake b/tools/cmake/toolchain-esp32s3.cmake index 238d6992df4..50dd2d684a0 100644 --- a/tools/cmake/toolchain-esp32s3.cmake +++ b/tools/cmake/toolchain-esp32s3.cmake @@ -1,4 +1,4 @@ -include($ENV{IDF_PATH}/tools/cmake${IDF_BUILD_VER_TAG}/utilities.cmake) +include($ENV{IDF_PATH}/tools/cmake/deduplicate_flags.cmake) set(CMAKE_SYSTEM_NAME Generic) diff --git a/tools/cmake/utilities.cmake b/tools/cmake/utilities.cmake index dd244171eca..ed0e9002d98 100644 --- a/tools/cmake/utilities.cmake +++ b/tools/cmake/utilities.cmake @@ -1,3 +1,5 @@ +include(${CMAKE_CURRENT_LIST_DIR}/deduplicate_flags.cmake) + # set_default # # Define a variable to a default value if otherwise unset. @@ -457,17 +459,3 @@ function(add_deprecated_target_alias old_target new_target) ) add_dependencies(${old_target} ${new_target}) endfunction() - - -# Remove duplicates from a string containing compilation flags -function(remove_duplicated_flags FLAGS UNIQFLAGS) - set(FLAGS_LIST "${FLAGS}") - # Convert the given flags, as a string, into a CMake list type - separate_arguments(FLAGS_LIST) - # Remove all the duplicated flags - list(REMOVE_DUPLICATES FLAGS_LIST) - # Convert the list back to a string - string(REPLACE ";" " " FLAGS_LIST "${FLAGS_LIST}") - # Return that string to the caller - set(${UNIQFLAGS} "${FLAGS_LIST}" PARENT_SCOPE) -endfunction() diff --git a/tools/cmakev2/utilities.cmake b/tools/cmakev2/utilities.cmake index 131f58d6c70..a58d188e9a8 100644 --- a/tools/cmakev2/utilities.cmake +++ b/tools/cmakev2/utilities.cmake @@ -1,6 +1,12 @@ # SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 +# To maintain backward compatibility for those who might expect +# remove_duplicated_flags to be available when utilities.cmake is included, +# we ensure its presence. The remove_duplicated_flags function is primarily +# used by toolchain CMake files. +include(${CMAKE_CURRENT_LIST_DIR}/../cmake/deduplicate_flags.cmake) + # Note: CMake does not support nested lists. The functions idf_die, idf_warn, # idf_msg, and idf_dbg use ARGV# values because this is the only way to prevent # arguments from being altered by CMake. ARGV and ARGN contain a flattened list @@ -606,31 +612,6 @@ function(__get_compile_options) set(${ARG_OUTPUT} "${compile_options}" PARENT_SCOPE) endfunction() -#[[ - remove_duplicated_flags( ) - - *flags[in]* - - Input string with compilation flags. - - *uniq_flags[out]* - - Output string with unified compilation flags. - - Remove duplicate entries from a string of compilation flags. -#]] -function(remove_duplicated_flags FLAGS UNIQFLAGS) - set(FLAGS_LIST "${FLAGS}") - # Convert the given flags, as a string, into a CMake list type - separate_arguments(FLAGS_LIST) - # Remove all the duplicated flags - list(REMOVE_DUPLICATES FLAGS_LIST) - # Convert the list back to a string - string(REPLACE ";" " " FLAGS_LIST "${FLAGS_LIST}") - # Return that string to the caller - set(${UNIQFLAGS} "${FLAGS_LIST}" PARENT_SCOPE) -endfunction() - #[[ spaces2list()