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