set(jemalloc_VERSION 5.3.0)
if (NOT "$ENV{DS_LOCAL_LIBS_DIR}" STREQUAL "")
set(jemalloc_URL "$ENV{DS_LOCAL_LIBS_DIR}/opensource_third_party/5.3.0.zip")
else()
set(jemalloc_URL "https://gitee.com/mirrors/jemalloc/repository/archive/5.3.0.zip")
endif()
set(jemalloc_SHA256 "fcd383b168b72904f777e500631996366a633d1c40714f1601b7e739eb054613")
set(jemalloc_CONF_OPTIONS
--with-malloc-conf=narenas:1,background_thread:true,max_background_threads:100,oversize_threshold:107374182400,lg_extent_max_active_fit:63
--disable-cache-oblivious
--disable-zone-allocator
--without-export
--disable-shared
--enable-static
--disable-cxx
--enable-stats
--disable-initial-exec-tls
--with-jemalloc-prefix=datasystem_)
if (DEFINED ENV{DS_JEMALLOC_LG_PAGE})
message(STATUS "jemalloc custom page size=2^$ENV{DS_JEMALLOC_LG_PAGE}")
list(APPEND jemalloc_CONF_OPTIONS --with-lg-page=$ENV{DS_JEMALLOC_LG_PAGE})
endif()
set(jemalloc_C_FLAGS ${THIRDPARTY_SAFE_FLAGS})
set(jemalloc_LINK_FLAGS "-Wl,-z,now")
set(jemalloc_AUTOGEN sh autogen.sh)
set(_ORG_LD_FLAGS $ENV{LDFLAGS})
set(ENV{LDFLAGS} "${THIRDPARTY_SAFE_FLAGS} ${_ORG_LD_FLAGS}")
add_thirdparty_lib(Jemalloc
URL ${jemalloc_URL}
SHA256 ${jemalloc_SHA256}
FAKE_SHA256 ${jemalloc_FAKE_SHA256}
VERSION ${jemalloc_VERSION}
CONF_OPTIONS ${jemalloc_CONF_OPTIONS}
C_FLAGS ${jemalloc_C_FLAGS}
TOOLCHAIN configure
PRE_CONFIGURE ${jemalloc_AUTOGEN})
set(Jemalloc_DIR ${Jemalloc_ROOT})
find_package(Jemalloc ${jemalloc_VERSION} REQUIRED)
include_directories(${JEMALLOC_INCLUDE_DIR})
# build jemalloc shared library
set(JemallocShared_CONF_OPTIONS
--enable-shared
--disable-static
--disable-cxx
--enable-stats)
if (DEFINED ENV{DS_JEMALLOC_LG_PAGE})
list(APPEND JemallocShared_CONF_OPTIONS --with-lg-page=$ENV{DS_JEMALLOC_LG_PAGE})
endif()
if (SUPPORT_JEPROF)
message(STATUS "Support jemalloc memory profiling.")
add_compile_definitions(SUPPORT_JEPROF)
list(APPEND JemallocShared_CONF_OPTIONS --enable-prof)
endif ()
add_thirdparty_lib(JemallocShared
URL ${jemalloc_URL}
SHA256 ${jemalloc_SHA256}
FAKE_SHA256 ${jemalloc_FAKE_SHA256}
VERSION ${jemalloc_VERSION}
CONF_OPTIONS ${JemallocShared_CONF_OPTIONS}
C_FLAGS ${jemalloc_C_FLAGS}
LINK_FLAGS ${jemalloc_LINK_FLAGS}
TOOLCHAIN configure
PRE_CONFIGURE ${jemalloc_AUTOGEN})
set(ENV{LDFLAGS} ${_ORG_LD_FLAGS})
set(JemallocShared_DIR ${JemallocShared_ROOT})
find_package(JemallocShared ${jemalloc_VERSION} REQUIRED)