mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-06 07:29:30 +03:00
merge from dev
This commit is contained in:
commit
d15f5fae64
6 changed files with 37 additions and 37 deletions
|
@ -210,12 +210,13 @@ endif()
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt)
|
list(APPEND mi_libraries psapi shell32 user32 advapi32 bcrypt)
|
||||||
else()
|
else()
|
||||||
if(NOT ${CMAKE_C_COMPILER} MATCHES "android")
|
find_library(LIBPTHREAD pthread)
|
||||||
list(APPEND mi_libraries pthread)
|
if (LIBPTHREAD)
|
||||||
find_library(LIBRT rt)
|
list(APPEND mi_libraries ${LIBPTHREAD})
|
||||||
if(LIBRT)
|
endif()
|
||||||
list(APPEND mi_libraries ${LIBRT})
|
find_library(LIBRT rt)
|
||||||
endif()
|
if(LIBRT)
|
||||||
|
list(APPEND mi_libraries ${LIBRT})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -227,14 +228,17 @@ endif()
|
||||||
# Install and output names
|
# Install and output names
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set(mi_install_libdir "${CMAKE_INSTALL_LIBDIR}") # for dynamic/shared library and symlinks
|
||||||
|
|
||||||
|
# install at top level or use versioned directories for side-by-side installation?
|
||||||
if (MI_INSTALL_TOPLEVEL)
|
if (MI_INSTALL_TOPLEVEL)
|
||||||
set(mi_install_libdir "${CMAKE_INSTALL_LIBDIR}")
|
set(mi_install_objdir "${CMAKE_INSTALL_LIBDIR}")
|
||||||
set(mi_install_incdir "${CMAKE_INSTALL_INCLUDEDIR}")
|
set(mi_install_incdir "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
set(mi_install_cmakedir "${CMAKE_INSTALL_LIBDIR}/cmake/mimalloc")
|
set(mi_install_cmakedir "${CMAKE_INSTALL_LIBDIR}/cmake/mimalloc")
|
||||||
else()
|
else()
|
||||||
set(mi_install_libdir "lib/mimalloc-${mi_version}")
|
set(mi_install_objdir "${CMAKE_INSTALL_LIBDIR}/mimalloc-${mi_version}") # for static library and object files
|
||||||
set(mi_install_incdir "include/mimalloc-${mi_version}")
|
set(mi_install_incdir "${CMAKE_INSTALL_INCLUDEDIR}/mimalloc-${mi_version}") # for includes
|
||||||
set(mi_install_cmakedir "share/mimalloc-${mi_version}/cmake")
|
set(mi_install_cmakedir "${CMAKE_INSTALL_LIBDIR}/cmake/mimalloc-${mi_version}") # for cmake package info
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MI_SECURE)
|
if(MI_SECURE)
|
||||||
|
@ -270,6 +274,8 @@ else()
|
||||||
message(STATUS "C Compiler : ${CMAKE_C_COMPILER}")
|
message(STATUS "C Compiler : ${CMAKE_C_COMPILER}")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Compiler flags : ${mi_cflags}")
|
message(STATUS "Compiler flags : ${mi_cflags}")
|
||||||
|
message(STATUS "Compiler defines : ${mi_defines}")
|
||||||
|
message(STATUS "Link libraries : ${mi_libraries}")
|
||||||
message(STATUS "Build targets : ${mi_build_targets}")
|
message(STATUS "Build targets : ${mi_build_targets}")
|
||||||
message(STATUS "")
|
message(STATUS "")
|
||||||
|
|
||||||
|
@ -280,7 +286,7 @@ message(STATUS "")
|
||||||
# shared library
|
# shared library
|
||||||
if(MI_BUILD_SHARED)
|
if(MI_BUILD_SHARED)
|
||||||
add_library(mimalloc SHARED ${mi_sources})
|
add_library(mimalloc SHARED ${mi_sources})
|
||||||
set_target_properties(mimalloc PROPERTIES VERSION ${mi_version} 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 PUBLIC ${mi_libraries})
|
target_link_libraries(mimalloc PUBLIC ${mi_libraries})
|
||||||
|
@ -326,7 +332,7 @@ if (MI_BUILD_STATIC)
|
||||||
set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_basename})
|
set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_basename})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY)
|
install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_objdir} LIBRARY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# install include files
|
# install include files
|
||||||
|
@ -336,16 +342,6 @@ 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.cmake DESTINATION ${mi_install_cmakedir})
|
||||||
install(FILES cmake/mimalloc-config-version.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
|
# single object file for more predictable static overriding
|
||||||
if (MI_BUILD_OBJECT)
|
if (MI_BUILD_OBJECT)
|
||||||
|
@ -364,7 +360,7 @@ if (MI_BUILD_OBJECT)
|
||||||
# the FILES expression can also be: $<TARGET_OBJECTS:mimalloc-obj>
|
# the FILES expression can also be: $<TARGET_OBJECTS:mimalloc-obj>
|
||||||
# but that fails cmake versions less than 3.10 so we leave it as is for now
|
# 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}
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/mimalloc-obj.dir/src/static.c${CMAKE_C_OUTPUT_EXTENSION}
|
||||||
DESTINATION ${mi_install_libdir}
|
DESTINATION ${mi_install_objdir}
|
||||||
RENAME ${mi_basename}${CMAKE_C_OUTPUT_EXTENSION} )
|
RENAME ${mi_basename}${CMAKE_C_OUTPUT_EXTENSION} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
set(mi_version_major 2)
|
set(mi_version_major 2)
|
||||||
set(mi_version_minor 0)
|
set(mi_version_minor 0)
|
||||||
|
set(mi_version_patch 4)
|
||||||
set(mi_version ${mi_version_major}.${mi_version_minor})
|
set(mi_version ${mi_version_major}.${mi_version_minor})
|
||||||
|
|
||||||
set(PACKAGE_VERSION ${mi_version})
|
set(PACKAGE_VERSION ${mi_version})
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/mimalloc.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/mimalloc.cmake)
|
||||||
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
|
get_filename_component(MIMALLOC_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}" PATH) # one up from the cmake dir, e.g. /usr/local/lib/cmake/mimalloc-2.0
|
||||||
if (MIMALLOC_SHARE_DIR MATCHES "/share/")
|
get_filename_component(MIMALLOC_VER_DIR "${CMAKE_CURRENT_LIST_DIR}" NAME)
|
||||||
string(REPLACE "/share/" "/lib/" MIMALLOC_LIBRARY_DIR ${MIMALLOC_SHARE_DIR})
|
string(REPLACE "/lib/cmake" "/lib" MIMALLOC_LIBRARY_DIR "${MIMALLOC_CMAKE_DIR}")
|
||||||
string(REPLACE "/share/" "/include/" MIMALLOC_INCLUDE_DIR ${MIMALLOC_SHARE_DIR})
|
if("${MIMALLOC_VER_DIR}" EQUAL "mimalloc")
|
||||||
|
# top level install
|
||||||
|
string(REPLACE "/lib/cmake" "/include" MIMALLOC_INCLUDE_DIR "${MIMALLOC_CMAKE_DIR}")
|
||||||
|
set(MIMALLOC_OBJECT_DIR "${MIMALLOC_LIBRARY_DIR}")
|
||||||
else()
|
else()
|
||||||
# installed with -DMI_INSTALL_TOPLEVEL=ON
|
# versioned
|
||||||
string(REPLACE "/lib/cmake" "/lib" MIMALLOC_LIBRARY_DIR "${MIMALLOC_SHARE_DIR}")
|
string(REPLACE "/lib/cmake/" "/include/" MIMALLOC_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||||||
string(REPLACE "/lib/cmake" "/include" MIMALLOC_INCLUDE_DIR "${MIMALLOC_SHARE_DIR}")
|
string(REPLACE "/lib/cmake/" "/lib/" MIMALLOC_OBJECT_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||||||
endif()
|
endif()
|
||||||
set(MIMALLOC_TARGET_DIR "${MIMALLOC_LIBRARY_DIR}") # legacy
|
set(MIMALLOC_TARGET_DIR "${MIMALLOC_LIBRARY_DIR}") # legacy
|
||||||
|
|
|
@ -834,9 +834,9 @@ static inline void mi_tls_slot_set(size_t slot, void* value) mi_attr_noexcept {
|
||||||
#elif defined(__APPLE__) && defined(__x86_64__)
|
#elif defined(__APPLE__) && defined(__x86_64__)
|
||||||
__asm__("movq %1,%%gs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 macOSX uses GS
|
__asm__("movq %1,%%gs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 macOSX uses GS
|
||||||
#elif defined(__x86_64__) && (MI_INTPTR_SIZE==4)
|
#elif defined(__x86_64__) && (MI_INTPTR_SIZE==4)
|
||||||
__asm__("movl %1,%%fs:%1" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x32 ABI
|
__asm__("movl %1,%%fs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x32 ABI
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__x86_64__)
|
||||||
__asm__("movq %1,%%fs:%1" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 Linux, BSD uses FS
|
__asm__("movq %1,%%fs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 Linux, BSD uses FS
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
void** tcb; MI_UNUSED(ofs);
|
void** tcb; MI_UNUSED(ofs);
|
||||||
__asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb));
|
__asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb));
|
||||||
|
|
|
@ -8,7 +8,7 @@ terms of the MIT license. A copy of the license can be found in the file
|
||||||
#ifndef MIMALLOC_H
|
#ifndef MIMALLOC_H
|
||||||
#define MIMALLOC_H
|
#define MIMALLOC_H
|
||||||
|
|
||||||
#define MI_MALLOC_VERSION 203 // major + 2 digits minor
|
#define MI_MALLOC_VERSION 204 // major + 2 digits minor
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
// Compiler specific attributes
|
// Compiler specific attributes
|
||||||
|
|
|
@ -29,7 +29,7 @@ target_link_libraries(dynamic-override-cxx PUBLIC mimalloc)
|
||||||
|
|
||||||
# overriding with a static object file works reliable as the symbols in the
|
# overriding with a static object file works reliable as the symbols in the
|
||||||
# object file have priority over those in library files
|
# object file have priority over those in library files
|
||||||
add_executable(static-override-obj main-override.c ${MIMALLOC_LIBRARY_DIR}/mimalloc.o)
|
add_executable(static-override-obj main-override.c ${MIMALLOC_OBJECT_DIR}/mimalloc.o)
|
||||||
target_include_directories(static-override-obj PUBLIC ${MIMALLOC_INCLUDE_DIR})
|
target_include_directories(static-override-obj PUBLIC ${MIMALLOC_INCLUDE_DIR})
|
||||||
target_link_libraries(static-override-obj PUBLIC pthread)
|
target_link_libraries(static-override-obj PUBLIC pthread)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue