blob: 67a0cc5f11677c186d2d9a48553424596256255a [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Building Jemalloc
macro(build_jemalloc)
message(STATUS "Building Jemalloc from Source")
if(DEFINED ENV{GLUTEN_JEMALLOC_URL})
set(JEMALLOC_SOURCE_URL "$ENV{GLUTEN_JEMALLOC_URL}")
else()
set(JEMALLOC_BUILD_VERSION "5.3.0")
set(JEMALLOC_SOURCE_URL
"https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_BUILD_VERSION}/jemalloc-${JEMALLOC_BUILD_VERSION}.tar.bz2"
"https://github.com/ursa-labs/thirdparty/releases/download/latest/jemalloc-${JEMALLOC_BUILD_VERSION}.tar.bz2"
)
endif()
set(JEMALLOC_PREFIX "/usr/local")
set(JEMALLOC_LIB_DIR "${JEMALLOC_PREFIX}/lib")
set(JEMALLOC_INCLUDE_DIR "${JEMALLOC_PREFIX}/include")
set(JEMALLOC_STATIC_LIB
"${JEMALLOC_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}jemalloc_pic${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(JEMALLOC_INCLUDE "${JEMALLOC_PREFIX}/include")
set(JEMALLOC_CONFIGURE_ARGS
"AR=${CMAKE_AR}"
"CC=${CMAKE_C_COMPILER}"
"--prefix=${JEMALLOC_PREFIX}"
"--libdir=${JEMALLOC_LIB_DIR}"
# The below prefix can be enabled if jemalloc is used in some selective
# code for debugging or profiling. "--with-jemalloc-prefix=je_gluten_"
# "--with-private-namespace=je_gluten_private_" This should be commented
# for dynamically linking. "--without-export"
"--disable-cxx"
"--disable-libdl"
# Enable heap profiling and leak detection functionality.
"--enable-prof"
# For fixing an issue when loading native lib: cannot allocate memory in
# static TLS block.
"--disable-initial-exec-tls"
"CFLAGS=-fPIC"
"CXXFLAGS=-fPIC")
set(JEMALLOC_BUILD_COMMAND ${MAKE} ${MAKE_BUILD_ARGS})
ExternalProject_Add(
jemalloc_ep
URL ${JEMALLOC_SOURCE_URL}
PATCH_COMMAND touch doc/jemalloc.3 doc/jemalloc.html
CONFIGURE_COMMAND "./configure" ${JEMALLOC_CONFIGURE_ARGS}
BUILD_COMMAND ${JEMALLOC_BUILD_COMMAND}
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS "${JEMALLOC_STATIC_LIB}"
INSTALL_COMMAND make install)
file(MAKE_DIRECTORY "${JEMALLOC_INCLUDE_DIR}")
add_library(jemalloc::jemalloc SHARED IMPORTED)
set_target_properties(
jemalloc::jemalloc
PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads
IMPORTED_LOCATION "${JEMALLOC_LIB_DIR}/libjemalloc.so"
INTERFACE_INCLUDE_DIRECTORIES "${JEMALLOC_INCLUDE_DIR}")
add_dependencies(jemalloc::jemalloc jemalloc_ep)
endmacro()