summaryrefslogtreecommitdiffstats
path: root/cmake/QtBuild.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtBuild.cmake')
-rw-r--r--cmake/QtBuild.cmake32
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})