mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-13 02:39:31 +03:00
merge with dev
This commit is contained in:
commit
54b2c3525c
3 changed files with 47 additions and 32 deletions
|
@ -208,9 +208,13 @@ endif()
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
if (MI_INSTALL_TOPLEVEL)
|
if (MI_INSTALL_TOPLEVEL)
|
||||||
set(mi_install_dir "${CMAKE_INSTALL_PREFIX}")
|
set(mi_install_libdir "lib")
|
||||||
|
set(mi_install_incdir "include")
|
||||||
|
set(mi_install_cmakedir "cmake")
|
||||||
else()
|
else()
|
||||||
set(mi_install_dir "${CMAKE_INSTALL_PREFIX}/lib/mimalloc-${mi_version}")
|
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()
|
endif()
|
||||||
|
|
||||||
if(MI_SECURE)
|
if(MI_SECURE)
|
||||||
|
@ -244,7 +248,7 @@ if(MI_USE_CXX)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Compiler : ${CMAKE_C_COMPILER}")
|
message(STATUS "Compiler : ${CMAKE_C_COMPILER}")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Install directory: ${mi_install_dir}")
|
message(STATUS "Version : ${mi_version}")
|
||||||
message(STATUS "Build targets : ${mi_build_targets}")
|
message(STATUS "Build targets : ${mi_build_targets}")
|
||||||
message(STATUS "")
|
message(STATUS "")
|
||||||
|
|
||||||
|
@ -261,25 +265,24 @@ if(MI_BUILD_SHARED)
|
||||||
target_link_libraries(mimalloc PUBLIC ${mi_libraries})
|
target_link_libraries(mimalloc PUBLIC ${mi_libraries})
|
||||||
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_dir}/include>
|
$<INSTALL_INTERFACE:${mi_install_incdir}>
|
||||||
)
|
)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# On windows copy the mimalloc redirection dll too.
|
# 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
|
add_custom_command(TARGET mimalloc POST_BUILD
|
||||||
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect.dll" $<TARGET_FILE_DIR:mimalloc>
|
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bin/mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.dll" $<TARGET_FILE_DIR:mimalloc>
|
||||||
COMMENT "Copy mimalloc-redirect.dll to output directory")
|
COMMENT "Copy mimalloc-redirect${MIMALLOC_REDIRECT_SUFFIX}.dll to output directory")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MI_INSTALL_TOPLEVEL MATCHES "ON")
|
install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY)
|
||||||
install(TARGETS mimalloc EXPORT mimalloc LIBRARY
|
install(EXPORT mimalloc DESTINATION ${mi_install_cmakedir})
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib)
|
|
||||||
else()
|
|
||||||
install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_dir} LIBRARY)
|
|
||||||
endif()
|
|
||||||
install(EXPORT mimalloc DESTINATION ${mi_install_dir}/cmake)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# static library
|
# static library
|
||||||
|
@ -291,7 +294,7 @@ if (MI_BUILD_STATIC)
|
||||||
target_link_libraries(mimalloc-static PUBLIC ${mi_libraries})
|
target_link_libraries(mimalloc-static PUBLIC ${mi_libraries})
|
||||||
target_include_directories(mimalloc-static PUBLIC
|
target_include_directories(mimalloc-static PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:${mi_install_dir}/include>
|
$<INSTALL_INTERFACE:${mi_install_incdir}>
|
||||||
)
|
)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# When building both static and shared libraries on Windows, a static library should use a
|
# When building both static and shared libraries on Windows, a static library should use a
|
||||||
|
@ -302,22 +305,25 @@ 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_dir})
|
install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# install include files
|
# install include files
|
||||||
install(FILES include/mimalloc.h DESTINATION ${mi_install_dir}/include)
|
install(FILES include/mimalloc.h DESTINATION ${mi_install_incdir})
|
||||||
install(FILES include/mimalloc-override.h DESTINATION ${mi_install_dir}/include)
|
install(FILES include/mimalloc-override.h DESTINATION ${mi_install_incdir})
|
||||||
install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_dir}/include)
|
install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_incdir})
|
||||||
install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_dir}/cmake)
|
install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_cmakedir})
|
||||||
install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_dir}/cmake)
|
install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_cmakedir})
|
||||||
|
|
||||||
if(NOT WIN32 AND MI_BUILD_SHARED AND NOT MI_INSTALL_TOPLEVEL)
|
if(NOT WIN32 AND MI_BUILD_SHARED AND NOT MI_INSTALL_TOPLEVEL)
|
||||||
# install a symlink in the /usr/local/lib to the versioned library
|
# 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_symlink "${CMAKE_SHARED_MODULE_PREFIX}${mi_basename}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
set(mi_soname "mimalloc-${mi_version}/${mi_symlink}.${mi_version}")
|
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 "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 "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()
|
endif()
|
||||||
|
|
||||||
# single object file for more predictable static overriding
|
# single object file for more predictable static overriding
|
||||||
|
@ -328,16 +334,16 @@ if (MI_BUILD_OBJECT)
|
||||||
target_compile_options(mimalloc-obj PRIVATE ${mi_cflags})
|
target_compile_options(mimalloc-obj PRIVATE ${mi_cflags})
|
||||||
target_include_directories(mimalloc-obj PUBLIC
|
target_include_directories(mimalloc-obj PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:${mi_install_dir}/include>
|
$<INSTALL_INTERFACE:${mi_install_incdir}>
|
||||||
)
|
)
|
||||||
|
|
||||||
# the following seems to lead to cmake warnings/errors on some systems, disable for now :-(
|
# 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: $<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_dir}
|
DESTINATION ${mi_install_libdir}
|
||||||
RENAME ${mi_basename}${CMAKE_C_OUTPUT_EXTENSION} )
|
RENAME ${mi_basename}${CMAKE_C_OUTPUT_EXTENSION} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,11 @@
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/mimalloc.cmake)
|
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
|
||||||
|
|
|
@ -14,7 +14,7 @@ endif()
|
||||||
|
|
||||||
# Import mimalloc (if installed)
|
# Import mimalloc (if installed)
|
||||||
find_package(mimalloc 2.0 REQUIRED NO_SYSTEM_ENVIRONMENT_PATH)
|
find_package(mimalloc 2.0 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
|
# overriding with a dynamic library
|
||||||
add_executable(dynamic-override main-override.c)
|
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
|
# 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_TARGET_DIR}/mimalloc.o)
|
add_executable(static-override-obj main-override.c ${MIMALLOC_LIBRARY_DIR}/mimalloc.o)
|
||||||
target_include_directories(static-override-obj PUBLIC ${MIMALLOC_TARGET_DIR}/include)
|
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