From 7ea7296d3e71940cd11488d364a9c8a3618ecf63 Mon Sep 17 00:00:00 2001 From: Daan Date: Sun, 19 May 2024 12:03:55 -0700 Subject: [PATCH 1/4] add malloc_good_size override maacro, see issue #900 and pr #901 --- include/mimalloc-override.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/mimalloc-override.h b/include/mimalloc-override.h index c63b0b91..b79a6b3b 100644 --- a/include/mimalloc-override.h +++ b/include/mimalloc-override.h @@ -43,6 +43,7 @@ not accidentally mix pointers from different allocators). #define reallocf(p,n) mi_reallocf(p,n) #define malloc_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 valloc(n) mi_valloc(n) From 03224e17a01228e3cdb531343c925b772c5de567 Mon Sep 17 00:00:00 2001 From: Daan Date: Sun, 19 May 2024 13:25:31 -0700 Subject: [PATCH 2/4] bump cmake required version to 3.18 and detect libatomic more reliably, see pr #898 --- CMakeLists.txt | 12 +++++------- include/mimalloc-override.h | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cc2fc46..08435964 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.18) project(libmimalloc C CXX) 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_USE_LIBATOMIC "Explicitly link with -latomic (on older systems) (deprecated and detected automatically)" OFF) +include(CheckLinkerFlag) # requires cmake 3.18 include(CheckIncludeFiles) include(GNUInstallDirs) include("cmake/mimalloc-config-version.cmake") @@ -354,12 +355,9 @@ else() list(APPEND mi_libraries ${MI_LIBRT}) set(pc_libraries "${pc_libraries} -lrt") endif() - find_library(MI_LIBATOMIC atomic) - if (NOT MI_LIBATOMIC AND MI_USE_LIBATOMIC) - set(MI_LIBATOMIC atomic) - endif() - if (MI_LIBATOMIC) - list(APPEND mi_libraries ${MI_LIBATOMIC}) + check_linker_flag(C "-latomic" MI_HAS_LIBATOMIC) # do not use `find_library` as libatomic is not always in the system path (issue #898) + if (MI_HAS_LIBATOMIC OR MI_USE_LIBATOMIC) + list(APPEND mi_libraries "atomic") set(pc_libraries "${pc_libraries} -latomic") endif() endif() diff --git a/include/mimalloc-override.h b/include/mimalloc-override.h index b79a6b3b..48a8a622 100644 --- a/include/mimalloc-override.h +++ b/include/mimalloc-override.h @@ -24,7 +24,7 @@ not accidentally mix pointers from different allocators). #define free(p) mi_free(p) #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) // Microsoft extensions From f739e4f2c355ca652c72612263a2ccb9829d9e6a Mon Sep 17 00:00:00 2001 From: Daan Date: Sun, 19 May 2024 15:38:26 -0700 Subject: [PATCH 3/4] check all link libraries (pthread, rt, and atomic) via check_linker_flag first before using find_library (see also issue #898 --- CMakeLists.txt | 56 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08435964..866693eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -340,25 +340,40 @@ if (MSVC AND MSVC_VERSION GREATER_EQUAL 1914) endif() # extra needed libraries + +# we prefer -l test over `find_library` as sometimes core libraries +# like `libatomic` are not on the system path (see issue #898) +function(add_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) - list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt) - set(pc_libraries "-lpsapi -lshell32 -luser32 -ladvapi32 -lbcrypt") + list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt) else() - set(pc_libraries "") - find_library(MI_LIBPTHREAD pthread) - if (MI_LIBPTHREAD) - list(APPEND mi_libraries ${MI_LIBPTHREAD}) - set(pc_libraries "${pc_libraries} -pthread") + add_link_library("pthread" MI_LIB_PTHREAD) + if(MI_LIB_PTHREAD) + list(APPEND mi_libraries "${MI_LIB_PTHREAD}") endif() - find_library(MI_LIBRT rt) - if(MI_LIBRT) - list(APPEND mi_libraries ${MI_LIBRT}) - set(pc_libraries "${pc_libraries} -lrt") + add_link_library("rt" MI_LIB_RT) + if(MI_LIB_RT) + list(APPEND mi_libraries "${MI_LIB_RT}") endif() - check_linker_flag(C "-latomic" MI_HAS_LIBATOMIC) # do not use `find_library` as libatomic is not always in the system path (issue #898) - if (MI_HAS_LIBATOMIC OR MI_USE_LIBATOMIC) - list(APPEND mi_libraries "atomic") - set(pc_libraries "${pc_libraries} -latomic") + add_link_library("atomic" MI_LIB_ATOMIC) + if(MI_LIB_ATOMIC) + list(APPEND mi_libraries "${MI_LIB_ATOMIC}") endif() endif() @@ -520,6 +535,15 @@ if (MI_BUILD_OBJECT) endif() # 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") join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") join_paths(libdir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") @@ -528,6 +552,8 @@ configure_file(mimalloc.pc.in mimalloc.pc @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mimalloc.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/") + + # ----------------------------------------------------------------------------- # API surface testing # ----------------------------------------------------------------------------- From 9cd7e4cc68c1f518fa4ac27ab2de43a2b7a608e7 Mon Sep 17 00:00:00 2001 From: Daan Date: Sun, 19 May 2024 15:43:15 -0700 Subject: [PATCH 4/4] rename library check to find_link_library --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 866693eb..6bac3b94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -343,7 +343,7 @@ endif() # we prefer -l test over `find_library` as sometimes core libraries # like `libatomic` are not on the system path (see issue #898) -function(add_link_library libname outlibname) +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}") @@ -363,15 +363,15 @@ endfunction() if(WIN32) list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt) else() - add_link_library("pthread" MI_LIB_PTHREAD) + find_link_library("pthread" MI_LIB_PTHREAD) if(MI_LIB_PTHREAD) list(APPEND mi_libraries "${MI_LIB_PTHREAD}") endif() - add_link_library("rt" MI_LIB_RT) + find_link_library("rt" MI_LIB_RT) if(MI_LIB_RT) list(APPEND mi_libraries "${MI_LIB_RT}") endif() - add_link_library("atomic" MI_LIB_ATOMIC) + find_link_library("atomic" MI_LIB_ATOMIC) if(MI_LIB_ATOMIC) list(APPEND mi_libraries "${MI_LIB_ATOMIC}") endif()