diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt index f8dfeeea02a79..3ee94d75377bf 100644 --- a/be/CMakeLists.txt +++ b/be/CMakeLists.txt @@ -211,8 +211,8 @@ set_target_properties(openssl PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib add_library(leveldb STATIC IMPORTED) set_target_properties(leveldb PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libleveldb.a) -add_library(jemalloc STATIC IMPORTED) -set_target_properties(jemalloc PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib64/libjemalloc.a) +add_library(jemalloc_for_arrow STATIC IMPORTED) +set_target_properties(jemalloc_for_arrow PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib64/libjemalloc.a) add_library(brotlicommon STATIC IMPORTED) set_target_properties(brotlicommon PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib64/libbrotlicommon.a) @@ -508,7 +508,8 @@ set(STARROCKS_DEPENDENCIES leveldb bitshuffle roaring - jemalloc + # arrow compiles jemalloc with a specific prefix, we should keep it + jemalloc_for_arrow brotlicommon brotlidec brotlienc diff --git a/thirdparty/build-thirdparty.sh b/thirdparty/build-thirdparty.sh index 99b0a25a98196..f8bd3ee2dde5b 100755 --- a/thirdparty/build-thirdparty.sh +++ b/thirdparty/build-thirdparty.sh @@ -833,6 +833,21 @@ build_vpack() { make install } +# jemalloc +build_jemalloc() { + OLD_CFLAGS=$CFLAGS + check_if_source_exist $JEMALLOC_SOURCE + + unset CFLAGS + export CFLAGS="-O3 -fno-omit-frame-pointer -fPIC -g" + cd $TP_SOURCE_DIR/$JEMALLOC_SOURCE + ./configure --prefix=${TP_INSTALL_DIR} --with-jemalloc-prefix=je --enable-prof --disable-cxx --disable-libdl --disable-shared + make -j$PARALLEL + make install + mv $TP_INSTALL_DIR/lib/libjemalloc.a $TP_INSTALL_DIR/lib/libjemalloc_for_starrocks.a + export CFLAGS=$OLD_CFLAGS +} + export CXXFLAGS="-O3 -fno-omit-frame-pointer -Wno-class-memaccess -fPIC -g -I${TP_INCLUDE_DIR}" export CPPFLAGS=$CXXFLAGS # https://stackoverflow.com/questions/42597685/storage-size-of-timespec-isnt-known @@ -875,6 +890,7 @@ build_mariadb build_aliyun_oss_jars build_aws_cpp_sdk build_vpack +build_jemalloc if [[ "${MACHINE_TYPE}" != "aarch64" ]]; then build_breakpad diff --git a/thirdparty/download-thirdparty.sh b/thirdparty/download-thirdparty.sh index d0e45577e8861..ceb89e516aa82 100755 --- a/thirdparty/download-thirdparty.sh +++ b/thirdparty/download-thirdparty.sh @@ -174,6 +174,7 @@ UNZIP_CMD="unzip" SUFFIX_TGZ="\.(tar\.gz|tgz)$" SUFFIX_XZ="\.tar\.xz$" SUFFIX_ZIP="\.zip$" +SUFFIX_BZ2="\.bz2$" # temporary directory for unpacking # package is unpacked in tmp_dir and then renamed. mkdir -p $TP_SOURCE_DIR/tmp_dir @@ -206,6 +207,13 @@ do echo "Failed to unzip ${!NAME}" exit 1 fi + elif [[ "${!NAME}" =~ $SUFFIX_BZ2 ]]; then + echo "$TP_SOURCE_DIR/${!NAME}" + echo "$TP_SOURCE_DIR/${!SOURCE}" + if ! $TAR_CMD jxvf "$TP_SOURCE_DIR/${!NAME}" -C $TP_SOURCE_DIR/tmp_dir; then + echo "Failed to untar ${!NAME}" + exit 1 + fi else echo "nothing has been done with ${!NAME}" continue @@ -384,5 +392,14 @@ else echo "$AWS_SDK_CPP_SOURCE not patched" fi +# patch jemalloc_hook +cd $TP_SOURCE_DIR/$JEMALLOC_SOURCE +if [ ! -f $PATCHED_MARK ] && [ $JEMALLOC_SOURCE = "jemalloc-5.2.1" ]; then + patch -p0 < $TP_PATCH_DIR/jemalloc_hook.patch + touch $PATCHED_MARK +fi +cd - +echo "Finished patching $JEMALLOC_SOURCE" + cd - diff --git a/thirdparty/patches/jemalloc_hook.patch b/thirdparty/patches/jemalloc_hook.patch new file mode 100644 index 0000000000000..da6e2b54025e8 --- /dev/null +++ b/thirdparty/patches/jemalloc_hook.patch @@ -0,0 +1,11 @@ +--- include/jemalloc/jemalloc.sh 2022-05-16 18:45:40.072099757 +0800 ++++ include/jemalloc/jemalloc.sh 2022-05-16 18:45:44.994620722 +0800 +@@ -12,7 +12,7 @@ extern "C" { + EOF + + for hdr in jemalloc_defs.h jemalloc_rename.h jemalloc_macros.h \ +- jemalloc_protos.h jemalloc_typedefs.h jemalloc_mangle.h ; do ++ jemalloc_protos.h jemalloc_typedefs.h ; do + cat "${objroot}include/jemalloc/${hdr}" \ + | grep -v 'Generated from .* by configure\.' \ + | sed -e 's/ $//g' \ No newline at end of file