mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 10:40:05 +08:00
静态连接到jemalloc库: #1759
This commit is contained in:
parent
d622481619
commit
07982b7243
@ -22,6 +22,10 @@ endif()
|
|||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
#加载自定义模块
|
#加载自定义模块
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
set(DEP_ROOT_DIR ${CMAKE_SOURCE_DIR}/3rdpart/external-${CMAKE_SYSTEM_NAME})
|
||||||
|
if(NOT EXISTS ${DEP_ROOT_DIR})
|
||||||
|
file(MAKE_DIRECTORY ${DEP_ROOT_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
find_program(CCACHE_FOUND ccache)
|
find_program(CCACHE_FOUND ccache)
|
||||||
if(CCACHE_FOUND)
|
if(CCACHE_FOUND)
|
||||||
@ -108,6 +112,7 @@ option(ENABLE_MSVC_MT "Enable MSVC Mt/Mtd lib" true)
|
|||||||
option(ENABLE_API_STATIC_LIB "Enable mk_api static lib" false)
|
option(ENABLE_API_STATIC_LIB "Enable mk_api static lib" false)
|
||||||
option(USE_SOLUTION_FOLDERS "Enable solution dir supported" ON)
|
option(USE_SOLUTION_FOLDERS "Enable solution dir supported" ON)
|
||||||
option(ENABLE_SRT "Enable SRT" true)
|
option(ENABLE_SRT "Enable SRT" true)
|
||||||
|
option(ENABLE_JEMALLOC_STATIC "Enable static linking to the jemalloc library" false)
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Solution folders:
|
# Solution folders:
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@ -299,6 +304,13 @@ if (ENABLE_FFMPEG)
|
|||||||
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if(ENABLE_JEMALLOC_STATIC)
|
||||||
|
include(cmake/Jemalloc.cmake)
|
||||||
|
include_directories(${DEP_ROOT_DIR}/${JEMALLOC_NAME}/include/jemalloc)
|
||||||
|
link_directories(${DEP_ROOT_DIR}/${JEMALLOC_NAME}/lib)
|
||||||
|
set(JEMALLOC_ROOT_DIR "${DEP_ROOT_DIR}/${JEMALLOC_NAME}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
#默认链接jemalloc库避免内存碎片
|
#默认链接jemalloc库避免内存碎片
|
||||||
find_package(JEMALLOC QUIET)
|
find_package(JEMALLOC QUIET)
|
||||||
if (JEMALLOC_FOUND)
|
if (JEMALLOC_FOUND)
|
||||||
|
@ -1,16 +1,49 @@
|
|||||||
|
|
||||||
|
|
||||||
find_path(JEMALLOC_INCLUDE_DIR
|
# Tries to find Jemalloc headers and libraries.
|
||||||
|
#
|
||||||
|
# Usage of this module as follows:
|
||||||
|
#
|
||||||
|
# find_package(jemalloc)
|
||||||
|
#
|
||||||
|
# Variables used by this module, they can change the default behaviour and need
|
||||||
|
# to be set before calling find_package:
|
||||||
|
#
|
||||||
|
# JEMALLOC_ROOT_DIR Set this variable to the root installation of
|
||||||
|
# Jemalloc if the module has problems finding
|
||||||
|
# the proper installation path.
|
||||||
|
#
|
||||||
|
# Variables defined by this module:
|
||||||
|
#
|
||||||
|
# JEMALLOC_FOUND System has Jemalloc libs/headers
|
||||||
|
# JEMALLOC_LIBRARIES The Jemalloc libraries
|
||||||
|
# JEMALLOC_INCLUDE_DIR The location of Jemalloc headers
|
||||||
|
if (ENABLE_JEMALLOC_STATIC)
|
||||||
|
find_path(JEMALLOC_INCLUDE_DIR
|
||||||
|
NAMES jemalloc.h
|
||||||
|
HINTS ${JEMALLOC_ROOT_DIR}/include/jemalloc
|
||||||
|
NO_DEFAULT_PATH)
|
||||||
|
|
||||||
|
find_library(JEMALLOC_LIBRARIES
|
||||||
|
NAMES jemalloc
|
||||||
|
HINTS ${JEMALLOC_ROOT_DIR}/lib
|
||||||
|
NO_DEFAULT_PATH)
|
||||||
|
else ()
|
||||||
|
find_path(JEMALLOC_INCLUDE_DIR
|
||||||
NAMES jemalloc/jemalloc.h
|
NAMES jemalloc/jemalloc.h
|
||||||
)
|
)
|
||||||
|
|
||||||
find_library(JEMALLOC_LIBRARY
|
find_library(JEMALLOC_LIBRARIES
|
||||||
NAMES jemalloc
|
NAMES jemalloc
|
||||||
)
|
)
|
||||||
|
|
||||||
set(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
|
endif ()
|
||||||
set(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(JEMALLOC DEFAULT_MSG
|
||||||
|
JEMALLOC_LIBRARIES
|
||||||
|
JEMALLOC_INCLUDE_DIR)
|
||||||
|
|
||||||
find_package_handle_standard_args(JEMALLOC DEFAULT_MSG JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
|
mark_as_advanced(
|
||||||
|
JEMALLOC_ROOT_DIR
|
||||||
|
JEMALLOC_LIBRARIES
|
||||||
|
JEMALLOC_INCLUDE_DIR)
|
||||||
|
50
cmake/Jemalloc.cmake
Normal file
50
cmake/Jemalloc.cmake
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Download and build Jemalloc
|
||||||
|
|
||||||
|
set(JEMALLOC_VERSION 5.2.1)
|
||||||
|
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)
|
||||||
|
list(APPEND jemalloc_CONFIG_ARGS --without-export)
|
||||||
|
list(APPEND jemalloc_CONFIG_ARGS --disable-stats)
|
||||||
|
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})
|
||||||
|
message(STATUS "Downloading ${JEMALLOC_NAME}...")
|
||||||
|
file(DOWNLOAD https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_VERSION}/${JEMALLOC_NAME}.tar.bz2
|
||||||
|
${JEMALLOC_TAR_PATH})
|
||||||
|
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()
|
Loading…
Reference in New Issue
Block a user