From 73c339235c455e83b50a459370a26c1a76788aa2 Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Wed, 28 Apr 2021 16:12:32 -0700 Subject: [PATCH 1/5] collect in debug mode in stress test --- test/test-stress.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test-stress.c b/test/test-stress.c index 9b64d243..cf01dc40 100644 --- a/test/test-stress.c +++ b/test/test-stress.c @@ -250,7 +250,9 @@ int main(int argc, char** argv) { test_leak(); #endif - // mi_collect(true); +#ifndef NDEBUG + mi_collect(true); +#endif #ifndef USE_STD_MALLOC mi_stats_print(NULL); #endif From acba250e60a0d0c48d73da62423d3e4179cf89a8 Mon Sep 17 00:00:00 2001 From: Marek Kurdej Date: Tue, 4 May 2021 11:26:07 +0200 Subject: [PATCH 2/5] [Windows] Correctly choose 32-bit version of mimalloc-redirect{,32}.dll. --- CMakeLists.txt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f708e75a..f805823d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,10 +265,16 @@ if(MI_BUILD_SHARED) ) if(WIN32) # On windows copy the mimalloc redirection dll too. - target_link_libraries(mimalloc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect.lib) + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(MIMALLOC_REDIRECT_SUFFIX "32") + else() + set(MIMALLOC_REDIRECT_SUFFIX "") + endif() + + target_link_libraries(mimalloc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.lib) add_custom_command(TARGET mimalloc POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect.dll" $ - COMMENT "Copy mimalloc-redirect.dll to output directory") + COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.dll" $ + COMMENT "Copy mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.dll to output directory") endif() if (MI_INSTALL_TOPLEVEL MATCHES "ON") From 712e7d3de087dad03dd4a1129d8cadbc44f72c9e Mon Sep 17 00:00:00 2001 From: Yupeng Zhang Date: Mon, 10 May 2021 12:01:03 -0400 Subject: [PATCH 3/5] [CMake] Respect CMAKE_INSTALL_PREFIX at install time The standard way of cmake install to a destination folder is the following pattern: ```shell cd cmake cmake --build cmake --install --prefix ``` Right now, the `` folder passed in cmake --install command is ignored, and always installed into `C:/Program Files(x86)/...`, which is the default `CMAKE_INSTALL_PREFIX` value passed at the `cmake ` call. Thus, it is not possible to install the binaries into different folders without rerun the cmake/build process. The important thing here is, the cmake variable `CMAKE_INSTALL_PREFIX` is supposed to be passed at `cmake --install` time with the `--prefix` argument. In cmake file, `install` with relative path will use that prefix automaticlly. And it is the best practice to not include CMAKE_INSTALL_PREFIX in the `install(... DESTINATION )` argument: ``` In particular, there is no need to make paths absolute by prepending CMAKE_INSTALL_PREFIX; this prefix is used by default if the DESTINATION is a relative path. ``` referenced from: https://cmake.org/cmake/help/latest/command/install.html --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f708e75a..36cb7b2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,9 +208,9 @@ endif() # ----------------------------------------------------------------------------- if (MI_INSTALL_TOPLEVEL) - set(mi_install_dir "${CMAKE_INSTALL_PREFIX}") + set(mi_install_dir "") else() - set(mi_install_dir "${CMAKE_INSTALL_PREFIX}/lib/mimalloc-${mi_version}") + set(mi_install_dir "lib/mimalloc-${mi_version}") endif() if(MI_SECURE) From 34172910e5016ed3b9dd82ba04bc7a98035fa39e Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Fri, 21 May 2021 13:01:11 -0700 Subject: [PATCH 4/5] fix symlink and --prefix option with delayed CMAKE_INSTALL_PREFIX; fix issue #398 --- CMakeLists.txt | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abc7af17..3589d83f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,9 +208,11 @@ endif() # ----------------------------------------------------------------------------- if (MI_INSTALL_TOPLEVEL) - set(mi_install_dir "") + set(mi_install_dir "") + set(mi_install_libdir "lib") else() - set(mi_install_dir "lib/mimalloc-${mi_version}") + set(mi_install_dir "lib/mimalloc-${mi_version}") + set(mi_install_libdir "${mi_install_dir}") endif() if(MI_SECURE) @@ -277,14 +279,7 @@ if(MI_BUILD_SHARED) COMMENT "Copy mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.dll to output directory") endif() - if (MI_INSTALL_TOPLEVEL MATCHES "ON") - install(TARGETS mimalloc EXPORT mimalloc LIBRARY - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - else() - install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_dir} LIBRARY) - endif() + install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY) install(EXPORT mimalloc DESTINATION ${mi_install_dir}/cmake) endif() @@ -308,7 +303,7 @@ if (MI_BUILD_STATIC) set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_basename}) endif() - install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_dir}) + install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY) endif() # install include files @@ -322,8 +317,8 @@ if(NOT WIN32 AND MI_BUILD_SHARED AND NOT MI_INSTALL_TOPLEVEL) # install a symlink in the /usr/local/lib to the versioned library set(mi_symlink "${CMAKE_SHARED_MODULE_PREFIX}${mi_basename}${CMAKE_SHARED_LIBRARY_SUFFIX}") set(mi_soname "mimalloc-${mi_version}/${mi_symlink}.${mi_version}") - install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink} WORKING_DIRECTORY ${mi_install_dir}/..)") - install(CODE "MESSAGE(\"-- Symbolic link: ${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink} -> ${mi_soname}\")") + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib)") + install(CODE "MESSAGE(\"-- Symbolic link: \${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink} -> ${mi_soname}\")") endif() # single object file for more predictable static overriding @@ -343,7 +338,7 @@ if (MI_BUILD_OBJECT) # the FILES expression can also be: $ # but that fails cmake versions less than 3.10 so we leave it as is for now install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/mimalloc-obj.dir/src/static.c${CMAKE_C_OUTPUT_EXTENSION} - DESTINATION ${mi_install_dir} + DESTINATION ${mi_install_libdir} RENAME ${mi_basename}${CMAKE_C_OUTPUT_EXTENSION} ) endif() From e2c095fad2a1d506712be0b22616f97cc927c05b Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Fri, 21 May 2021 15:15:50 -0700 Subject: [PATCH 5/5] fix installation directories on unix to use /lib, /include, /share; fix issues #399, #223, and #89 --- CMakeLists.txt | 35 ++++++++++++++++++++--------------- cmake/mimalloc-config.cmake | 11 ++++++++++- test/CMakeLists.txt | 6 +++--- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3589d83f..ca2ce3e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,11 +208,13 @@ endif() # ----------------------------------------------------------------------------- if (MI_INSTALL_TOPLEVEL) - set(mi_install_dir "") - set(mi_install_libdir "lib") + set(mi_install_libdir "lib") + set(mi_install_incdir "include") + set(mi_install_cmakedir "cmake") else() - set(mi_install_dir "lib/mimalloc-${mi_version}") - set(mi_install_libdir "${mi_install_dir}") + set(mi_install_libdir "lib/mimalloc-${mi_version}") + set(mi_install_incdir "include/mimalloc-${mi_version}") + set(mi_install_cmakedir "share/mimalloc-${mi_version}/cmake") endif() if(MI_SECURE) @@ -246,7 +248,7 @@ if(MI_USE_CXX) else() message(STATUS "Compiler : ${CMAKE_C_COMPILER}") endif() -message(STATUS "Install directory: ${mi_install_dir}") +message(STATUS "Version : ${mi_version}") message(STATUS "Build targets : ${mi_build_targets}") message(STATUS "") @@ -263,7 +265,7 @@ if(MI_BUILD_SHARED) target_link_libraries(mimalloc PUBLIC ${mi_libraries}) target_include_directories(mimalloc PUBLIC $ - $ + $ ) if(WIN32) # On windows copy the mimalloc redirection dll too. @@ -280,7 +282,7 @@ if(MI_BUILD_SHARED) endif() install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY) - install(EXPORT mimalloc DESTINATION ${mi_install_dir}/cmake) + install(EXPORT mimalloc DESTINATION ${mi_install_cmakedir}) endif() # static library @@ -292,7 +294,7 @@ if (MI_BUILD_STATIC) target_link_libraries(mimalloc-static PUBLIC ${mi_libraries}) target_include_directories(mimalloc-static PUBLIC $ - $ + $ ) if(WIN32) # When building both static and shared libraries on Windows, a static library should use a @@ -307,18 +309,21 @@ if (MI_BUILD_STATIC) endif() # install include files -install(FILES include/mimalloc.h DESTINATION ${mi_install_dir}/include) -install(FILES include/mimalloc-override.h DESTINATION ${mi_install_dir}/include) -install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_dir}/include) -install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_dir}/cmake) -install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_dir}/cmake) +install(FILES include/mimalloc.h DESTINATION ${mi_install_incdir}) +install(FILES include/mimalloc-override.h DESTINATION ${mi_install_incdir}) +install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_incdir}) +install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_cmakedir}) +install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_cmakedir}) if(NOT WIN32 AND MI_BUILD_SHARED AND NOT MI_INSTALL_TOPLEVEL) # install a symlink in the /usr/local/lib to the versioned library + # note: use delayed prefix expansion as \${CMAKE_INSTALL_PREFIX} set(mi_symlink "${CMAKE_SHARED_MODULE_PREFIX}${mi_basename}${CMAKE_SHARED_LIBRARY_SUFFIX}") set(mi_soname "mimalloc-${mi_version}/${mi_symlink}.${mi_version}") install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib)") install(CODE "MESSAGE(\"-- Symbolic link: \${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink} -> ${mi_soname}\")") + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink}.${mi_version} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib)") + install(CODE "MESSAGE(\"-- Symbolic link: \${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink}.${mi_version} -> ${mi_soname}\")") endif() # single object file for more predictable static overriding @@ -329,11 +334,11 @@ if (MI_BUILD_OBJECT) target_compile_options(mimalloc-obj PRIVATE ${mi_cflags}) target_include_directories(mimalloc-obj PUBLIC $ - $ + $ ) # the following seems to lead to cmake warnings/errors on some systems, disable for now :-( - # install(TARGETS mimalloc-obj EXPORT mimalloc DESTINATION ${mi_install_dir}) + # install(TARGETS mimalloc-obj EXPORT mimalloc DESTINATION ${mi_install_libdir}) # the FILES expression can also be: $ # but that fails cmake versions less than 3.10 so we leave it as is for now diff --git a/cmake/mimalloc-config.cmake b/cmake/mimalloc-config.cmake index 12da076e..024c97d9 100644 --- a/cmake/mimalloc-config.cmake +++ b/cmake/mimalloc-config.cmake @@ -1,2 +1,11 @@ include(${CMAKE_CURRENT_LIST_DIR}/mimalloc.cmake) -get_filename_component(MIMALLOC_TARGET_DIR "${CMAKE_CURRENT_LIST_DIR}" PATH) +get_filename_component(MIMALLOC_SHARE_DIR "${CMAKE_CURRENT_LIST_DIR}" PATH) # one up from the cmake dir, e.g. /usr/local/share/mimalloc-2.0 +if (MIMALLOC_SHARE_DIR MATCHES "/share/") + string(REPLACE "/share/" "/lib/" MIMALLOC_LIBRARY_DIR ${MIMALLOC_SHARE_DIR}) + string(REPLACE "/share/" "/include/" MIMALLOC_INCLUDE_DIR ${MIMALLOC_SHARE_DIR}) +else() + # if MI_INSTALL_TOPLEVEL==ON + set(MIMALLOC_LIBRARY_DIR "${MIMALLOC_SHARE_DIR}/lib") + set(MIMALLOC_INCLUDE_DIR "${MIMALLOC_SHARE_DIR}/include") +endif() +set(MIMALLOC_TARGET_DIR "${MIMALLOC_LIBRARY_DIR}") # legacy diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7392d20e..7986d2da 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,7 +14,7 @@ endif() # Import mimalloc (if installed) find_package(mimalloc 1.7 REQUIRED NO_SYSTEM_ENVIRONMENT_PATH) -message(STATUS "Found mimalloc installed at: ${MIMALLOC_TARGET_DIR}") +message(STATUS "Found mimalloc installed at: ${MIMALLOC_LIBRARY_DIR}") # overriding with a dynamic library add_executable(dynamic-override main-override.c) @@ -26,8 +26,8 @@ target_link_libraries(dynamic-override-cxx PUBLIC mimalloc) # overriding with a static object file works reliable as the symbols in the # object file have priority over those in library files -add_executable(static-override-obj main-override.c ${MIMALLOC_TARGET_DIR}/mimalloc.o) -target_include_directories(static-override-obj PUBLIC ${MIMALLOC_TARGET_DIR}/include) +add_executable(static-override-obj main-override.c ${MIMALLOC_LIBRARY_DIR}/mimalloc.o) +target_include_directories(static-override-obj PUBLIC ${MIMALLOC_INCLUDE_DIR}) target_link_libraries(static-override-obj PUBLIC pthread)