Changeset View
Changeset View
Standalone View
Standalone View
CMakeLists.txt
| Show First 20 Lines • Show All 504 Lines • ▼ Show 20 Lines | |||||
| -fsanitize=nonnull-attribute \ | -fsanitize=nonnull-attribute \ | ||||
| -fsanitize=returns-nonnull-attribute \ | -fsanitize=returns-nonnull-attribute \ | ||||
| -fsanitize=signed-integer-overflow \ | -fsanitize=signed-integer-overflow \ | ||||
| -fsanitize=undefined \ | -fsanitize=undefined \ | ||||
| -fsanitize=vla-bound \ | -fsanitize=vla-bound \ | ||||
| -fno-sanitize=alignment \ | -fno-sanitize=alignment \ | ||||
| ") | ") | ||||
| if(NOT MSVC) # not all sanitizers are supported with clang-cl, these two however are very vocal about it | 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" ) | set(_asan_defaults "${_asan_defaults} -fsanitize=leak -fsanitize=object-size") | ||||
| 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") | ||||
| mark_as_advanced(COMPILER_ASAN_CFLAGS) | mark_as_advanced(COMPILER_ASAN_CFLAGS) | ||||
| set(COMPILER_ASAN_CXXFLAGS "${_asan_defaults}" CACHE STRING "C++ flags for address sanitizer") | set(COMPILER_ASAN_CXXFLAGS "${_asan_defaults}" CACHE STRING "C++ flags for address sanitizer") | ||||
| mark_as_advanced(COMPILER_ASAN_CXXFLAGS) | mark_as_advanced(COMPILER_ASAN_CXXFLAGS) | ||||
| unset(_asan_defaults) | unset(_asan_defaults) | ||||
| if(NOT MSVC) | if(MSVC) | ||||
| find_library(COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}) | |||||
| else() | |||||
| find_library( | find_library( | ||||
| COMPILER_ASAN_LIBRARY NAMES clang_rt.asan-x86_64 | COMPILER_ASAN_LIBRARY NAMES clang_rt.asan-x86_64 | ||||
| PATHS | PATHS | ||||
| [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 | ||||
| ) | ) | ||||
| 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) | |||||
ankitm: Should `execute_process ` be moved to `platform_apple.cmake` ? | |||||
| find_library( | |||||
| COMPILER_ASAN_LIBRARY NAMES libclang_rt.asan_osx_dynamic.dylib | |||||
| PATHS | |||||
| "${CLANG_LIB_DIR}/darwin/" | |||||
| ) | |||||
| else() | |||||
| find_library( | |||||
| COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} | |||||
| ) | |||||
| endif() | endif() | ||||
| mark_as_advanced(COMPILER_ASAN_LIBRARY) | mark_as_advanced(COMPILER_ASAN_LIBRARY) | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| if(WIN32) | if(WIN32) | ||||
| # Use hardcoded paths or find_package to find externals | # Use hardcoded paths or find_package to find externals | ||||
| option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF) | option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF) | ||||
| mark_as_advanced(WITH_WINDOWS_FIND_MODULES) | mark_as_advanced(WITH_WINDOWS_FIND_MODULES) | ||||
| ▲ Show 20 Lines • Show All 277 Lines • ▼ Show 20 Lines | if(WITH_COMPILER_ASAN) | ||||
| set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}") | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}") | ||||
| set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}") | set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}") | ||||
| set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}") | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}") | ||||
| set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}") | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}") | ||||
| if(MSVC) | if(MSVC) | ||||
| set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6") | set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6") | ||||
| endif() | endif() | ||||
| if(APPLE) | |||||
| # Pass the same flags to linker to avoid using rpath. | |||||
| set(COMPILER_ASAN_LINKER_FLAGS "${COMPILER_ASAN_CXXFLAGS}") | |||||
| endif(APPLE) | |||||
| if(COMPILER_ASAN_LIBRARY) | if(COMPILER_ASAN_LIBRARY) | ||||
| set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}") | set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}") | ||||
| set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") | set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") | ||||
| set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") | set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}") | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| ▲ Show 20 Lines • Show All 978 Lines • Show Last 20 Lines | |||||
Should execute_process be moved to platform_apple.cmake ?