Allow using system jemalloc for non-static build

This commit is contained in:
Jason Rhinelander 2021-06-01 12:31:16 -03:00
parent f5adf7fece
commit c44694bc23
2 changed files with 37 additions and 29 deletions

View File

@ -1,6 +1,6 @@
local default_deps_base='libsystemd-dev libboost-program-options-dev libcurl4-openssl-dev ' +
'libsqlite3-dev libsodium-dev libssl-dev pkg-config autoconf make';
'libsqlite3-dev libsodium-dev libssl-dev pkg-config autoconf make libjemalloc-dev';
local default_deps_nocxx='libsodium-dev ' + default_deps_base; // libsodium-dev needs to be >= 1.0.18
local default_deps='g++ ' + default_deps_nocxx; // g++ sometimes needs replacement
local docker_base = 'registry.oxen.rocks/lokinet-ci-';

View File

@ -147,37 +147,45 @@ add_library(cpr::cpr ALIAS cpr)
option(USE_JEMALLOC "Use jemalloc for memory allocations" ON)
option(FORCE_JEMALLOC_SUBMODULE "force using jemalloc submodule" OFF)
add_library(jemalloc INTERFACE)
add_library(jemalloc::jemalloc ALIAS jemalloc)
if (USE_JEMALLOC)
set(jemalloc_cc "${CMAKE_C_COMPILER}")
set(jemalloc_cxx "${CMAKE_CXX_COMPILER}")
if(CMAKE_C_COMPILER_LAUNCHER)
set(jemalloc_cc "${CMAKE_C_COMPILER_LAUNCHER} ${jemalloc_cc}")
endif()
if(CMAKE_CXX_COMPILER_LAUNCHER)
set(jemalloc_cxx "${CMAKE_CXX_COMPILER_LAUNCHER} ${jemalloc_cxx}")
if(NOT STATIC AND NOT FORCE_JEMALLOC_SUBMODULE)
pkg_check_modules(JEMALLOC jemalloc>=5.2 IMPORTED_TARGET)
endif()
if(JEMALLOC_FOUND)
target_link_libraries(jemalloc INTERFACE PkgConfig::JEMALLOC)
else()
set(jemalloc_cc "${CMAKE_C_COMPILER}")
set(jemalloc_cxx "${CMAKE_CXX_COMPILER}")
if(CMAKE_C_COMPILER_LAUNCHER)
set(jemalloc_cc "${CMAKE_C_COMPILER_LAUNCHER} ${jemalloc_cc}")
endif()
if(CMAKE_CXX_COMPILER_LAUNCHER)
set(jemalloc_cxx "${CMAKE_CXX_COMPILER_LAUNCHER} ${jemalloc_cxx}")
endif()
include(ExternalProject)
ExternalProject_Add(jemalloc_external
PREFIX jemalloc
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc
BINARY_DIR jemalloc
CONFIGURE_COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc && ./autogen.sh
COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/jemalloc && ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc/configure
--enable-static --disable-shared --prefix=<INSTALL_DIR>
"CC=${jemalloc_cc}" "CXX=${jemalloc_cxx}"
EXCLUDE_FROM_ALL TRUE
INSTALL_DIR jemalloc-install
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/lib/libjemalloc.a
)
add_library(jemalloc_a STATIC IMPORTED GLOBAL)
add_dependencies(jemalloc_a jemalloc_external)
set_target_properties(jemalloc_a PROPERTIES
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/lib/libjemalloc.a
)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/include)
target_link_libraries(jemalloc_a INTERFACE ${CMAKE_DL_LIBS})
target_link_libraries(jemalloc INTERFACE jemalloc_a)
include(ExternalProject)
ExternalProject_Add(jemalloc_external
PREFIX jemalloc
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc
BINARY_DIR jemalloc
CONFIGURE_COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc && ./autogen.sh
COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/jemalloc && ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc/configure
--enable-static --disable-shared --prefix=<INSTALL_DIR>
"CC=${jemalloc_cc}" "CXX=${jemalloc_cxx}"
EXCLUDE_FROM_ALL TRUE
INSTALL_DIR jemalloc-install
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/lib/libjemalloc.a
)
add_library(jemalloc_a STATIC IMPORTED GLOBAL)
add_dependencies(jemalloc_a jemalloc_external)
set_target_properties(jemalloc_a PROPERTIES
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/lib/libjemalloc.a
)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/jemalloc-install/include)
target_link_libraries(jemalloc_a INTERFACE ${CMAKE_DL_LIBS})
target_link_libraries(jemalloc INTERFACE jemalloc_a)
endif()
endif()