Merge branch 'dev' into dev-slice

This commit is contained in:
Daan 2024-05-19 15:43:26 -07:00
commit 1462cc4e9a
2 changed files with 45 additions and 20 deletions

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.18)
project(libmimalloc C CXX) project(libmimalloc C CXX)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
@ -35,6 +35,7 @@ option(MI_NO_THP "Disable transparent huge pages support on Linux/And
option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF) option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF)
option(MI_USE_LIBATOMIC "Explicitly link with -latomic (on older systems) (deprecated and detected automatically)" OFF) option(MI_USE_LIBATOMIC "Explicitly link with -latomic (on older systems) (deprecated and detected automatically)" OFF)
include(CheckLinkerFlag) # requires cmake 3.18
include(CheckIncludeFiles) include(CheckIncludeFiles)
include(GNUInstallDirs) include(GNUInstallDirs)
include("cmake/mimalloc-config-version.cmake") include("cmake/mimalloc-config-version.cmake")
@ -339,28 +340,40 @@ if (MSVC AND MSVC_VERSION GREATER_EQUAL 1914)
endif() endif()
# extra needed libraries # extra needed libraries
# we prefer -l<lib> test over `find_library` as sometimes core libraries
# like `libatomic` are not on the system path (see issue #898)
function(find_link_library libname outlibname)
check_linker_flag(C "-l${libname}" mi_has_lib${libname})
if (mi_has_lib${libname})
message(VERBOSE "link library: -l${libname}")
set(${outlibname} ${libname} PARENT_SCOPE)
else()
find_library(MI_LIBPATH libname)
if (MI_LIBPATH)
message(VERBOSE "link library ${libname} at ${MI_LIBPATH}")
set(${outlibname} ${MI_LIBPATH} PARENT_SCOPE)
else()
message(VERBOSE "link library not found: ${libname}")
set(${outlibname} "" PARENT_SCOPE)
endif()
endif()
endfunction()
if(WIN32) if(WIN32)
list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt) list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt)
set(pc_libraries "-lpsapi -lshell32 -luser32 -ladvapi32 -lbcrypt")
else() else()
set(pc_libraries "") find_link_library("pthread" MI_LIB_PTHREAD)
find_library(MI_LIBPTHREAD pthread) if(MI_LIB_PTHREAD)
if (MI_LIBPTHREAD) list(APPEND mi_libraries "${MI_LIB_PTHREAD}")
list(APPEND mi_libraries ${MI_LIBPTHREAD})
set(pc_libraries "${pc_libraries} -pthread")
endif() endif()
find_library(MI_LIBRT rt) find_link_library("rt" MI_LIB_RT)
if(MI_LIBRT) if(MI_LIB_RT)
list(APPEND mi_libraries ${MI_LIBRT}) list(APPEND mi_libraries "${MI_LIB_RT}")
set(pc_libraries "${pc_libraries} -lrt")
endif() endif()
find_library(MI_LIBATOMIC atomic) find_link_library("atomic" MI_LIB_ATOMIC)
if (NOT MI_LIBATOMIC AND MI_USE_LIBATOMIC) if(MI_LIB_ATOMIC)
set(MI_LIBATOMIC atomic) list(APPEND mi_libraries "${MI_LIB_ATOMIC}")
endif()
if (MI_LIBATOMIC)
list(APPEND mi_libraries ${MI_LIBATOMIC})
set(pc_libraries "${pc_libraries} -latomic")
endif() endif()
endif() endif()
@ -522,6 +535,15 @@ if (MI_BUILD_OBJECT)
endif() endif()
# pkg-config file support # pkg-config file support
set(pc_libraries "")
foreach(item IN LISTS mi_libraries)
if(item MATCHES " *[-].*")
set(pc_libraries "${pc_libraries} ${item}")
else()
set(pc_libraries "${pc_libraries} -l${item}")
endif()
endforeach()
include("cmake/JoinPaths.cmake") include("cmake/JoinPaths.cmake")
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
join_paths(libdir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") join_paths(libdir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_LIBDIR}")
@ -530,6 +552,8 @@ configure_file(mimalloc.pc.in mimalloc.pc @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mimalloc.pc" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mimalloc.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/") DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# API surface testing # API surface testing
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

View file

@ -24,7 +24,7 @@ not accidentally mix pointers from different allocators).
#define free(p) mi_free(p) #define free(p) mi_free(p)
#define strdup(s) mi_strdup(s) #define strdup(s) mi_strdup(s)
#define strndup(s,n) mi_strndup(s,n) #define strndup(s,n) mi_strndup(s,n)
#define realpath(f,n) mi_realpath(f,n) #define realpath(f,n) mi_realpath(f,n)
// Microsoft extensions // Microsoft extensions
@ -43,6 +43,7 @@ not accidentally mix pointers from different allocators).
#define reallocf(p,n) mi_reallocf(p,n) #define reallocf(p,n) mi_reallocf(p,n)
#define malloc_size(p) mi_usable_size(p) #define malloc_size(p) mi_usable_size(p)
#define malloc_usable_size(p) mi_usable_size(p) #define malloc_usable_size(p) mi_usable_size(p)
#define malloc_good_size(sz) mi_malloc_good_size(sz)
#define cfree(p) mi_free(p) #define cfree(p) mi_free(p)
#define valloc(n) mi_valloc(n) #define valloc(n) mi_valloc(n)