Core: Fix ASAN on Clang-14 / Linux
When using ASAN on Clang / Linux, the call to `find_library(... asan ...)` works against us, as it finds GCC's `libasan.so`. To work with Clang, we should simply not pass any explicit library, as Clang will figure things out by itself with the `-fsanitize=xxx` options. Furthermore, Clang is incompatible with `-fsanitize=object-size`, so that's now also no longer passed on Linux (mimicking the Apple) configuration. For the long run, it would be better to rewrite this entire section to select behaviour on a per-compiler basis, rather than per platform. That's tracked in #105956 Pull Request: https://projects.blender.org/blender/blender/pulls/106675
This commit is contained in:
parent
d07b82d16d
commit
dc402a8b96
@ -693,8 +693,10 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
else()
|
else()
|
||||||
string(APPEND _asan_defaults " -fsanitize=object-size")
|
string(APPEND _asan_defaults " -fsanitize=object-size")
|
||||||
endif()
|
endif()
|
||||||
else()
|
elseif(CMAKE_COMPILER_IS_GNUCC)
|
||||||
string(APPEND _asan_defaults " -fsanitize=leak -fsanitize=object-size")
|
string(APPEND _asan_defaults " -fsanitize=leak -fsanitize=object-size")
|
||||||
|
else()
|
||||||
|
string(APPEND _asan_defaults " -fsanitize=leak")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(COMPILER_ASAN_CFLAGS "${_asan_defaults}" CACHE STRING "C flags for address sanitizer")
|
set(COMPILER_ASAN_CFLAGS "${_asan_defaults}" CACHE STRING "C flags for address sanitizer")
|
||||||
@ -711,6 +713,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
|
[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
|
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
|
||||||
)
|
)
|
||||||
|
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
||||||
-print-file-name=lib
|
-print-file-name=lib
|
||||||
@ -725,13 +728,14 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
"${CLANG_LIB_DIR}/darwin/"
|
"${CLANG_LIB_DIR}/darwin/"
|
||||||
)
|
)
|
||||||
unset(CLANG_LIB_DIR)
|
unset(CLANG_LIB_DIR)
|
||||||
else()
|
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||||
|
elseif(CMAKE_COMPILER_IS_GNUCC)
|
||||||
find_library(
|
find_library(
|
||||||
COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}
|
COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}
|
||||||
)
|
)
|
||||||
|
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user