[libcxx-commits] [libcxx] 6dc6c67 - [libcxx][libcxxabi][cmake] Deduplicate sanitizer flags function (#221757)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 9 00:27:30 PDT 2026


Author: David Spickett
Date: 2026-09-09T08:27:26+01:00
New Revision: 6dc6c67b786260486641eb62546c34b48143e131

URL: https://github.com/llvm/llvm-project/commit/6dc6c67b786260486641eb62546c34b48143e131
DIFF: https://github.com/llvm/llvm-project/commit/6dc6c67b786260486641eb62546c34b48143e131.diff

LOG: [libcxx][libcxxabi][cmake] Deduplicate sanitizer flags function (#221757)

While experimenting with flang-rt builds I realised there were two
copies of this function.
We don't need it in flang-rt right now but I figure reducing duplication
is good anyway.

Added: 
    runtimes/cmake/Modules/GetSanitizerFlags.cmake

Modified: 
    libcxx/CMakeLists.txt
    libcxxabi/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index e28bbfaa0605d..8841f5d07aaf6 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -643,50 +643,7 @@ function(cxx_add_module_flags target)
   endif()
 endfunction()
 
-string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
-
-# Sanitizer flags =============================================================
-
-function(get_sanitizer_flags OUT_VAR  USE_SANITIZER)
-  set(SANITIZER_FLAGS)
-  set(USE_SANITIZER "${USE_SANITIZER}")
-  # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC.
-  # But we don't have LLVM_ON_UNIX so checking for MSVC is the best we can do.
-  if (USE_SANITIZER AND NOT MSVC)
-    append_flags_if_supported(SANITIZER_FLAGS "-fno-omit-frame-pointer")
-    append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
-
-    if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND
-            NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
-      append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
-    endif()
-    if (USE_SANITIZER STREQUAL "Address")
-      append_flags(SANITIZER_FLAGS "-fsanitize=address")
-    elseif (USE_SANITIZER STREQUAL "HWAddress")
-      append_flags(SANITIZER_FLAGS "-fsanitize=hwaddress")
-    elseif (USE_SANITIZER MATCHES "Memory(WithOrigins)?")
-      append_flags(SANITIZER_FLAGS -fsanitize=memory)
-      if (USE_SANITIZER STREQUAL "MemoryWithOrigins")
-        append_flags(SANITIZER_FLAGS "-fsanitize-memory-track-origins")
-      endif()
-    elseif (USE_SANITIZER STREQUAL "Undefined")
-      append_flags(SANITIZER_FLAGS "-fsanitize=undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
-    elseif (USE_SANITIZER STREQUAL "Address;Undefined" OR
-            USE_SANITIZER STREQUAL "Undefined;Address")
-      append_flags(SANITIZER_FLAGS "-fsanitize=address,undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
-    elseif (USE_SANITIZER STREQUAL "Thread")
-      append_flags(SANITIZER_FLAGS -fsanitize=thread)
-    elseif (USE_SANITIZER STREQUAL "DataFlow")
-      append_flags(SANITIZER_FLAGS -fsanitize=dataflow)
-    else()
-      message(WARNING "Unsupported value of LLVM_USE_SANITIZER: ${USE_SANITIZER}")
-    endif()
-  elseif(USE_SANITIZER AND MSVC)
-    message(WARNING "LLVM_USE_SANITIZER is not supported on this platform.")
-  endif()
-  set(${OUT_VAR} "${SANITIZER_FLAGS}" PARENT_SCOPE)
-endfunction()
-
+include(GetSanitizerFlags)
 get_sanitizer_flags(SANITIZER_FLAGS "${LLVM_USE_SANITIZER}")
 add_library(cxx-sanitizer-flags INTERFACE)
 target_compile_options(cxx-sanitizer-flags INTERFACE ${SANITIZER_FLAGS})

diff  --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 902d4247fe6f7..6ea3cea30bdbc 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -296,46 +296,7 @@ if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
   string(REPLACE "-stdlib=libstdc++" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 endif()
 
-function(get_sanitizer_flags OUT_VAR  USE_SANITIZER)
-  set(SANITIZER_FLAGS)
-  set(USE_SANITIZER "${USE_SANITIZER}")
-  # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC.
-  # But we don't have LLVM_ON_UNIX so checking for MSVC is the best we can do.
-  if (USE_SANITIZER AND NOT MSVC)
-    append_flags_if_supported(SANITIZER_FLAGS "-fno-omit-frame-pointer")
-    append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
-
-    if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND
-            NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
-      append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
-    endif()
-    if (USE_SANITIZER STREQUAL "Address")
-      append_flags(SANITIZER_FLAGS "-fsanitize=address")
-    elseif (USE_SANITIZER STREQUAL "HWAddress")
-      append_flags(SANITIZER_FLAGS "-fsanitize=hwaddress")
-    elseif (USE_SANITIZER MATCHES "Memory(WithOrigins)?")
-      append_flags(SANITIZER_FLAGS -fsanitize=memory)
-      if (USE_SANITIZER STREQUAL "MemoryWithOrigins")
-        append_flags(SANITIZER_FLAGS "-fsanitize-memory-track-origins")
-      endif()
-    elseif (USE_SANITIZER STREQUAL "Undefined")
-      append_flags(SANITIZER_FLAGS "-fsanitize=undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
-    elseif (USE_SANITIZER STREQUAL "Address;Undefined" OR
-            USE_SANITIZER STREQUAL "Undefined;Address")
-      append_flags(SANITIZER_FLAGS "-fsanitize=address,undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
-    elseif (USE_SANITIZER STREQUAL "Thread")
-      append_flags(SANITIZER_FLAGS -fsanitize=thread)
-    elseif (USE_SANITIZER STREQUAL "DataFlow")
-      append_flags(SANITIZER_FLAGS -fsanitize=dataflow)
-    else()
-      message(WARNING "Unsupported value of LLVM_USE_SANITIZER: ${USE_SANITIZER}")
-    endif()
-  elseif(USE_SANITIZER AND MSVC)
-    message(WARNING "LLVM_USE_SANITIZER is not supported on this platform.")
-  endif()
-  set(${OUT_VAR} "${SANITIZER_FLAGS}" PARENT_SCOPE)
-endfunction()
-
+include(GetSanitizerFlags)
 get_sanitizer_flags(SANITIZER_FLAGS "${LLVM_USE_SANITIZER}")
 list(APPEND LIBCXXABI_COMPILE_FLAGS ${SANITIZER_FLAGS})
 

diff  --git a/runtimes/cmake/Modules/GetSanitizerFlags.cmake b/runtimes/cmake/Modules/GetSanitizerFlags.cmake
new file mode 100644
index 0000000000000..b3ed48d3212be
--- /dev/null
+++ b/runtimes/cmake/Modules/GetSanitizerFlags.cmake
@@ -0,0 +1,40 @@
+function(get_sanitizer_flags OUT_VAR  USE_SANITIZER)
+  set(SANITIZER_FLAGS)
+  set(USE_SANITIZER "${USE_SANITIZER}")
+  string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
+  # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC.
+  # But we don't have LLVM_ON_UNIX so checking for MSVC is the best we can do.
+  if (USE_SANITIZER AND NOT MSVC)
+    append_flags_if_supported(SANITIZER_FLAGS "-fno-omit-frame-pointer")
+    append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
+
+    if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND
+            NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
+      append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only")
+    endif()
+    if (USE_SANITIZER STREQUAL "Address")
+      append_flags(SANITIZER_FLAGS "-fsanitize=address")
+    elseif (USE_SANITIZER STREQUAL "HWAddress")
+      append_flags(SANITIZER_FLAGS "-fsanitize=hwaddress")
+    elseif (USE_SANITIZER MATCHES "Memory(WithOrigins)?")
+      append_flags(SANITIZER_FLAGS -fsanitize=memory)
+      if (USE_SANITIZER STREQUAL "MemoryWithOrigins")
+        append_flags(SANITIZER_FLAGS "-fsanitize-memory-track-origins")
+      endif()
+    elseif (USE_SANITIZER STREQUAL "Undefined")
+      append_flags(SANITIZER_FLAGS "-fsanitize=undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
+    elseif (USE_SANITIZER STREQUAL "Address;Undefined" OR
+            USE_SANITIZER STREQUAL "Undefined;Address")
+      append_flags(SANITIZER_FLAGS "-fsanitize=address,undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all")
+    elseif (USE_SANITIZER STREQUAL "Thread")
+      append_flags(SANITIZER_FLAGS -fsanitize=thread)
+    elseif (USE_SANITIZER STREQUAL "DataFlow")
+      append_flags(SANITIZER_FLAGS -fsanitize=dataflow)
+    else()
+      message(WARNING "Unsupported value of LLVM_USE_SANITIZER: ${USE_SANITIZER}")
+    endif()
+  elseif(USE_SANITIZER AND MSVC)
+    message(WARNING "LLVM_USE_SANITIZER is not supported on this platform.")
+  endif()
+  set(${OUT_VAR} "${SANITIZER_FLAGS}" PARENT_SCOPE)
+endfunction()


        


More information about the libcxx-commits mailing list