Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnkit <ankitm>2020-09-07 21:47:17 +0300
committerAnkit Meel <ankitjmeel@gmail.com>2020-09-07 21:49:07 +0300
commit40dcf686f04f7db8110f9c85621eb8a0bd764080 (patch)
tree37ca00ad76f3d8aaa3c49b9587578507249254de /CMakeLists.txt
parentde21ab418d69ca82a07ec7c836b1deca09bbd57f (diff)
Support ASan library on macOS for all generators.
This change allows macOS developers to use `WITH_COMPILER_ASAN` with every generator. `CMAKE_C_IMPLICIT_LINK_DIRECTORIES` on macOS points to `Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib` which is not where the Sanitizer libraries are. To link the library, rpath could be used but that seems complex, so linker flags are passed as the documentation says. [1] If users have `ASAN_OPTIONS=detect_leaks=1` in their environment variables, it should be removed to avoid a feature-unsupported error while compiling. [1]: http://clang.llvm.org/docs/AddressSanitizer.html#usage Reviewed By: brecht Differential Revision: https://developer.blender.org/D8817
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt44
1 files changed, 37 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 76d2d578dc3..f72ccd857b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -510,9 +510,21 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
-fno-sanitize=alignment \
")
- if(NOT MSVC) # not all sanitizers are supported with clang-cl, these two however are very vocal about it
- set(_asan_defaults "${_asan_defaults} -fsanitize=leak -fsanitize=object-size" )
+ if(MSVC)
+ # clang-cl doesn't support all sanitizers, but leak and object-size give errors/warnings.
+ set(_asan_defaults "${_asan_defaults}")
+ elseif(APPLE)
+ # AppleClang doesn't support all sanitizers, but leak gives error.
+ if(CMAKE_BUILD_TYPE MATCHES "Debug")
+ # Silence the warning that object-size is not effective in -O0.
+ set(_asan_defaults "${_asan_defaults}")
+ else()
+ set(_asan_defaults "${_asan_defaults} -fsanitize=object-size")
+ endif()
+ else()
+ set(_asan_defaults "${_asan_defaults} -fsanitize=leak -fsanitize=object-size")
endif()
+
set(COMPILER_ASAN_CFLAGS "${_asan_defaults}" CACHE STRING "C flags for address sanitizer")
mark_as_advanced(COMPILER_ASAN_CFLAGS)
set(COMPILER_ASAN_CXXFLAGS "${_asan_defaults}" CACHE STRING "C++ flags for address sanitizer")
@@ -520,16 +532,31 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
unset(_asan_defaults)
- if(NOT MSVC)
- find_library(COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
- else()
- find_library(
- COMPILER_ASAN_LIBRARY NAMES clang_rt.asan-x86_64
+ if(MSVC)
+ find_library(
+ COMPILER_ASAN_LIBRARY NAMES clang_rt.asan-x86_64
PATHS
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
)
+ elseif(APPLE)
+ execute_process(COMMAND ${CMAKE_CXX_COMPILER}
+ -print-file-name=lib
+ OUTPUT_VARIABLE CLANG_LIB_DIR
+ )
+ string(STRIP "${CLANG_LIB_DIR}" CLANG_LIB_DIR)
+ find_library(
+ COMPILER_ASAN_LIBRARY NAMES libclang_rt.asan_osx_dynamic.dylib
+ PATHS
+ "${CLANG_LIB_DIR}/darwin/"
+ )
+ unset(CLANG_LIB_DIR)
+ else()
+ find_library(
+ COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}
+ )
endif()
+
mark_as_advanced(COMPILER_ASAN_LIBRARY)
endif()
endif()
@@ -823,6 +850,9 @@ if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
if(MSVC)
set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6")
endif()
+ if(APPLE)
+ set(COMPILER_ASAN_LINKER_FLAGS "-fno-omit-frame-pointer -fsanitize=address")
+ endif(APPLE)
if(COMPILER_ASAN_LIBRARY)
set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}")
set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")