Commit: 40dcf686f04f7db8110f9c85621eb8a0bd764080 Author: Ankit Date: Tue Sep 8 00:17:17 2020 +0530 Branches: master https://developer.blender.org/rB40dcf686f04f7db8110f9c85621eb8a0bd764080
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 =================================================================== M CMakeLists.txt =================================================================== 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}") _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs