From 9bc8400cf7fa94c2a40d21871d4c3908aa7436bb Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 26 Jul 2024 13:38:43 +0100 Subject: [PATCH 1/3] fixup! cmake: Add `TryAppendCXXFlags` module --- cmake/module/TryAppendCXXFlags.cmake | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmake/module/TryAppendCXXFlags.cmake b/cmake/module/TryAppendCXXFlags.cmake index e464f99c490db..ddf850854c52f 100644 --- a/cmake/module/TryAppendCXXFlags.cmake +++ b/cmake/module/TryAppendCXXFlags.cmake @@ -52,7 +52,10 @@ function(try_append_cxx_flags flags) "IF_CHECK_PASSED;IF_CHECK_FAILED" # multi_value_keywords ) - string(MAKE_C_IDENTIFIER "${flags}" result) + set(flags_as_string "${flags}") + separate_arguments(flags) + + string(MAKE_C_IDENTIFIER "${flags_as_string}" result) string(TOUPPER "${result}" result) string(PREPEND result CXX_SUPPORTS_) @@ -66,7 +69,7 @@ function(try_append_cxx_flags flags) # This avoids running a linker. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) - set(CMAKE_REQUIRED_FLAGS "${flags} ${working_compiler_werror_flag}") + set(CMAKE_REQUIRED_FLAGS "${flags_as_string} ${working_compiler_werror_flag}") check_cxx_source_compiles("${source}" ${result}) if(${result}) @@ -82,7 +85,7 @@ function(try_append_cxx_flags flags) target_compile_options(${TACXXF_TARGET} INTERFACE ${flags}) endif() if(DEFINED TACXXF_VAR) - string(STRIP "${${TACXXF_VAR}} ${flags}" ${TACXXF_VAR}) + string(STRIP "${${TACXXF_VAR}} ${flags_as_string}" ${TACXXF_VAR}) endif() endif() elseif(DEFINED TACXXF_IF_CHECK_FAILED) @@ -108,7 +111,7 @@ function(try_append_cxx_flags flags) # This forces running a linker. set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) - set(CMAKE_REQUIRED_FLAGS "${flags} ${working_linker_werror_flag}") + set(CMAKE_REQUIRED_FLAGS "${flags_as_string} ${working_linker_werror_flag}") check_cxx_source_compiles("${source}" ${result}) if(${result}) @@ -122,7 +125,7 @@ function(try_append_cxx_flags flags) endif() endif() else() - message(WARNING "The ${flags} fail(s) to link.") + message(WARNING "'${flags_as_string}' fail(s) to link.") endif() endfunction() From ca8a1112d974b422a72c954bfb9c4e455e52715f Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 26 Jul 2024 13:10:48 +0100 Subject: [PATCH 2/3] fixup! cmake: Add compiler diagnostic flags --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b02d75888be4c..52ff481c75fd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -413,7 +413,7 @@ else() try_append_cxx_flags("-Wextra" TARGET warn_interface SKIP_LINK) try_append_cxx_flags("-Wgnu" TARGET warn_interface SKIP_LINK) # Some compilers will ignore -Wformat-security without -Wformat, so just combine the two here. - try_append_cxx_flags("-Wformat;-Wformat-security" TARGET warn_interface SKIP_LINK) + try_append_cxx_flags("-Wformat -Wformat-security" TARGET warn_interface SKIP_LINK) try_append_cxx_flags("-Wvla" TARGET warn_interface SKIP_LINK) try_append_cxx_flags("-Wshadow-field" TARGET warn_interface SKIP_LINK) try_append_cxx_flags("-Wthread-safety" TARGET warn_interface SKIP_LINK) From 634b3c7d58abf080783590cf384f0ba47d89de84 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:02:23 +0100 Subject: [PATCH 3/3] fixup! cmake: Add `TryAppendCXXFlags` module Avoid skipping checks for linking due to caching of the `result` variable. --- cmake/module/TryAppendCXXFlags.cmake | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/cmake/module/TryAppendCXXFlags.cmake b/cmake/module/TryAppendCXXFlags.cmake index ddf850854c52f..8df52e01a7af0 100644 --- a/cmake/module/TryAppendCXXFlags.cmake +++ b/cmake/module/TryAppendCXXFlags.cmake @@ -55,24 +55,24 @@ function(try_append_cxx_flags flags) set(flags_as_string "${flags}") separate_arguments(flags) - string(MAKE_C_IDENTIFIER "${flags_as_string}" result) - string(TOUPPER "${result}" result) - string(PREPEND result CXX_SUPPORTS_) + string(MAKE_C_IDENTIFIER "${flags_as_string}" id_string) + string(TOUPPER "${id_string}" id_string) set(source "int main() { return 0; }") if(DEFINED TACXXF_SOURCE AND NOT TACXXF_SOURCE STREQUAL source) set(source "${TACXXF_SOURCE}") string(SHA256 source_hash "${source}") string(SUBSTRING ${source_hash} 0 4 source_hash_head) - string(APPEND result _${source_hash_head}) + string(APPEND id_string _${source_hash_head}) endif() # This avoids running a linker. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) set(CMAKE_REQUIRED_FLAGS "${flags_as_string} ${working_compiler_werror_flag}") - check_cxx_source_compiles("${source}" ${result}) + set(compiler_result CXX_SUPPORTS_${id_string}) + check_cxx_source_compiles("${source}" ${compiler_result}) - if(${result}) + if(${compiler_result}) if(DEFINED TACXXF_IF_CHECK_PASSED) if(DEFINED TACXXF_TARGET) target_compile_options(${TACXXF_TARGET} INTERFACE ${TACXXF_IF_CHECK_PASSED}) @@ -102,19 +102,20 @@ function(try_append_cxx_flags flags) endif() if(DEFINED TACXXF_RESULT_VAR) - set(${TACXXF_RESULT_VAR} "${${result}}" PARENT_SCOPE) + set(${TACXXF_RESULT_VAR} "${${compiler_result}}" PARENT_SCOPE) endif() - if(NOT ${result} OR TACXXF_SKIP_LINK) + if(NOT ${compiler_result} OR TACXXF_SKIP_LINK) return() endif() # This forces running a linker. set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) set(CMAKE_REQUIRED_FLAGS "${flags_as_string} ${working_linker_werror_flag}") - check_cxx_source_compiles("${source}" ${result}) + set(linker_result LINKER_SUPPORTS_${id_string}) + check_cxx_source_compiles("${source}" ${linker_result}) - if(${result}) + if(${linker_result}) if(DEFINED TACXXF_IF_CHECK_PASSED) if(DEFINED TACXXF_TARGET) target_link_options(${TACXXF_TARGET} INTERFACE ${TACXXF_IF_CHECK_PASSED})