Merge pull request #4222 from sfc-gh-mpilman/features/jemalloc
Replace standard malloc with jemalloc
This commit is contained in:
commit
e4a55908ff
|
@ -22,6 +22,11 @@ env_set(USE_LIBCXX "${_use_libcxx}" BOOL "Use libc++")
|
|||
static_link_libcxx(_static_link_libcxx)
|
||||
env_set(STATIC_LINK_LIBCXX "${_static_link_libcxx}" BOOL "Statically link libstdcpp/libc++")
|
||||
|
||||
set(USE_SANITIZER OFF)
|
||||
if(USE_ASAN OR USE_VALGRIND OR USE_MSAN OR USE_TSAN OR USE_UBSAN)
|
||||
set(USE_SANITIZER ON)
|
||||
endif()
|
||||
|
||||
if(USE_LIBCXX AND STATIC_LINK_LIBCXX AND NOT USE_LD STREQUAL "LLD")
|
||||
message(FATAL_ERROR "Unsupported configuration: STATIC_LINK_LIBCXX with libc++ only works if USE_LD=LLD")
|
||||
endif()
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
set(FORCE_ALL_COMPONENTS OFF CACHE BOOL "Fails cmake if not all dependencies are found")
|
||||
|
||||
################################################################################
|
||||
# jemalloc
|
||||
################################################################################
|
||||
|
||||
include(Jemalloc)
|
||||
|
||||
################################################################################
|
||||
# Valgrind
|
||||
################################################################################
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
add_library(jemalloc INTERFACE)
|
||||
|
||||
set(USE_JEMALLOC ON)
|
||||
if(USE_SANITIZER OR WIN32)
|
||||
set(USE_JEMALLOC OFF)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# We don't want to use jemalloc on Windows
|
||||
find_path(JEMALLOC_INCLUDE_DIR
|
||||
NAMES
|
||||
jemalloc/jemalloc.h
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
find_library(JEMALLOC NAMES libjemalloc.a)
|
||||
find_library(JEMALLOC_PIC NAMES libjemalloc_pic.a)
|
||||
add_library(im_jemalloc_pic STATIC IMPORTED)
|
||||
add_library(im_jemalloc STATIC IMPORTED)
|
||||
if(JEMALLOC_INCLUDE_DIR AND JEMALLOC AND JEMALLOC_PIC)
|
||||
set_target_properties(im_jemalloc_pic PROPERTIES IMPORTED_LOCATION "${JEMALLOC_PIC}")
|
||||
set_target_properties(im_jemalloc PROPERTIES IMPORTED_LOCATION "${JEMALLOC}")
|
||||
target_include_directories(jemalloc INTERFACE "${JEMALLOC_INCLUDE_DIR}")
|
||||
target_link_libraries(jemalloc INTERFACE im_jemalloc im_jemalloc_pic)
|
||||
else()
|
||||
include(ExternalProject)
|
||||
set(JEMALLOC_DIR "${CMAKE_BINARY_DIR}/jemalloc")
|
||||
ExternalProject_add(Jemalloc_project
|
||||
URL "https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2"
|
||||
URL_HASH SHA256=34330e5ce276099e2e8950d9335db5a875689a4c6a56751ef3b1d8c537f887f6
|
||||
BUILD_BYPRODUCTS "${JEMALLOC_DIR}/include/jemalloc/jemalloc.h"
|
||||
"${JEMALLOC_DIR}/lib/libjemalloc.a"
|
||||
"${JEMALLOC_DIR}/lib/libjemalloc_pic.a"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${JEMALLOC_DIR} --enable-static --disable-cxx
|
||||
BUILD_IN_SOURCE ON
|
||||
BUILD_COMMAND make
|
||||
INSTALL_DIR "${JEMALLOC_DIR}"
|
||||
INSTALL_COMMAND make install)
|
||||
add_dependencies(im_jemalloc Jemalloc_project)
|
||||
add_dependencies(im_jemalloc_pic Jemalloc_project)
|
||||
set_target_properties(im_jemalloc_pic PROPERTIES IMPORTED_LOCATION "${JEMALLOC_DIR}/lib/libjemalloc_pic.a")
|
||||
set_target_properties(im_jemalloc PROPERTIES IMPORTED_LOCATION "${JEMALLOC_DIR}/lib/libjemalloc.a")
|
||||
target_include_directories(jemalloc INTERFACE "${JEMALLOC_DIR}/include")
|
||||
target_link_libraries(jemalloc INTERFACE im_jemalloc_pic im_jemalloc)
|
||||
endif()
|
|
@ -113,7 +113,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SourceVersion.h.cmake ${CMAKE_CURRENT
|
|||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
||||
|
||||
add_flow_target(STATIC_LIBRARY NAME flow SRCS ${FLOW_SRCS})
|
||||
target_link_libraries(flow PRIVATE stacktrace)
|
||||
target_link_libraries(flow PRIVATE stacktrace jemalloc)
|
||||
if (NOT APPLE AND NOT WIN32)
|
||||
set (FLOW_LIBS ${FLOW_LIBS} rt)
|
||||
elseif(WIN32)
|
||||
|
|
Loading…
Reference in New Issue