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:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt48
1 files changed, 40 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 76d2d578dc3..cfc49505a0b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -128,7 +128,9 @@ enable_testing()
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
-if(MSVC)
+
+get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(GENERATOR_IS_MULTI_CONFIG)
set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests/$<CONFIG>/ CACHE INTERNAL "" FORCE)
else()
set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests/ CACHE INTERNAL "" FORCE)
@@ -510,9 +512,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 +534,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 +852,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}")