From 30803a35d54acda19ded88474c205f8954fea5e1 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 5 Sep 2024 16:14:59 +0100 Subject: [PATCH] cmake: decouple FORTIFY_SOURCE check from Debug build type `FORTIFY_SOURCE` should be used if `ENABLE_HARDENING=ON` and optimisations are being used. This should not be coupled to any particular build type, because even if the build type is `Debug`, optimisations might still be in use. Fixes: #30800. --- CMakeLists.txt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ef80ffc6f9..6298cbecca6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -480,18 +480,21 @@ if(ENABLE_HARDENING) try_append_linker_flag("/HIGHENTROPYVA" TARGET hardening_interface) try_append_linker_flag("/NXCOMPAT" TARGET hardening_interface) else() + + # _FORTIFY_SOURCE requires that there is some level of optimization, + # otherwise it does nothing and just creates a compiler warning. try_append_cxx_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3" RESULT_VAR cxx_supports_fortify_source + SOURCE "int main() { + # if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0 + #error + #endif + }" ) if(cxx_supports_fortify_source) - # When the build configuration is Debug, all optimizations are disabled. - # However, _FORTIFY_SOURCE requires that there is some level of optimization, - # otherwise it does nothing and just creates a compiler warning. - # Since _FORTIFY_SOURCE is a no-op without optimizations, do not enable it - # when the build configuration is Debug. target_compile_options(hardening_interface INTERFACE - $<$>:-U_FORTIFY_SOURCE> - $<$>:-D_FORTIFY_SOURCE=3> + -U_FORTIFY_SOURCE + -D_FORTIFY_SOURCE=3 ) endif() unset(cxx_supports_fortify_source)