Some tweaks to sanitizer builds. (#3663)
- Don't restrict to debug builds. To reproduce issues it may be
necessary to run optimized buids, particularly for TSan.
- Support Android, where just -fsanitize=address results in a link error
with lld. See https://github.com/android/ndk/issues/1088
- Fix a typo in cmake messages.
diff --git a/build_tools/cmake/iree_copts.cmake b/build_tools/cmake/iree_copts.cmake
index dd3b3c0..11c5f50 100644
--- a/build_tools/cmake/iree_copts.cmake
+++ b/build_tools/cmake/iree_copts.cmake
@@ -140,48 +140,45 @@
include(CheckCXXCompilerFlag)
if(${IREE_ENABLE_ASAN})
- if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
- message(FATAL_ERROR "IREE_ENABLE_ASAN requires Debug build")
- endif()
set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
check_cxx_compiler_flag(-fsanitize=address COMPILER_SUPPORTS_ASAN)
unset(CMAKE_REQUIRED_FLAGS)
if(${COMPILER_SUPPORTS_ASAN})
- list(APPEND IREE_C_FLAGS_DEBUG_LIST "-fsanitize=address")
- list(APPEND IREE_CXX_FLAGS_DEBUG_LIST "-fsanitize=address")
+ list(APPEND IREE_DEFAULT_COPTS "-fsanitize=address")
+ if(ANDROID)
+ list(APPEND IREE_DEFAULT_LINKOPTS "-fuse-ld=gold")
+ endif()
else()
message(FATAL_ERROR "The compiler does not support address sanitizer "
"or is missing configuration for address sanitizer")
endif()
endif()
if(${IREE_ENABLE_MSAN})
- if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
- message(FATAL_ERROR "IREE_ENABLE_MSAN requires Debug build")
- endif()
set(CMAKE_REQUIRED_FLAGS "-fsanitize=memory")
check_cxx_compiler_flag(-fsanitize=memory COMPILER_SUPPORTS_MSAN)
unset(CMAKE_REQUIRED_FLAGS)
if(${COMPILER_SUPPORTS_MSAN})
- list(APPEND IREE_C_FLAGS_DEBUG_LIST "-fsanitize=memory")
- list(APPEND IREE_CXX_FLAGS_DEBUG_LIST "-fsanitize=memory")
+ list(APPEND IREE_DEFAULT_COPTS "-fsanitize=memory")
+ if(ANDROID)
+ list(APPEND IREE_DEFAULT_LINKOPTS "-fuse-ld=gold")
+ endif()
else()
message(FATAL_ERROR "The compiler does not support memory sanitizer "
- "or is missing configuration for address sanitizer")
+ "or is missing configuration for memory sanitizer")
endif()
endif()
if(${IREE_ENABLE_TSAN})
- if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
- message(FATAL_ERROR "IREE_ENABLE_TSAN requires Debug build")
- endif()
set(CMAKE_REQUIRED_FLAGS "-fsanitize=thread")
check_cxx_compiler_flag(-fsanitize=thread COMPILER_SUPPORTS_TSAN)
unset(CMAKE_REQUIRED_FLAGS)
if(${COMPILER_SUPPORTS_TSAN})
- list(APPEND IREE_C_FLAGS_DEBUG_LIST "-fsanitize=thread")
- list(APPEND IREE_CXX_FLAGS_DEBUG_LIST "-fsanitize=thread")
+ list(APPEND IREE_DEFAULT_COPTS "-fsanitize=thread")
+ if(ANDROID)
+ list(APPEND IREE_DEFAULT_LINKOPTS "-fuse-ld=gold")
+ endif()
else()
message(FATAL_ERROR "The compiler does not support thread sanitizer "
- "or is missing configuration for address sanitizer")
+ "or is missing configuration for thread sanitizer")
endif()
endif()