@@ -259,6 +259,49 @@ if (CXX_SUPPORTS_NOSTDINCXX_FLAG)
259259 string (REPLACE "-stdlib=libstdc++" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
260260endif ()
261261
262+ function (get_sanitizer_flags OUT_VAR USE_SANITIZER)
263+ set (SANITIZER_FLAGS)
264+ set (USE_SANITIZER "${USE_SANITIZER} " )
265+ # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC.
266+ # But we don't have LLVM_ON_UNIX so checking for MSVC is the best we can do.
267+ if (USE_SANITIZER AND NOT MSVC )
268+ append_flags_if_supported(SANITIZER_FLAGS "-fno-omit-frame-pointer" )
269+ append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only" )
270+
271+ if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND
272+ NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO" )
273+ append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only" )
274+ endif ()
275+ if (USE_SANITIZER STREQUAL "Address" )
276+ append_flags(SANITIZER_FLAGS "-fsanitize=address" )
277+ elseif (USE_SANITIZER STREQUAL "HWAddress" )
278+ append_flags(SANITIZER_FLAGS "-fsanitize=hwaddress" )
279+ elseif (USE_SANITIZER MATCHES "Memory(WithOrigins)?" )
280+ append_flags(SANITIZER_FLAGS -fsanitize=memory)
281+ if (USE_SANITIZER STREQUAL "MemoryWithOrigins" )
282+ append_flags(SANITIZER_FLAGS "-fsanitize-memory-track-origins" )
283+ endif ()
284+ elseif (USE_SANITIZER STREQUAL "Undefined" )
285+ append_flags(SANITIZER_FLAGS "-fsanitize=undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all" )
286+ elseif (USE_SANITIZER STREQUAL "Address;Undefined" OR
287+ USE_SANITIZER STREQUAL "Undefined;Address" )
288+ append_flags(SANITIZER_FLAGS "-fsanitize=address,undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all" )
289+ elseif (USE_SANITIZER STREQUAL "Thread" )
290+ append_flags(SANITIZER_FLAGS -fsanitize=thread)
291+ elseif (USE_SANITIZER STREQUAL "DataFlow" )
292+ append_flags(SANITIZER_FLAGS -fsanitize=dataflow)
293+ else ()
294+ message (WARNING "Unsupported value of LLVM_USE_SANITIZER: ${USE_SANITIZER} " )
295+ endif ()
296+ elseif (USE_SANITIZER AND MSVC )
297+ message (WARNING "LLVM_USE_SANITIZER is not supported on this platform." )
298+ endif ()
299+ set (${OUT_VAR} "${SANITIZER_FLAGS} " PARENT_SCOPE)
300+ endfunction ()
301+
302+ get_sanitizer_flags(SANITIZER_FLAGS "${LLVM_USE_SANITIZER} " )
303+ list (APPEND LIBCXXABI_COMPILE_FLAGS ${SANITIZER_FLAGS} )
304+
262305# Let the library headers know they are currently being used to build the
263306# library.
264307add_definitions (-D_LIBCXXABI_BUILDING_LIBRARY)
0 commit comments