diff options
Diffstat (limited to 'cmake/QtBuild.cmake')
-rw-r--r-- | cmake/QtBuild.cmake | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index a0fefc71d1..e4d501f1f6 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -5406,6 +5406,38 @@ function(qt_apply_rpaths) endif() endfunction() +function(qt_internal_set_up_sanitizer_features) + set(ECM_ENABLE_SANITIZERS "" CACHE STRING "Enable sanitizers") + set_property(CACHE ECM_ENABLE_SANITIZERS PROPERTY STRINGS "address;memory;thread;undefined") + + # If FEATURE_sanitize_foo is set on the command line, make sure to set the appropriate + # ECM_ENABLE_SANITIZERS value. Also the other way around. This basically allows setting either + # the feature or ECM_ENABLE_SANITIZERS directly. + # + # TODO: Decide which one of these should be the source of truth, because reconfiguration with + # different options might not work as expected when ECM_ENABLE_SANITIZERS is provided instead of + # the features. + set(enabled_sanitizer_features "") + foreach(sanitizer_type address memory thread undefined) + if(FEATURE_sanitize_${sanitizer_type}) + list(APPEND enabled_sanitizer_features "${sanitizer_type}") + endif() + endforeach() + if(enabled_sanitizer_features) + set(ECM_ENABLE_SANITIZERS + "${enabled_sanitizer_features}" CACHE STRING "Enable sanitizers" FORCE) + endif() + + if(ECM_ENABLE_SANITIZERS) + foreach(sanitizer_type ${ECM_ENABLE_SANITIZERS}) + message(STATUS "Enabling sanitizer: ${sanitizer_type}") + set(feature_name "FEATURE_sanitize_${sanitizer_type}") + set(${feature_name} "ON" CACHE BOOL "Enable ${sanitizer_type} sanitizer" FORCE) + set(QT_${feature_name} "ON" CACHE BOOL "Enable ${sanitizer_type} sanitizer" FORCE) + endforeach() + endif() +endfunction() + # Compatibility macros that should be removed once all their usages are removed. function(extend_target) qt_extend_target(${ARGV}) |