2022-06-29 10:59:44 +08:00
|
|
|
# Download and build Jemalloc
|
|
|
|
|
2023-10-09 19:37:04 +08:00
|
|
|
set(JEMALLOC_VERSION 5.3.0)
|
2022-06-29 10:59:44 +08:00
|
|
|
set(JEMALLOC_NAME jemalloc-${JEMALLOC_VERSION})
|
|
|
|
set(JEMALLOC_TAR_PATH ${DEP_ROOT_DIR}/${JEMALLOC_NAME}.tar.bz2)
|
|
|
|
|
|
|
|
list(APPEND jemalloc_CONFIG_ARGS --disable-initial-exec-tls)
|
2023-10-09 19:37:04 +08:00
|
|
|
#list(APPEND jemalloc_CONFIG_ARGS --without-export)
|
|
|
|
if (ENABLE_JEMALLOC_STAT)
|
|
|
|
list(APPEND jemalloc_CONFIG_ARGS --enable-stats)
|
|
|
|
message(STATUS "Jemalloc stats enabled")
|
|
|
|
else ()
|
2022-06-29 10:59:44 +08:00
|
|
|
list(APPEND jemalloc_CONFIG_ARGS --disable-stats)
|
2023-10-09 19:37:04 +08:00
|
|
|
message(STATUS "Jemalloc stats disabled")
|
|
|
|
endif ()
|
2022-06-29 10:59:44 +08:00
|
|
|
list(APPEND jemalloc_CONFIG_ARGS --disable-libdl)
|
|
|
|
#list(APPEND jemalloc_CONFIG_ARGS --disable-cxx)
|
|
|
|
#list(APPEND jemalloc_CONFIG_ARGS --with-jemalloc-prefix=je_)
|
|
|
|
#list(APPEND jemalloc_CONFIG_ARGS --enable-debug)
|
|
|
|
|
|
|
|
if(NOT EXISTS ${JEMALLOC_TAR_PATH})
|
2023-10-09 19:37:04 +08:00
|
|
|
set(JEMALLOC_URL https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_VERSION}/${JEMALLOC_NAME}.tar.bz2)
|
|
|
|
message(STATUS "Downloading ${JEMALLOC_NAME} from ${JEMALLOC_URL}")
|
|
|
|
file(DOWNLOAD ${JEMALLOC_URL} ${JEMALLOC_TAR_PATH} SHOW_PROGRESS STATUS JEMALLOC_DOWNLOAD_STATUS LOG JEMALLOC_DOWNLOAD_LOG)
|
|
|
|
list(GET JEMALLOC_DOWNLOAD_STATUS 0 JEMALLOC_DOWNLOAD_STATUS_CODE)
|
|
|
|
if(NOT JEMALLOC_DOWNLOAD_STATUS_CODE EQUAL 0)
|
|
|
|
file(REMOVE ${JEMALLOC_TAR_PATH})
|
|
|
|
message(STATUS "${JEMALLOC_DOWNLOAD_LOG}")
|
|
|
|
message(FATAL_ERROR "${JEMALLOC_NAME} download failed! error is ${JEMALLOC_DOWNLOAD_STATUS}")
|
|
|
|
return()
|
|
|
|
endif ()
|
2022-06-29 10:59:44 +08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
SET( DIR_CONTAINING_JEMALLOC ${DEP_ROOT_DIR}/${JEMALLOC_NAME} )
|
|
|
|
|
|
|
|
if(NOT EXISTS ${DIR_CONTAINING_JEMALLOC})
|
|
|
|
message(STATUS "Extracting jemalloc...")
|
|
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${JEMALLOC_TAR_PATH} WORKING_DIRECTORY ${DEP_ROOT_DIR})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
if(NOT EXISTS ${DIR_CONTAINING_JEMALLOC}/Makefile)
|
|
|
|
message("Configuring jemalloc locally...")
|
|
|
|
# Builds with "--with-jemalloc-prefix=je_" on OSX
|
|
|
|
# SET( BASH_COMMAND_TO_RUN bash -l -c "cd ${DIR_CONTAINING_JEMALLOC} && ./configure ${jemalloc_CONFIG_ARGS}" )
|
|
|
|
#
|
|
|
|
# EXECUTE_PROCESS( COMMAND ${BASH_COMMAND_TO_RUN}
|
|
|
|
# WORKING_DIRECTORY ${DIR_CONTAINING_JEMALLOC} RESULT_VARIABLE JEMALLOC_CONFIGURE )
|
|
|
|
|
|
|
|
execute_process(COMMAND ./configure ${jemalloc_CONFIG_ARGS} WORKING_DIRECTORY ${DIR_CONTAINING_JEMALLOC} RESULT_VARIABLE JEMALLOC_CONFIGURE)
|
|
|
|
if(NOT JEMALLOC_CONFIGURE EQUAL 0)
|
|
|
|
message(FATAL_ERROR "${JEMALLOC_NAME} configure failed!")
|
|
|
|
message("${JEMALLOC_CONFIGURE}")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT EXISTS ${DIR_CONTAINING_JEMALLOC}/lib/libjemalloc.a)
|
|
|
|
message("Building jemalloc locally...")
|
|
|
|
execute_process(COMMAND make "build_lib_static" WORKING_DIRECTORY ${DIR_CONTAINING_JEMALLOC})
|
|
|
|
if(NOT EXISTS ${DIR_CONTAINING_JEMALLOC}/lib/libjemalloc.a)
|
|
|
|
message(FATAL_ERROR "${JEMALLOC_NAME} build failed!")
|
|
|
|
endif()
|
|
|
|
endif()
|