fix asan compilation on macOSX

This commit is contained in:
Daan 2023-03-04 09:58:17 -08:00
parent 6cc0ad72fc
commit e24c7c9de6

View file

@ -51,6 +51,8 @@ set(mi_sources
src/options.c src/options.c
src/init.c) src/init.c)
set(mi_cflags "")
set(mi_libraries "")
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Convenience: set default build type depending on the build directory # Convenience: set default build type depending on the build directory
@ -141,10 +143,15 @@ if(MI_VALGRIND)
endif() endif()
if(MI_ASAN) if(MI_ASAN)
if (APPLE AND MI_OVERRIDE)
set(MI_ASAN OFF)
message(WARNING "Cannot enable address sanitizer support on macOS if MI_OVERRIDE is ON (MI_ASAN=OFF)")
endif()
if (MI_VALGRIND) if (MI_VALGRIND)
set(MI_ASAN OFF) set(MI_ASAN OFF)
message(WARNING "Cannot enable address sanitizer support with also Valgrind support enabled (MI_ASAN=OFF)") message(WARNING "Cannot enable address sanitizer support with also Valgrind support enabled (MI_ASAN=OFF)")
else() endif()
if(MI_ASAN)
CHECK_INCLUDE_FILES("sanitizer/asan_interface.h" MI_HAS_ASANH) CHECK_INCLUDE_FILES("sanitizer/asan_interface.h" MI_HAS_ASANH)
if (NOT MI_HAS_ASANH) if (NOT MI_HAS_ASANH)
set(MI_ASAN OFF) set(MI_ASAN OFF)
@ -154,7 +161,7 @@ if(MI_ASAN)
message(STATUS "Compile with address sanitizer support (MI_ASAN=ON)") message(STATUS "Compile with address sanitizer support (MI_ASAN=ON)")
list(APPEND mi_defines MI_ASAN=1) list(APPEND mi_defines MI_ASAN=1)
list(APPEND mi_cflags -fsanitize=address) list(APPEND mi_cflags -fsanitize=address)
list(APPEND CMAKE_EXE_LINKER_FLAGS -fsanitize=address) list(APPEND mi_libraries -fsanitize=address)
endif() endif()
endif() endif()
endif() endif()
@ -199,7 +206,7 @@ if(MI_DEBUG_TSAN)
message(STATUS "Build with thread sanitizer (MI_DEBUG_TSAN=ON)") message(STATUS "Build with thread sanitizer (MI_DEBUG_TSAN=ON)")
list(APPEND mi_defines MI_TSAN=1) list(APPEND mi_defines MI_TSAN=1)
list(APPEND mi_cflags -fsanitize=thread -g -O1) list(APPEND mi_cflags -fsanitize=thread -g -O1)
list(APPEND CMAKE_EXE_LINKER_FLAGS -fsanitize=thread) list(APPEND mi_libraries -fsanitize=thread)
else() else()
message(WARNING "Can only use thread sanitizer with clang (MI_DEBUG_TSAN=ON but ignored)") message(WARNING "Can only use thread sanitizer with clang (MI_DEBUG_TSAN=ON but ignored)")
endif() endif()
@ -210,7 +217,7 @@ if(MI_DEBUG_UBSAN)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "Build with undefined-behavior sanitizer (MI_DEBUG_UBSAN=ON)") message(STATUS "Build with undefined-behavior sanitizer (MI_DEBUG_UBSAN=ON)")
list(APPEND mi_cflags -fsanitize=undefined -g -fno-sanitize-recover=undefined) list(APPEND mi_cflags -fsanitize=undefined -g -fno-sanitize-recover=undefined)
list(APPEND CMAKE_EXE_LINKER_FLAGS -fsanitize=undefined) list(APPEND mi_libraries -fsanitize=undefined)
if (NOT MI_USE_CXX) if (NOT MI_USE_CXX)
message(STATUS "(switch to use C++ due to MI_DEBUG_UBSAN)") message(STATUS "(switch to use C++ due to MI_DEBUG_UBSAN)")
set(MI_USE_CXX "ON") set(MI_USE_CXX "ON")
@ -363,7 +370,7 @@ if(MI_BUILD_SHARED)
set_target_properties(mimalloc PROPERTIES VERSION ${mi_version} SOVERSION ${mi_version_major} OUTPUT_NAME ${mi_basename} ) set_target_properties(mimalloc PROPERTIES VERSION ${mi_version} SOVERSION ${mi_version_major} OUTPUT_NAME ${mi_basename} )
target_compile_definitions(mimalloc PRIVATE ${mi_defines} MI_SHARED_LIB MI_SHARED_LIB_EXPORT) target_compile_definitions(mimalloc PRIVATE ${mi_defines} MI_SHARED_LIB MI_SHARED_LIB_EXPORT)
target_compile_options(mimalloc PRIVATE ${mi_cflags}) target_compile_options(mimalloc PRIVATE ${mi_cflags})
target_link_libraries(mimalloc PRIVATE ${mi_libraries}) target_link_libraries(mimalloc PRIVATE ${mi_libraries} -fsanitize=address)
target_include_directories(mimalloc PUBLIC target_include_directories(mimalloc PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${mi_install_incdir}> $<INSTALL_INTERFACE:${mi_install_incdir}>