You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/07/18 02:50:36 UTC

[doris] branch master updated: [enhancement](thirdparty) Support building thirdparty on macOS (#10677)

This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new e3c19ded44 [enhancement](thirdparty) Support building thirdparty on macOS (#10677)
e3c19ded44 is described below

commit e3c19ded443e25daf8d888c3e338787ec05e1476
Author: Adonis Ling <ad...@gmail.com>
AuthorDate: Mon Jul 18 10:50:30 2022 +0800

    [enhancement](thirdparty) Support building thirdparty on macOS (#10677)
---
 .editorconfig                       |    2 +-
 thirdparty/build-thirdparty.sh      | 1065 ++++++++++++++++++++---------------
 thirdparty/download-thirdparty.sh   |   10 +-
 thirdparty/patches/brpc-1.1.0.patch |  461 +++++++++++++++
 thirdparty/vars.sh                  |   18 +-
 5 files changed, 1080 insertions(+), 476 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index 740928132a..329f4bba7d 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -22,6 +22,6 @@ charset = utf-8
 end_of_line = lf
 insert_final_newline = true
 
-[*.{java,xml,py}]
+[*.{java,xml,py,sh}]
 indent_style = space
 indent_size = 4
diff --git a/thirdparty/build-thirdparty.sh b/thirdparty/build-thirdparty.sh
index fa92259c21..ee20ac5fcf 100755
--- a/thirdparty/build-thirdparty.sh
+++ b/thirdparty/build-thirdparty.sh
@@ -28,45 +28,61 @@
 #################################################################################
 set -e
 
-curdir=`dirname "$0"`
-curdir=`cd "$curdir"; pwd`
+curdir=$(dirname "$0")
+curdir=$(
+    cd "$curdir"
+    pwd
+)
 
 export DORIS_HOME=$curdir/..
 export TP_DIR=$curdir
 
 # Check args
 usage() {
-  echo "
+    echo "
 Usage: $0 <options>
   Optional options:
      -j                 build thirdparty parallel
   "
-  exit 1
+    exit 1
 }
 
-OPTS=$(getopt \
-  -n $0 \
-  -o '' \
-  -o 'h' \
-  -l 'help' \
-  -o 'j:' \
-  -- "$@")
-
-if [ $? != 0 ] ; then
+if ! OPTS=$(getopt \
+    -n "$0" \
+    -o '' \
+    -o 'h' \
+    -l 'help' \
+    -o 'j:' \
+    -- "$@"); then
     usage
 fi
 
 eval set -- "$OPTS"
 
-PARALLEL=$[$(nproc)/4+1]
-if [[ $# -ne 1 ]] ; then
+PARALLEL=$(($(nproc) / 4 + 1))
+if [[ $# -ne 1 ]]; then
     while true; do
         case "$1" in
-            -j) PARALLEL=$2; shift 2 ;;
-            -h) HELP=1; shift ;;
-            --help) HELP=1; shift ;;
-            --) shift ;  break ;;
-            *) echo "Internal error" ; exit 1 ;;
+        -j)
+            PARALLEL=$2
+            shift 2
+            ;;
+        -h)
+            HELP=1
+            shift
+            ;;
+        --help)
+            HELP=1
+            shift
+            ;;
+        --)
+            shift
+            break
+            ;;
+        *)
+            echo "Internal error"
+            exit 1
+            ;;
         esac
     done
 fi
@@ -83,7 +99,7 @@ echo "Get params:
 # include custom environment variables
 if [[ -f ${DORIS_HOME}/env.sh ]]; then
     export BUILD_THIRDPARTY_WIP=1
-    . ${DORIS_HOME}/env.sh
+    . "${DORIS_HOME}/env.sh"
     export BUILD_THIRDPARTY_WIP=
 fi
 
@@ -92,29 +108,27 @@ if [[ ! -f ${TP_DIR}/download-thirdparty.sh ]]; then
     exit 1
 fi
 
-if [ ! -f ${TP_DIR}/vars.sh ]; then
+if [[ ! -f ${TP_DIR}/vars.sh ]]; then
     echo "vars.sh is missing".
     exit 1
 fi
-. ${TP_DIR}/vars.sh
+. "${TP_DIR}/vars.sh"
 
-cd $TP_DIR
+cd "${TP_DIR}"
 
 # Download thirdparties.
-${TP_DIR}/download-thirdparty.sh
+"${TP_DIR}/download-thirdparty.sh"
 
 export LD_LIBRARY_PATH=$TP_DIR/installed/lib:$LD_LIBRARY_PATH
 
 # toolchain specific warning options and settings
-if [[ "$CC" == *gcc ]]
-then
+if [[ "$CC" == *gcc ]]; then
     warning_uninitialized=-Wno-maybe-uninitialized
     warning_stringop_truncation=-Wno-stringop-truncation
     warning_class_memaccess=-Wno-class-memaccess
     warning_array_parameter=-Wno-array-parameter
     boost_toolset=gcc
-elif [[ "$CC" == *clang ]]
-then
+elif [[ "$CC" == *clang ]]; then
     warning_uninitialized=-Wno-uninitialized
     warning_shadow=-Wno-shadow
     warning_dangling_gsl=-Wno-dangling-gsl
@@ -127,9 +141,11 @@ then
     libhdfs_cxx17=-std=c++1z
 fi
 
+KERNEL="$(uname -s)"
+
 # prepare installed prefix
-mkdir -p ${TP_DIR}/installed/lib64
-pushd  ${TP_DIR}/installed/
+mkdir -p "${TP_DIR}/installed/lib64"
+pushd "${TP_DIR}/installed"/
 ln -sf lib64 lib
 popd
 
@@ -137,10 +153,10 @@ check_prerequest() {
     local CMD=$1
     local NAME=$2
     if ! $CMD; then
-        echo $NAME is missing
+        echo "$NAME is missing"
         exit 1
     else
-        echo $NAME is found
+        echo "$NAME is found"
     fi
 }
 
@@ -165,9 +181,9 @@ check_prerequest "automake --version" "automake"
 check_prerequest "libtoolize --version" "libtool"
 
 # aclocal_version should equal to automake_version
-aclocal_version=`aclocal --version | sed -n '1p'|awk 'NF>1{print $NF}'`
-automake_version=`automake --version | sed -n '1p'|awk 'NF>1{print $NF}'`
-if [ ${aclocal_version} != ${automake_version} ] ; then
+aclocal_version=$(aclocal --version | sed -n '1p' | awk 'NF>1{print $NF}')
+automake_version=$(automake --version | sed -n '1p' | awk 'NF>1{print $NF}')
+if [[ "${aclocal_version}" != "${automake_version}" ]]; then
     echo "Error: aclocal version(${aclocal_version}) is not equal to automake version(${automake_version})."
     exit 1
 fi
@@ -189,19 +205,18 @@ fi
 # build all thirdparties
 #########################
 
-
 # Name of cmake build directory in each thirdpary project.
 # Do not use `build`, because many projects contained a file named `BUILD`
 # and if the filesystem is not case sensitive, `mkdir` will fail.
 BUILD_DIR=doris_build
 
 check_if_source_exist() {
-    if [ -z $1 ]; then
+    if [[ -z $1 ]]; then
         echo "dir should specified to check if exist."
         exit 1
     fi
 
-    if [ ! -d $TP_SOURCE_DIR/$1 ];then
+    if [[ ! -d $TP_SOURCE_DIR/$1 ]]; then
         echo "$TP_SOURCE_DIR/$1 does not exist."
         exit 1
     fi
@@ -209,300 +224,329 @@ check_if_source_exist() {
 }
 
 check_if_archieve_exist() {
-    if [ -z $1 ]; then
+    if [[ -z $1 ]]; then
         echo "archieve should specified to check if exist."
         exit 1
     fi
 
-    if [ ! -f $TP_SOURCE_DIR/$1 ];then
+    if [[ ! -f $TP_SOURCE_DIR/$1 ]]; then
         echo "$TP_SOURCE_DIR/$1 does not exist."
         exit 1
     fi
 }
 
+remove_all_dylib() {
+    if [[ "${KERNEL}" == 'Darwin' ]]; then
+        find "${TP_INSTALL_DIR}/lib64" -name "*.dylib" -delete
+    fi
+}
+
 #libbacktrace
 build_libbacktrace() {
     check_if_source_exist $LIBBACKTRACE_SOURCE
     cd $TP_SOURCE_DIR/$LIBBACKTRACE_SOURCE
 
     CPPFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    CXXFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR
+        CXXFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix=$TP_INSTALL_DIR
     make -j $PARALLEL
     make install
 }
 
 # libevent
 build_libevent() {
-    check_if_source_exist $LIBEVENT_SOURCE
-    cd $TP_SOURCE_DIR/$LIBEVENT_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${LIBEVENT_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LIBEVENT_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
 
     CFLAGS="-std=c99 -fPIC -D_BSD_SOURCE -fno-omit-frame-pointer -g -ggdb -O2 -I${TP_INCLUDE_DIR}" \
-    CPPLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    ${CMAKE_CMD} -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DEVENT__DISABLE_TESTS=ON \
-    -DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_SAMPLES=ON -DEVENT__DISABLE_REGRESS=ON ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+        CPPLAGS="-I${TP_INCLUDE_DIR}" \
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DEVENT__DISABLE_TESTS=ON \
+        -DEVENT__DISABLE_OPENSSL=ON -DEVENT__DISABLE_SAMPLES=ON -DEVENT__DISABLE_REGRESS=ON ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
+    remove_all_dylib
 }
 
 build_openssl() {
-    MACHINE_TYPE=$(uname -m)
+    MACHINE_TYPE="$(uname -m)"
     OPENSSL_PLATFORM="linux-x86_64"
-    if [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
+    if [[ "${KERNEL}" == 'Darwin' ]]; then
+        OPENSSL_PLATFORM="darwin64-${MACHINE_TYPE}-cc"
+    elif [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
         OPENSSL_PLATFORM="linux-aarch64"
     fi
 
-    check_if_source_exist $OPENSSL_SOURCE
-    cd $TP_SOURCE_DIR/$OPENSSL_SOURCE
+    check_if_source_exist "${OPENSSL_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${OPENSSL_SOURCE}"
 
     CPPFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    CXXFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    LIBDIR="lib" \
-    ./Configure --prefix=$TP_INSTALL_DIR --with-rand-seed=devrandom -shared ${OPENSSL_PLATFORM}
+        CXXFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        LIBDIR="lib" \
+        ./Configure --prefix="${TP_INSTALL_DIR}" --with-rand-seed=devrandom -shared "${OPENSSL_PLATFORM}"
     # NOTE(amos): Never use '&&' to concat commands as it will eat error code
     # See https://mywiki.wooledge.org/BashFAQ/105 for more detail.
-    make -j $PARALLEL
+    make -j "${PARALLEL}"
     make install_sw
     # NOTE(zc): remove this dynamic library files to make libcurl static link.
     # If I don't remove this files, I don't known how to make libcurl link static library
-    if [ -f $TP_INSTALL_DIR/lib64/libcrypto.so ]; then
-        rm -rf $TP_INSTALL_DIR/lib64/libcrypto.so*
+    if [[ -f "${TP_INSTALL_DIR}/lib64/libcrypto.so" ]]; then
+        rm -rf "${TP_INSTALL_DIR}"/lib64/libcrypto.so*
     fi
-    if [ -f $TP_INSTALL_DIR/lib64/libssl.so ]; then
-        rm -rf $TP_INSTALL_DIR/lib64/libssl.so*
+    if [[ -f "${TP_INSTALL_DIR}/lib64/libssl.so" ]]; then
+        rm -rf "${TP_INSTALL_DIR}"/lib64/libssl.so*
     fi
+    remove_all_dylib
 }
 
 # thrift
 build_thrift() {
-    check_if_source_exist $THRIFT_SOURCE
-    cd $TP_SOURCE_DIR/$THRIFT_SOURCE
+    check_if_source_exist "${THRIFT_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${THRIFT_SOURCE}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        cppflags="-I${TP_INCLUDE_DIR}"
+        ldflags="-L${TP_LIB_DIR} --static"
+    else
+        cppflags="-I${TP_INCLUDE_DIR} -Wno-implicit-function-declaration"
+        ldflags="-L${TP_LIB_DIR}"
+    fi
 
-    echo ${TP_LIB_DIR}
     # NOTE(amos): libtool discard -static. --static works.
-    ./configure CPPFLAGS="-I${TP_INCLUDE_DIR}" LDFLAGS="-L${TP_LIB_DIR} --static" LIBS="-lcrypto -ldl -lssl" CFLAGS="-fPIC" \
-    --prefix=$TP_INSTALL_DIR --docdir=$TP_INSTALL_DIR/doc --enable-static --disable-shared --disable-tests \
-    --disable-tutorial --without-qt4 --without-qt5 --without-csharp --without-erlang --without-nodejs --without-nodets --without-swift \
-    --without-lua --without-perl --without-php --without-php_extension --without-dart --without-ruby --without-cl \
-    --without-haskell --without-go --without-haxe --without-d --without-python -without-java --without-dotnetcore -without-rs --with-cpp \
-    --with-libevent=$TP_INSTALL_DIR --with-boost=$TP_INSTALL_DIR --with-openssl=$TP_INSTALL_DIR
-
-    if [ -f compiler/cpp/thrifty.hh ];then
+    ./configure CPPFLAGS="${cppflags}" LDFLAGS="${ldflags}" LIBS="-lcrypto -ldl -lssl" CFLAGS="-fPIC" \
+        --prefix="${TP_INSTALL_DIR}" --docdir="${TP_INSTALL_DIR}/doc" --enable-static --disable-shared --disable-tests \
+        --disable-tutorial --without-qt4 --without-qt5 --without-csharp --without-erlang --without-nodejs --without-nodets --without-swift \
+        --without-lua --without-perl --without-php --without-php_extension --without-dart --without-ruby --without-cl \
+        --without-haskell --without-go --without-haxe --without-d --without-python -without-java --without-dotnetcore -without-rs --with-cpp \
+        --with-libevent="${TP_INSTALL_DIR}" --with-boost="${TP_INSTALL_DIR}" --with-openssl="${TP_INSTALL_DIR}"
+
+    if [[ -f compiler/cpp/thrifty.hh ]]; then
         mv compiler/cpp/thrifty.hh compiler/cpp/thrifty.h
     fi
 
-    make -j $PARALLEL && make install
+    make -j "${PARALLEL}" && make install
 }
 
 # protobuf
 build_protobuf() {
-    check_if_source_exist $PROTOBUF_SOURCE
-    cd $TP_SOURCE_DIR/$PROTOBUF_SOURCE
+    check_if_source_exist "${PROTOBUF_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${PROTOBUF_SOURCE}"
     rm -fr gmock
     # NOTE(amos): -Wl,--undefined=pthread_create force searching for pthread symbols.
     # See https://stackoverflow.com/a/65348893/1329147 for detailed explanation.
-    mkdir gmock && cd gmock && tar xf ${TP_SOURCE_DIR}/${GTEST_NAME} \
-    && mv ${GTEST_SOURCE} gtest && cd $TP_SOURCE_DIR/$PROTOBUF_SOURCE && ./autogen.sh
+    mkdir gmock && cd gmock && tar xf "${TP_SOURCE_DIR}/${GTEST_NAME}" &&
+        mv "${GTEST_SOURCE}" gtest && cd "${TP_SOURCE_DIR}/${PROTOBUF_SOURCE}" && ./autogen.sh
+
+    if [[ "${KERNEL}" == 'Darwin' ]]; then
+        ldflags="-L${TP_LIB_DIR}"
+    else
+        ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc -Wl,--undefined=pthread_create"
+    fi
+
     CXXFLAGS="-fPIC -O2 -I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc -Wl,--undefined=pthread_create" \
-    ./configure --prefix=${TP_INSTALL_DIR} --disable-shared --enable-static --with-zlib=${TP_INSTALL_DIR}/include
+        LDFLAGS="${ldflags}" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static --with-zlib="${TP_INSTALL_DIR}/include"
 
     # ATTN: If protoc is not built fully statically the linktime libc may newer than runtime.
     #       This will casue protoc cannot run
     #       If you really need to dynamically link protoc, please set the environment variable DYN_LINK_PROTOC=1
 
-    if [[ "${DYN_LINK_PROTOC}" == "1" ]]; then
+    if [[ "${DYN_LINK_PROTOC}" == "1" || "${KERNEL}" == 'Darwin' ]]; then
         echo "link protoc dynamiclly"
-    else 
+    else
         cd src
         sed -i 's/^AM_LDFLAGS\(.*\)$/AM_LDFLAGS\1 -all-static/' Makefile
         cd -
     fi
 
-    make -j $PARALLEL && make install
+    make -j "${PARALLEL}" && make install
 }
 
 # gflags
 build_gflags() {
-    check_if_source_exist $GFLAGS_SOURCE
+    check_if_source_exist "${GFLAGS_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$GFLAGS_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    cd "${TP_SOURCE_DIR}/${GFLAGS_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    ${CMAKE_CMD} -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_POSITION_INDEPENDENT_CODE=On ../
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_POSITION_INDEPENDENT_CODE=On ../
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # glog
 build_glog() {
-    check_if_source_exist $GLOG_SOURCE
-    cd $TP_SOURCE_DIR/$GLOG_SOURCE
+    check_if_source_exist "${GLOG_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${GLOG_SOURCE}"
 
     # to generate config.guess and config.sub to support aarch64
     rm -rf config.*
     autoreconf -i
 
     CPPFLAGS="-I${TP_INCLUDE_DIR} -fpermissive -fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --enable-frame-pointers --disable-shared --enable-static
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --enable-frame-pointers --disable-shared --enable-static
+    make -j "${PARALLEL}" && make install
 }
 
 # gtest
 build_gtest() {
-    check_if_source_exist $GTEST_SOURCE
+    check_if_source_exist "${GTEST_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$GTEST_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    cd "${TP_SOURCE_DIR}/${GTEST_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    ${CMAKE_CMD} ../ -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_POSITION_INDEPENDENT_CODE=On
+    "${CMAKE_CMD}" ../ -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_POSITION_INDEPENDENT_CODE=On
     # -DCMAKE_CXX_FLAGS="$warning_uninitialized"
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # rapidjson
 build_rapidjson() {
-    check_if_source_exist $RAPIDJSON_SOURCE
-    cd $TP_SOURCE_DIR/$RAPIDJSON_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${RAPIDJSON_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${RAPIDJSON_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    ${CMAKE_CMD} ../ -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DRAPIDJSON_BUILD_DOC=OFF \
-    -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF
-    make -j $PARALLEL && make install
+    "${CMAKE_CMD}" ../ -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DRAPIDJSON_BUILD_DOC=OFF \
+        -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF
+    make -j "${PARALLEL}" && make install
 }
 
 # snappy
 build_snappy() {
-    check_if_source_exist $SNAPPY_SOURCE
-    cd $TP_SOURCE_DIR/$SNAPPY_SOURCE
+    check_if_source_exist "${SNAPPY_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${SNAPPY_SOURCE}"
 
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    CFLAGS="-O3" CXXFLAGS="-O3" ${CMAKE_CMD} -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-    -DCMAKE_INSTALL_INCLUDEDIR=$TP_INCLUDE_DIR/snappy \
-    -DSNAPPY_BUILD_TESTS=0 ../
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    CFLAGS="-O3" CXXFLAGS="-O3" "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+        -DCMAKE_INSTALL_INCLUDEDIR="${TP_INCLUDE_DIR}"/snappy \
+        -DSNAPPY_BUILD_TESTS=0 ../
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 
     #build for libarrow.a
-    cp $TP_INCLUDE_DIR/snappy/snappy-c.h  $TP_INCLUDE_DIR/snappy-c.h && \
-    cp $TP_INCLUDE_DIR/snappy/snappy-sinksource.h  $TP_INCLUDE_DIR/snappy-sinksource.h && \
-    cp $TP_INCLUDE_DIR/snappy/snappy-stubs-public.h  $TP_INCLUDE_DIR/snappy-stubs-public.h && \
-    cp $TP_INCLUDE_DIR/snappy/snappy.h  $TP_INCLUDE_DIR/snappy.h
+    cp "${TP_INCLUDE_DIR}/snappy/snappy-c.h" "${TP_INCLUDE_DIR}/snappy-c.h" &&
+        cp "${TP_INCLUDE_DIR}/snappy/snappy-sinksource.h" "${TP_INCLUDE_DIR}/snappy-sinksource.h" &&
+        cp "${TP_INCLUDE_DIR}/snappy/snappy-stubs-public.h" "${TP_INCLUDE_DIR}/snappy-stubs-public.h" &&
+        cp "${TP_INCLUDE_DIR}/snappy/snappy.h" "${TP_INCLUDE_DIR}/snappy.h"
 }
 
 # gperftools
 build_gperftools() {
-    check_if_source_exist $GPERFTOOLS_SOURCE
-    cd $TP_SOURCE_DIR/$GPERFTOOLS_SOURCE
-    if [ ! -f configure ]; then
+    check_if_source_exist "${GPERFTOOLS_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${GPERFTOOLS_SOURCE}"
+    if [[ ! -f configure ]]; then
         ./autogen.sh
     fi
 
     CPPFLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    LD_LIBRARY_PATH="${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    LD_LIBRARY_PATH="${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR/gperftools --disable-shared --enable-static --disable-libunwind --with-pic --enable-frame-pointers
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        LD_LIBRARY_PATH="${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        LD_LIBRARY_PATH="${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}/gperftools" --disable-shared --enable-static --disable-libunwind --with-pic --enable-frame-pointers
+    make -j "${PARALLEL}" && make install
 }
 
 # zlib
 build_zlib() {
-    check_if_source_exist $ZLIB_SOURCE
-    cd $TP_SOURCE_DIR/$ZLIB_SOURCE
+    check_if_source_exist "${ZLIB_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${ZLIB_SOURCE}"
 
     CPPFLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --static
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --static
+    make -j "${PARALLEL}" && make install
 
     # minizip
     cd contrib/minizip
     autoreconf --force --install
-    ./configure --prefix=$TP_INSTALL_DIR --enable-static=yes --enable-shared=no
-    make -j $PARALLEL && make install
+    ./configure --prefix="${TP_INSTALL_DIR}" --enable-static=yes --enable-shared=no
+    make -j "${PARALLEL}" && make install
 }
 
 # lz4
 build_lz4() {
-    check_if_source_exist $LZ4_SOURCE
-    cd $TP_SOURCE_DIR/$LZ4_SOURCE
+    check_if_source_exist "${LZ4_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LZ4_SOURCE}"
 
     # clean old symbolic links
     local old_symbolic_links=('lz4c' 'lz4cat' 'unlz4')
-    for link in ${old_symbolic_links[@]}; do
+    for link in "${old_symbolic_links[@]}"; do
         rm -f "${TP_INSTALL_DIR}/bin/${link}"
     done
 
-    make -j $PARALLEL install PREFIX=$TP_INSTALL_DIR BUILD_SHARED=no\
-    INCLUDEDIR=$TP_INCLUDE_DIR/lz4/
+    make -j "${PARALLEL}" install PREFIX="${TP_INSTALL_DIR}" BUILD_SHARED=no INCLUDEDIR="${TP_INCLUDE_DIR}/lz4"
 }
 
 # zstd
 build_zstd() {
-    check_if_source_exist $ZSTD_SOURCE
-    cd $TP_SOURCE_DIR/$ZSTD_SOURCE/build/cmake
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
-    ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_TESTING=OFF -DZSTD_BUILD_TESTS=OFF -DZSTD_BUILD_STATIC=ON \
-    -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_SHARED=OFF  -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR ..
-    ${BUILD_SYSTEM} -j $PARALLEL install
+    check_if_source_exist "${ZSTD_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${ZSTD_SOURCE}/build/cmake"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_TESTING=OFF -DZSTD_BUILD_TESTS=OFF -DZSTD_BUILD_STATIC=ON \
+        -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_SHARED=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
 # bzip
 build_bzip() {
-    check_if_source_exist $BZIP_SOURCE
-    cd $TP_SOURCE_DIR/$BZIP_SOURCE
+    check_if_source_exist "${BZIP_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${BZIP_SOURCE}"
 
-    CFLAGS="-fPIC"
-    make -j $PARALLEL install PREFIX=$TP_INSTALL_DIR
+    CFLAGS="-fPIC" \
+        make -j "${PARALLEL}" install PREFIX="${TP_INSTALL_DIR}"
 }
 
 # lzo2
 build_lzo2() {
-    check_if_source_exist $LZO2_SOURCE
-    cd $TP_SOURCE_DIR/$LZO2_SOURCE
+    check_if_source_exist "${LZO2_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LZO2_SOURCE}"
 
     CPPFLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --disable-shared --enable-static
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static
+    make -j "${PARALLEL}" && make install
 }
 
 # curl
 build_curl() {
-    check_if_source_exist $CURL_SOURCE
-    cd $TP_SOURCE_DIR/$CURL_SOURCE
+    check_if_source_exist "${CURL_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${CURL_SOURCE}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        libs='-lcrypto -lssl -lcrypto -ldl -static'
+    else
+        libs='-lcrypto -lssl -lcrypto -ldl'
+    fi
 
     CPPFLAGS="-I${TP_INCLUDE_DIR} -DNGHTTP2_STATICLIB" \
-    LDFLAGS="-L${TP_LIB_DIR}" LIBS="-lcrypto -lssl -lcrypto -ldl -static" \
-    CFLAGS="-fPIC" \
-    PKG_CONFIG="pkg-config --static" \
-    ./configure --prefix=$TP_INSTALL_DIR --disable-shared --enable-static \
-    --without-librtmp --with-ssl=${TP_INSTALL_DIR} --without-libidn2 --disable-ldap --enable-ipv6 \
-    --without-libssh2 --without-brotli
-    make curl_LDFLAGS=-all-static -j $PARALLEL && make curl_LDFLAGS=-all-static install
+        LDFLAGS="-L${TP_LIB_DIR}" LIBS="${libs}" \
+        CFLAGS="-fPIC" \
+        PKG_CONFIG="pkg-config --static" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static \
+        --without-librtmp --with-ssl="${TP_INSTALL_DIR}" --without-libidn2 --disable-ldap --enable-ipv6 \
+        --without-libssh2 --without-brotli
+    make curl_LDFLAGS=-all-static -j "${PARALLEL}" && make curl_LDFLAGS=-all-static install
 }
 
 # re2
 build_re2() {
-    check_if_source_exist $RE2_SOURCE
-    cd $TP_SOURCE_DIR/$RE2_SOURCE
+    check_if_source_exist "${RE2_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${RE2_SOURCE}"
 
-    ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR
-    ${BUILD_SYSTEM} -j $PARALLEL install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}"
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
 # hyperscan
@@ -519,42 +563,56 @@ build_hyperscan() {
         cd $TP_SOURCE_DIR/$HYPERSCAN_SOURCE
         mkdir -p $BUILD_DIR && cd $BUILD_DIR
         PATH=$TP_INSTALL_DIR/bin:$PATH ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 \
-        -DBOOST_ROOT=$BOOST_SOURCE -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR ..
+            -DBOOST_ROOT=$BOOST_SOURCE -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR ..
         ${BUILD_SYSTEM} -j $PARALLEL install
     fi
 }
 
 # boost
 build_boost() {
-    check_if_source_exist $BOOST_SOURCE
-    cd $TP_SOURCE_DIR/$BOOST_SOURCE
+    check_if_source_exist "${BOOST_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${BOOST_SOURCE}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        cxxflags='-static'
+    else
+        cxxflags=''
+    fi
 
-    CXXFLAGS="-static" \
-    ./bootstrap.sh --prefix=$TP_INSTALL_DIR --with-toolset=$boost_toolset
+    CXXFLAGS="${cxxflags}" \
+        ./bootstrap.sh --prefix="${TP_INSTALL_DIR}" --with-toolset="${boost_toolset}"
     # -q: Fail at first error
-    ./b2 -q link=static runtime-link=static -j $PARALLEL --without-mpi --without-graph --without-graph_parallel --without-python cxxflags="-std=c++11 -g -fPIC -I$TP_INCLUDE_DIR -L$TP_LIB_DIR" install
+    ./b2 -q link=static runtime-link=static -j "${PARALLEL}" --without-mpi --without-graph --without-graph_parallel --without-python cxxflags="-std=c++11 -g -fPIC -I${TP_INCLUDE_DIR} -L${TP_LIB_DIR}" install
 }
 
 # mysql
 build_mysql() {
-    check_if_source_exist $MYSQL_SOURCE
-    check_if_source_exist $BOOST_SOURCE
+    check_if_source_exist "${MYSQL_SOURCE}"
+    check_if_source_exist "${BOOST_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$MYSQL_SOURCE
+    cd "${TP_SOURCE_DIR}/${MYSQL_SOURCE}"
 
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    if [ ! -d $BOOST_SOURCE ]; then
-        cp -rf $TP_SOURCE_DIR/$BOOST_SOURCE ./
+    if [[ ! -d "${BOOST_SOURCE}" ]]; then
+        cp -rf "${TP_SOURCE_DIR}/${BOOST_SOURCE}" ./
     fi
 
-    CFLAGS="-static -pthread -lrt" CXXFLAGS="-static -pthread -lrt" \
-    ${CMAKE_CMD} -G "${GENERATOR}" ../ -DCMAKE_LINK_SEARCH_END_STATIC=1 \
-    -DWITH_BOOST=`pwd`/$BOOST_SOURCE -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR/mysql/ \
-    -DWITHOUT_SERVER=1 -DWITH_ZLIB=1 -DZLIB_ROOT=$TP_INSTALL_DIR \
-    -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -std=gnu++11" \
-    -DDISABLE_SHARED=1 -DBUILD_SHARED_LIBS=0 -DZLIB_LIBRARY=$TP_INSTALL_DIR/lib/libz.a -DENABLE_DTRACE=0
-    ${BUILD_SYSTEM} -j $PARALLEL mysqlclient
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        cflags='-static -pthread -lrt'
+        cxxflags='-static -pthread -lrt'
+    else
+        cflags='-pthread'
+        cxxflags='-pthread'
+    fi
+
+    CFLAGS="${cflags}" CXXFLAGS="${cxxflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" ../ -DCMAKE_LINK_SEARCH_END_STATIC=1 \
+        -DWITH_BOOST="$(pwd)/${BOOST_SOURCE}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}/mysql" \
+        -DWITHOUT_SERVER=1 -DWITH_ZLIB=1 -DZLIB_ROOT="${TP_INSTALL_DIR}" \
+        -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -std=gnu++11" \
+        -DDISABLE_SHARED=1 -DBUILD_SHARED_LIBS=0 -DZLIB_LIBRARY="${TP_INSTALL_DIR}/lib/libz.a" -DENABLE_DTRACE=0
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" mysqlclient
 
     # copy headers manually
     rm -rf ../../../installed/include/mysql/
@@ -571,470 +629,550 @@ build_mysql() {
 
 #leveldb
 build_leveldb() {
-    check_if_source_exist $LEVELDB_SOURCE
-    cd $TP_SOURCE_DIR/$LEVELDB_SOURCE
-    rm -rf out-shared/ out-static/
-    CXXFLAGS="-fPIC" make -j $PARALLEL
-    cp out-static/libleveldb.a ../../installed/lib/libleveldb.a
-    cp -r include/leveldb ../../installed/include/
+    check_if_source_exist "${LEVELDB_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LEVELDB_SOURCE}"
+
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    rm -rf CMakeCache.txt CMakeFiles/
+
+    CXXFLAGS="-fPIC" "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DLEVELDB_BUILD_BENCHMARKS=OFF \
+        -DLEVELDB_BUILD_TESTS=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
 # brpc
 build_brpc() {
-    check_if_source_exist $BRPC_SOURCE
+    check_if_source_exist "${BRPC_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$BRPC_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    cd "${TP_SOURCE_DIR}/${BRPC_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
-    ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DWITH_GLOG=ON -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_LIBRARY_PATH=$TP_INSTALL_DIR/lib64 -DCMAKE_INCLUDE_PATH="$TP_INSTALL_DIR/include" \
-    -DPROTOBUF_PROTOC_EXECUTABLE=$TP_INSTALL_DIR/bin/protoc ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc"
+    else
+        ldflags="-L${TP_LIB_DIR}"
+    fi
+
+    LDFLAGS="${ldflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DWITH_GLOG=ON -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_LIBRARY_PATH="${TP_INSTALL_DIR}/lib64" -DCMAKE_INCLUDE_PATH="${TP_INSTALL_DIR}/include" \
+        -DPROTOBUF_PROTOC_EXECUTABLE="${TP_INSTALL_DIR}/bin/protoc" ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
+
+    remove_all_dylib
 }
 
 # rocksdb
 build_rocksdb() {
-    check_if_source_exist $ROCKSDB_SOURCE
+    check_if_source_exist "${ROCKSDB_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$ROCKSDB_SOURCE
+    cd "${TP_SOURCE_DIR}/${ROCKSDB_SOURCE}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags='-static-libstdc++ -static-libgcc'
+    else
+        ldflags=''
+    fi
 
     # -Wno-range-loop-construct gcc-11
     CFLAGS="-I ${TP_INCLUDE_DIR} -I ${TP_INCLUDE_DIR}/snappy -I ${TP_INCLUDE_DIR}/lz4" \
-    CXXFLAGS="-fPIC -Wno-deprecated-copy $warning_stringop_truncation $warning_shadow $warning_dangling_gsl \
-    $warning_defaulted_function_deleted $warning_unused_but_set_variable -Wno-pessimizing-move -Wno-range-loop-construct" \
-    LDFLAGS="-static-libstdc++ -static-libgcc" \
-    PORTABLE=1 make USE_RTTI=1 -j $PARALLEL static_lib
+        CXXFLAGS="-fPIC -Wno-deprecated-copy ${warning_stringop_truncation} ${warning_shadow} ${warning_dangling_gsl} \
+    ${warning_defaulted_function_deleted} ${warning_unused_but_set_variable} -Wno-pessimizing-move -Wno-range-loop-construct" \
+        LDFLAGS="${ldflags}" \
+        PORTABLE=1 make USE_RTTI=1 -j "${PARALLEL}" static_lib
     cp librocksdb.a ../../installed/lib/librocksdb.a
     cp -r include/rocksdb ../../installed/include/
 }
 
 # cyrus_sasl
 build_cyrus_sasl() {
-    check_if_source_exist $CYRUS_SASL_SOURCE
-    cd $TP_SOURCE_DIR/$CYRUS_SASL_SOURCE
+    check_if_source_exist "${CYRUS_SASL_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${CYRUS_SASL_SOURCE}"
     CPPFLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --enable-static --enable-shared=no --with-openssl=$TP_INSTALL_DIR --with-pic
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --enable-static --enable-shared=no --with-openssl="${TP_INSTALL_DIR}" --with-pic
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        make -j "${PARALLEL}" && make install
+    else
+        make -j "${PARALLEL}" && make framedir="${TP_INCLUDE_DIR}/sasl" install
+    fi
 }
 
 # librdkafka
 build_librdkafka() {
-    check_if_source_exist $LIBRDKAFKA_SOURCE
+    check_if_source_exist "${LIBRDKAFKA_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$LIBRDKAFKA_SOURCE
+    cd "${TP_SOURCE_DIR}/${LIBRDKAFKA_SOURCE}"
 
     CPPFLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --enable-static --enable-sasl --disable-c11threads
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --enable-static --enable-sasl --disable-c11threads
+    make -j "${PARALLEL}" && make install
+    remove_all_dylib
 }
 
 # libunixodbc
 build_libunixodbc() {
-    check_if_source_exist $ODBC_SOURCE
+    check_if_source_exist "${ODBC_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$ODBC_SOURCE
+    cd "${TP_SOURCE_DIR}/${ODBC_SOURCE}"
 
-    CPPFLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    CFLAGS="-fPIC" \
-    ./configure --prefix=$TP_INSTALL_DIR --with-included-ltdl --enable-static=yes --enable-shared=no
-    make -j $PARALLEL && make install
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        cppflags="-I${TP_INCLUDE_DIR}"
+    else
+        cppflags="-I${TP_INCLUDE_DIR} -Wno-implicit-function-declaration"
+    fi
+
+    CPPFLAGS="${cppflags}" \
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        CFLAGS="-fPIC" \
+        ./configure --prefix="${TP_INSTALL_DIR}" --with-included-ltdl --enable-static=yes --enable-shared=no
+    make -j "${PARALLEL}" && make install
 }
 
 # flatbuffers
 build_flatbuffers() {
-  check_if_source_exist $FLATBUFFERS_SOURCE
-  cd $TP_SOURCE_DIR/$FLATBUFFERS_SOURCE
-  mkdir -p $BUILD_DIR && cd $BUILD_DIR
-  rm -rf CMakeCache.txt CMakeFiles/
-  CXXFLAGS="-fPIC $warning_class_memaccess" \
-  LDFLAGS="-static-libstdc++ -static-libgcc" \
-  ${CMAKE_CMD} -G "${GENERATOR}" -DFLATBUFFERS_BUILD_TESTS=OFF ..
-  ${BUILD_SYSTEM} -j $PARALLEL
-  cp flatc  ../../../installed/bin/flatc
-  cp -r ../include/flatbuffers  ../../../installed/include/flatbuffers
-  cp libflatbuffers.a ../../../installed/lib/libflatbuffers.a
+    check_if_source_exist "${FLATBUFFERS_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${FLATBUFFERS_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    rm -rf CMakeCache.txt CMakeFiles/
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags='-static-libstdc++ -static-libgcc'
+    else
+        ldflags=''
+    fi
+
+    CXXFLAGS="-fPIC ${warning_class_memaccess}" \
+        LDFLAGS="${ldflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" -DFLATBUFFERS_BUILD_TESTS=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}"
+    cp flatc ../../../installed/bin/flatc
+    cp -r ../include/flatbuffers ../../../installed/include/flatbuffers
+    cp libflatbuffers.a ../../../installed/lib/libflatbuffers.a
 }
 
 # arrow
 build_arrow() {
-    check_if_source_exist $ARROW_SOURCE
-    cd $TP_SOURCE_DIR/$ARROW_SOURCE/cpp && mkdir -p release && cd release
-    export ARROW_BROTLI_URL=${TP_SOURCE_DIR}/${BROTLI_NAME}
-    export ARROW_GLOG_URL=${TP_SOURCE_DIR}/${GLOG_NAME}
-    export ARROW_LZ4_URL=${TP_SOURCE_DIR}/${LZ4_NAME}
-    export ARROW_FLATBUFFERS_URL=${TP_SOURCE_DIR}/${FLATBUFFERS_NAME}
-    export ARROW_ZSTD_URL=${TP_SOURCE_DIR}/${ZSTD_NAME}
-    export ARROW_JEMALLOC_URL=${TP_SOURCE_DIR}/${JEMALLOC_NAME}
-    export ARROW_Thrift_URL=${TP_SOURCE_DIR}/${THRIFT_NAME}
-    export ARROW_SNAPPY_URL=${TP_SOURCE_DIR}/${SNAPPY_NAME}
-    export ARROW_ZLIB_URL=${TP_SOURCE_DIR}/${ZLIB_NAME}
-    export ARROW_XSIMD_URL=${TP_SOURCE_DIR}/${XSIMD_NAME}
-    export ARROW_ORC_URL=${TP_SOURCE_DIR}/${ORC_NAME}
-
-    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
-    ${CMAKE_CMD} -G "${GENERATOR}" -DARROW_PARQUET=ON -DARROW_IPC=ON -DARROW_BUILD_SHARED=OFF \
-    -DARROW_BUILD_STATIC=ON -DARROW_WITH_BROTLI=ON -DARROW_WITH_LZ4=ON -DARROW_USE_GLOG=ON \
-    -DARROW_WITH_SNAPPY=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_ZSTD=ON -DARROW_JSON=ON \
-    -DARROW_WITH_UTF8PROC=OFF -DARROW_WITH_RE2=ON -DARROW_ORC=ON \
-    -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_INSTALL_LIBDIR=lib64 \
-    -DARROW_BOOST_USE_SHARED=OFF \
-    -DBoost_USE_STATIC_RUNTIME=ON \
-    -DARROW_GFLAGS_USE_SHARED=OFF \
-    -Dgflags_ROOT=$TP_INSTALL_DIR \
-    -DGLOG_ROOT=$TP_INSTALL_DIR \
-    -DRE2_ROOT=$TP_INSTALL_DIR \
-    -DZLIB_LIBRARY=$TP_INSTALL_DIR/lib/libz.a -DZLIB_INCLUDE_DIR=$TP_INSTALL_DIR/include \
-    -DRapidJSON_ROOT=$TP_INSTALL_DIR \
-    -DORC_ROOT=$TP_INSTALL_DIR \
-    -DBrotli_SOURCE=BUNDLED \
-    -DLZ4_LIB=$TP_INSTALL_DIR/lib/liblz4.a -DLZ4_INCLUDE_DIR=$TP_INSTALL_DIR/include/lz4 \
-    -DLz4_SOURCE=SYSTEM \
-    -DZSTD_LIB=$TP_INSTALL_DIR/lib/libzstd.a -DZSTD_INCLUDE_DIR=$TP_INSTALL_DIR/include \
-    -Dzstd_SOURCE=SYSTEM \
-    -DSnappy_LIB=$TP_INSTALL_DIR/lib/libsnappy.a -DSnappy_INCLUDE_DIR=$TP_INSTALL_DIR/include \
-    -DSnappy_SOURCE=SYSTEM \
-    -DBOOST_ROOT=$TP_INSTALL_DIR --no-warn-unused-cli \
-    -DThrift_ROOT=$TP_INSTALL_DIR ..
-
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    check_if_source_exist "${ARROW_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${ARROW_SOURCE}/cpp" && mkdir -p release && cd release
+    export ARROW_BROTLI_URL="${TP_SOURCE_DIR}/${BROTLI_NAME}"
+    export ARROW_GLOG_URL="${TP_SOURCE_DIR}/${GLOG_NAME}"
+    export ARROW_LZ4_URL="${TP_SOURCE_DIR}/${LZ4_NAME}"
+    export ARROW_FLATBUFFERS_URL="${TP_SOURCE_DIR}/${FLATBUFFERS_NAME}"
+    export ARROW_ZSTD_URL="${TP_SOURCE_DIR}/${ZSTD_NAME}"
+    export ARROW_JEMALLOC_URL="${TP_SOURCE_DIR}/${JEMALLOC_NAME}"
+    export ARROW_Thrift_URL="${TP_SOURCE_DIR}/${THRIFT_NAME}"
+    export ARROW_SNAPPY_URL="${TP_SOURCE_DIR}/${SNAPPY_NAME}"
+    export ARROW_ZLIB_URL="${TP_SOURCE_DIR}/${ZLIB_NAME}"
+    export ARROW_XSIMD_URL="${TP_SOURCE_DIR}/${XSIMD_NAME}"
+    export ARROW_ORC_URL="${TP_SOURCE_DIR}/${ORC_NAME}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc"
+    else
+        ldflags="-L${TP_LIB_DIR}"
+    fi
+
+    LDFLAGS="${ldflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" -DARROW_PARQUET=ON -DARROW_IPC=ON -DARROW_BUILD_SHARED=OFF \
+        -DARROW_BUILD_STATIC=ON -DARROW_WITH_BROTLI=ON -DARROW_WITH_LZ4=ON -DARROW_USE_GLOG=ON \
+        -DARROW_WITH_SNAPPY=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_ZSTD=ON -DARROW_JSON=ON \
+        -DARROW_WITH_UTF8PROC=OFF -DARROW_WITH_RE2=ON -DARROW_ORC=ON \
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_INSTALL_LIBDIR=lib64 \
+        -DARROW_BOOST_USE_SHARED=OFF \
+        -DBoost_USE_STATIC_RUNTIME=ON \
+        -DARROW_GFLAGS_USE_SHARED=OFF \
+        -Dgflags_ROOT="${TP_INSTALL_DIR}" \
+        -DGLOG_ROOT="${TP_INSTALL_DIR}" \
+        -DRE2_ROOT="${TP_INSTALL_DIR}" \
+        -DZLIB_LIBRARY="${TP_INSTALL_DIR}/lib/libz.a" -DZLIB_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \
+        -DRapidJSON_ROOT="${TP_INSTALL_DIR}" \
+        -DORC_ROOT="${TP_INSTALL_DIR}" \
+        -DBrotli_SOURCE=BUNDLED \
+        -DLZ4_LIB="${TP_INSTALL_DIR}/lib/liblz4.a" -DLZ4_INCLUDE_DIR="${TP_INSTALL_DIR}/include/lz4" \
+        -DLz4_SOURCE=SYSTEM \
+        -DZSTD_LIB="${TP_INSTALL_DIR}/lib/libzstd.a" -DZSTD_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \
+        -Dzstd_SOURCE=SYSTEM \
+        -DSnappy_LIB="${TP_INSTALL_DIR}/lib/libsnappy.a" -DSnappy_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \
+        -DSnappy_SOURCE=SYSTEM \
+        -DBOOST_ROOT="${TP_INSTALL_DIR}" --no-warn-unused-cli \
+        -DThrift_ROOT="${TP_INSTALL_DIR}" ..
+
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 
     #copy dep libs
-    cp -rf ./jemalloc_ep-prefix/src/jemalloc_ep/dist/lib/libjemalloc_pic.a $TP_INSTALL_DIR/lib64/libjemalloc.a
-    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlienc-static.a $TP_INSTALL_DIR/lib64/libbrotlienc.a
-    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlidec-static.a $TP_INSTALL_DIR/lib64/libbrotlidec.a
-    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlicommon-static.a $TP_INSTALL_DIR/lib64/libbrotlicommon.a
+    cp -rf ./jemalloc_ep-prefix/src/jemalloc_ep/dist/lib/libjemalloc_pic.a "${TP_INSTALL_DIR}/lib64/libjemalloc.a"
+    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlienc-static.a "${TP_INSTALL_DIR}/lib64/libbrotlienc.a"
+    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlidec-static.a "${TP_INSTALL_DIR}/lib64/libbrotlidec.a"
+    cp -rf ./brotli_ep/src/brotli_ep-install/lib/libbrotlicommon-static.a "${TP_INSTALL_DIR}/lib64/libbrotlicommon.a"
 }
 
 # s2
 build_s2() {
-    check_if_source_exist $S2_SOURCE
-    cd $TP_SOURCE_DIR/$S2_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${S2_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${S2_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc"
+    else
+        ldflags="-L${TP_LIB_DIR}"
+    fi
+
     CXXFLAGS="-O3" \
-    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
-    ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_INCLUDE_PATH="$TP_INSTALL_DIR/include" \
-    -DBUILD_SHARED_LIBS=OFF \
-    -DGFLAGS_ROOT_DIR="$TP_INSTALL_DIR/include" \
-    -DWITH_GFLAGS=ON \
-    -DGLOG_ROOT_DIR="$TP_INSTALL_DIR/include" \
-    -DCMAKE_LIBRARY_PATH="$TP_INSTALL_DIR/lib64" \
-    -DOPENSSL_ROOT_DIR="$TP_INSTALL_DIR/include" \
-    -DWITH_GLOG=ON ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+        LDFLAGS="${ldflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_INCLUDE_PATH="${TP_INSTALL_DIR}/include" \
+        -DBUILD_SHARED_LIBS=OFF \
+        -DGFLAGS_ROOT_DIR="${TP_INSTALL_DIR}/include" \
+        -DWITH_GFLAGS=ON \
+        -DGLOG_ROOT_DIR="${TP_INSTALL_DIR}/include" \
+        -DCMAKE_LIBRARY_PATH="${TP_INSTALL_DIR}/lib64" \
+        -DOPENSSL_ROOT_DIR="${TP_INSTALL_DIR}/include" \
+        -DWITH_GLOG=ON ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # bitshuffle
 build_bitshuffle() {
-    check_if_source_exist $BITSHUFFLE_SOURCE
-    cd $TP_SOURCE_DIR/$BITSHUFFLE_SOURCE
-    PREFIX=$TP_INSTALL_DIR
+    check_if_source_exist "${BITSHUFFLE_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${BITSHUFFLE_SOURCE}"
+    PREFIX="${TP_INSTALL_DIR}"
 
     # This library has significant optimizations when built with -mavx2. However,
     # we still need to support non-AVX2-capable hardware. So, we build it twice,
     # once with the flag and once without, and use some linker tricks to
     # suffix the AVX2 symbols with '_avx2'.
     arches="default avx2"
-    MACHINE_TYPE=$(uname -m)
+    MACHINE_TYPE="$(uname -m)"
     # Becuase aarch64 don't support avx2, disable it.
-    if [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
+    if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then
         arches="default"
     fi
 
     to_link=""
-    for arch in $arches ; do
+    for arch in $arches; do
         arch_flag=""
-        if [ "$arch" == "avx2" ]; then
+        if [[ "${arch}" == "avx2" ]]; then
             arch_flag="-mavx2"
         fi
-        tmp_obj=bitshuffle_${arch}_tmp.o
-        dst_obj=bitshuffle_${arch}.o
-        $CC $EXTRA_CFLAGS $arch_flag -std=c99 -I$PREFIX/include/lz4/ -O3 -DNDEBUG -fPIC -c \
+        tmp_obj="bitshuffle_${arch}_tmp.o"
+        dst_obj="bitshuffle_${arch}.o"
+        "${CC}" ${EXTRA_CFLAGS} ${arch_flag} -std=c99 "-I${PREFIX}/include/lz4" -O3 -DNDEBUG -fPIC -c \
             "src/bitshuffle_core.c" \
             "src/bitshuffle.c" \
             "src/iochain.c"
         # Merge the object files together to produce a combined .o file.
-        $DORIS_BIN_UTILS/ld -r -o $tmp_obj bitshuffle_core.o bitshuffle.o iochain.o
+        "${DORIS_BIN_UTILS}/ld" -r -o "${tmp_obj}" bitshuffle_core.o bitshuffle.o iochain.o
         # For the AVX2 symbols, suffix them.
-        if [ "$arch" == "avx2" ]; then
+        if [[ "${arch}" == "avx2" ]]; then
             # Create a mapping file with '<old_sym> <suffixed_sym>' on each line.
-            $DORIS_BIN_UTILS/nm --defined-only --extern-only $tmp_obj | while read addr type sym ; do
-              echo ${sym} ${sym}_${arch}
-            done > renames.txt
-            $DORIS_BIN_UTILS/objcopy --redefine-syms=renames.txt $tmp_obj $dst_obj
+            "${DORIS_BIN_UTILS}/nm" --defined-only --extern-only "${tmp_obj}" | while read addr type sym; do
+                echo "${sym} ${sym}_${arch}"
+            done >renames.txt
+            "${DORIS_BIN_UTILS}/objcopy" --redefine-syms=renames.txt "${tmp_obj}" "${dst_obj}"
         else
-            mv $tmp_obj $dst_obj
+            mv "${tmp_obj}" "${dst_obj}"
         fi
-        to_link="$to_link $dst_obj"
+        to_link="${to_link} ${dst_obj}"
     done
     rm -f libbitshuffle.a
-    $DORIS_BIN_UTILS/ar rs libbitshuffle.a $to_link
-    mkdir -p $PREFIX/include/bitshuffle
-    cp libbitshuffle.a $PREFIX/lib/
-    cp $TP_SOURCE_DIR/$BITSHUFFLE_SOURCE/src/bitshuffle.h $PREFIX/include/bitshuffle/bitshuffle.h
-    cp $TP_SOURCE_DIR/$BITSHUFFLE_SOURCE/src/bitshuffle_core.h $PREFIX/include/bitshuffle/bitshuffle_core.h
+    "${DORIS_BIN_UTILS}/ar" rs libbitshuffle.a ${to_link}
+    mkdir -p "${PREFIX}/include/bitshuffle"
+    cp libbitshuffle.a "${PREFIX}"/lib/
+    cp "${TP_SOURCE_DIR}/$BITSHUFFLE_SOURCE/src/bitshuffle.h" "${PREFIX}/include/bitshuffle/bitshuffle.h"
+    cp "${TP_SOURCE_DIR}/$BITSHUFFLE_SOURCE/src/bitshuffle_core.h" "${PREFIX}/include/bitshuffle/bitshuffle_core.h"
 }
 
 # croaring bitmap
 build_croaringbitmap() {
     avx_flag=
-    if [ ! -z "$USE_AVX2" -a "$USE_AVX2" -eq 0 ];then
-        echo "set USE_AVX2=$USE_AVX2 to FORCE disable AVX2 in croaringbitmap"
+    if [[ -n "${USE_AVX2}" && "${USE_AVX2}" -eq 0 ]]; then
+        echo "set USE_AVX2=${USE_AVX2} to FORCE disable AVX2 in croaringbitmap"
         avx_flag="-DROARING_DISABLE_AVX=ON"
     fi
 
-    check_if_source_exist $CROARINGBITMAP_SOURCE
-    cd $TP_SOURCE_DIR/$CROARINGBITMAP_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${CROARINGBITMAP_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${CROARINGBITMAP_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc"
+    else
+        ldflags="-L${TP_LIB_DIR}"
+    fi
+
     CXXFLAGS="-O3" \
-    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
-    ${CMAKE_CMD} -G "${GENERATOR}" ${avx_flag} -DROARING_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DENABLE_ROARING_TESTS=OFF ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+        LDFLAGS="${ldflags}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" ${avx_flag} -DROARING_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DENABLE_ROARING_TESTS=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # fmt
 build_fmt() {
-    check_if_source_exist $FMT_SOURCE
-    cd $TP_SOURCE_DIR/$FMT_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${FMT_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${FMT_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    $CMAKE_CMD -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR ..
-    ${BUILD_SYSTEM} -j$PARALLEL && ${BUILD_SYSTEM} install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
+    "${BUILD_SYSTEM}" -j"${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # parallel_hashmap
 build_parallel_hashmap() {
-    check_if_source_exist $PARALLEL_HASHMAP_SOURCE
-    cd $TP_SOURCE_DIR/$PARALLEL_HASHMAP_SOURCE
-    cp -r parallel_hashmap $TP_INSTALL_DIR/include/
+    check_if_source_exist "${PARALLEL_HASHMAP_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${PARALLEL_HASHMAP_SOURCE}"
+    cp -r parallel_hashmap "${TP_INSTALL_DIR}/include/"
 }
 
 # pdqsort
 build_pdqsort() {
-    check_if_source_exist $PDQSORT_SOURCE
-    cd $TP_SOURCE_DIR/$PDQSORT_SOURCE
-    cp -r pdqsort.h $TP_INSTALL_DIR/include/
+    check_if_source_exist "${PDQSORT_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${PDQSORT_SOURCE}"
+    cp -r pdqsort.h "${TP_INSTALL_DIR}/include/"
 }
 
 # libdivide
 build_libdivide() {
-    check_if_source_exist $LIBDIVIDE_SOURCE
-    cd $TP_SOURCE_DIR/$LIBDIVIDE_SOURCE
-    cp -r libdivide.h $TP_INSTALL_DIR/include/
+    check_if_source_exist "${LIBDIVIDE_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LIBDIVIDE_SOURCE}"
+    cp -r libdivide.h "${TP_INSTALL_DIR}/include/"
 }
 
 #orc
 build_orc() {
-    check_if_source_exist $ORC_SOURCE
-    cd $TP_SOURCE_DIR/$ORC_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${ORC_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${ORC_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     rm -rf CMakeCache.txt CMakeFiles/
-    CXXFLAGS="-O3 -Wno-array-bounds $warning_reserved_identifier $warning_suggest_override" \
-    ${CMAKE_CMD} -G "${GENERATOR}" ../ -DBUILD_JAVA=OFF \
-    -DPROTOBUF_HOME=$TP_INSTALL_DIR \
-    -DSNAPPY_HOME=$TP_INSTALL_DIR \
-    -DLZ4_HOME=$TP_INSTALL_DIR \
-    -DLZ4_INCLUDE_DIR=$TP_INSTALL_DIR/include/lz4 \
-    -DZLIB_HOME=$TP_INSTALL_DIR \
-    -DZSTD_HOME=$TP_INSTALL_DIR \
-    -DZSTD_INCLUDE_DIR=$TP_INSTALL_DIR/include \
-    -DBUILD_LIBHDFSPP=OFF \
-    -DBUILD_CPP_TESTS=OFF \
-    -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR
-
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    CXXFLAGS="-O3 -Wno-array-bounds ${warning_reserved_identifier} ${warning_suggest_override}" \
+        "${CMAKE_CMD}" -G "${GENERATOR}" ../ -DBUILD_JAVA=OFF \
+        -DPROTOBUF_HOME="${TP_INSTALL_DIR}" \
+        -DSNAPPY_HOME="${TP_INSTALL_DIR}" \
+        -DLZ4_HOME="${TP_INSTALL_DIR}" \
+        -DLZ4_INCLUDE_DIR="${TP_INSTALL_DIR}/include/lz4" \
+        -DZLIB_HOME="${TP_INSTALL_DIR}" \
+        -DZSTD_HOME="${TP_INSTALL_DIR}" \
+        -DZSTD_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \
+        -DBUILD_LIBHDFSPP=OFF \
+        -DBUILD_CPP_TESTS=OFF \
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}"
+
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 #cctz
 build_cctz() {
-    check_if_source_exist $CCTZ_SOURCE
-    cd $TP_SOURCE_DIR/$CCTZ_SOURCE
-    PREFIX=$TP_INSTALL_DIR make -j $PARALLEL
-    PREFIX=$TP_INSTALL_DIR make install
+    check_if_source_exist "${CCTZ_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${CCTZ_SOURCE}"
+
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    rm -rf CMakeCache.txt CMakeFiles/
+
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
 # all js and csss related
 build_js_and_css() {
-    check_if_source_exist $DATATABLES_SOURCE
-    check_if_source_exist Bootstrap-3.3.7/
-    check_if_source_exist jQuery-3.3.1/
-
-    mkdir -p $TP_INSTALL_DIR/webroot/
-    cd $TP_SOURCE_DIR/
-    cp -r $DATATABLES_SOURCE $TP_INSTALL_DIR/webroot/
-    cp -r Bootstrap-3.3.7/ $TP_INSTALL_DIR/webroot/
-    cp -r jQuery-3.3.1/ $TP_INSTALL_DIR/webroot/
-    cp bootstrap-table.min.js $TP_INSTALL_DIR/webroot/Bootstrap-3.3.7/js
-    cp bootstrap-table.min.css $TP_INSTALL_DIR/webroot/Bootstrap-3.3.7/css
+    check_if_source_exist "${DATATABLES_SOURCE}"
+    check_if_source_exist 'Bootstrap-3.3.7'
+    check_if_source_exist 'jQuery-3.3.1'
+
+    mkdir -p "${TP_INSTALL_DIR}/webroot"
+    cd "${TP_SOURCE_DIR}"
+    cp -r "${DATATABLES_SOURCE}" "${TP_INSTALL_DIR}/webroot/"
+    cp -r Bootstrap-3.3.7 "${TP_INSTALL_DIR}/webroot/"
+    cp -r jQuery-3.3.1 "${TP_INSTALL_DIR}/webroot/"
+    cp bootstrap-table.min.js "${TP_INSTALL_DIR}/webroot/Bootstrap-3.3.7/js"
+    cp bootstrap-table.min.css "${TP_INSTALL_DIR}/webroot/Bootstrap-3.3.7/css"
 }
 
 build_tsan_header() {
-    cd $TP_SOURCE_DIR/
-    if [[ ! -f $TSAN_HEADER_FILE ]]; then
-        echo "$TSAN_HEADER_FILE should exist."
+    cd "${TP_SOURCE_DIR}"
+    if [[ ! -f "${TSAN_HEADER_FILE}" ]]; then
+        echo "${TSAN_HEADER_FILE} should exist."
         exit 1
     fi
 
-    mkdir -p $TP_INSTALL_DIR/include/sanitizer/
-    cp $TSAN_HEADER_FILE $TP_INSTALL_DIR/include/sanitizer/
+    mkdir -p "${TP_INSTALL_DIR}/include/sanitizer"
+    cp "${TSAN_HEADER_FILE}" "${TP_INSTALL_DIR}/include/sanitizer/"
 }
 
 # aws_sdk
 build_aws_sdk() {
-    check_if_source_exist $AWS_SDK_SOURCE
-    cd $TP_SOURCE_DIR/$AWS_SDK_SOURCE
-    rm -rf $BUILD_DIR
+    check_if_source_exist "${AWS_SDK_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${AWS_SDK_SOURCE}"
+    rm -rf "${BUILD_DIR}"
     # -Wno-nonnull gcc-11
-    $CMAKE_CMD -G "${GENERATOR}" -B$BUILD_DIR -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-    -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF -DENABLE_TESTING=OFF \
-    -DCURL_LIBRARY_RELEASE=${TP_INSTALL_DIR}/lib/libcurl.a -DZLIB_LIBRARY_RELEASE=${TP_INSTALL_DIR}/lib/libz.a \
-    -DBUILD_ONLY="core;s3;s3-crt;transfer" -DCMAKE_CXX_FLAGS="-Wno-nonnull" -DCPP_STANDARD=17
-    cd $BUILD_DIR
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -B"${BUILD_DIR}" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
+        -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" -DBUILD_SHARED_LIBS=OFF -DENABLE_TESTING=OFF \
+        -DCURL_LIBRARY_RELEASE="${TP_INSTALL_DIR}/lib/libcurl.a" -DZLIB_LIBRARY_RELEASE="${TP_INSTALL_DIR}/lib/libz.a" \
+        -DBUILD_ONLY="core;s3;s3-crt;transfer" -DCMAKE_CXX_FLAGS="-Wno-nonnull" -DCPP_STANDARD=17
+    cd "${BUILD_DIR}"
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # lzma
 build_lzma() {
-    if [ ! -x "$(command -v autopoint)" ]; then
+    if [[ ! -x "$(command -v autopoint)" ]]; then
         echo "autopoint is required by $0, install it first"
-        return -1
+        return 255
     fi
-    check_if_source_exist $LZMA_SOURCE
-    cd $TP_SOURCE_DIR/$LZMA_SOURCE
-    export ACLOCAL_PATH=/usr/share/aclocal
+    check_if_source_exist "${LZMA_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${LZMA_SOURCE}"
+    export ACLOCAL_PATH='/usr/share/aclocal'
     sh autogen.sh
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
-    ../configure --prefix=$TP_INSTALL_DIR --enable-shared=no --with-pic
-    make -j $PARALLEL && make install
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    ../configure --prefix="${TP_INSTALL_DIR}" --enable-shared=no --with-pic
+    make -j "${PARALLEL}" && make install
 }
 
 # xml2
 build_xml2() {
-    if [ ! -x "$(command -v pkg-config)" ]; then
+    if [[ ! -x "$(command -v pkg-config)" ]]; then
         echo "pkg-config is required by $0, install it first"
-        return -1
+        return 255
     fi
-    check_if_source_exist $XML2_SOURCE
-    cd $TP_SOURCE_DIR/$XML2_SOURCE
-    export ACLOCAL_PATH=/usr/share/aclocal
+    check_if_source_exist "${XML2_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${XML2_SOURCE}"
+    export ACLOCAL_PATH='/usr/share/aclocal'
     sh autogen.sh
     make distclean
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     CPPLAGS="-I${TP_INCLUDE_DIR}" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    ../configure --prefix=$TP_INSTALL_DIR --enable-shared=no --with-pic --with-python=no --with-lzma=$TP_INSTALL_DIR
-    make -j $PARALLEL && make install
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        ../configure --prefix="${TP_INSTALL_DIR}" --enable-shared=no --with-pic --with-python=no --with-lzma="${TP_INSTALL_DIR}"
+    make -j "${PARALLEL}" && make install
 }
 
 # idn
 build_idn() {
-    check_if_source_exist $IDN_SOURCE
-    cd $TP_SOURCE_DIR/$IDN_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
-    ../configure --prefix=$TP_INSTALL_DIR --enable-shared=no --with-pic
-    make -j $PARALLEL && make install
+    check_if_source_exist "${IDN_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${IDN_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+    ../configure --prefix="${TP_INSTALL_DIR}" --enable-shared=no --with-pic
+    make -j "${PARALLEL}" && make install
 }
 
 # gsasl
 build_gsasl() {
-    check_if_source_exist $GSASL_SOURCE
-    cd $TP_SOURCE_DIR/$GSASL_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
-    ../configure --prefix=$TP_INSTALL_DIR --with-gssapi-impl=mit --enable-shared=no --with-pic --with-libidn-prefix=$TP_INSTALL_DIR
-    make -j $PARALLEL && make install
+    check_if_source_exist "${GSASL_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${GSASL_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+
+    if [[ "${KERNEL}" != 'Darwin' ]]; then
+        cflags=''
+    else
+        cflags='-Wno-implicit-function-declaration'
+    fi
+
+    CFLAGS="${cflags}" ../configure --prefix="${TP_INSTALL_DIR}" --with-gssapi-impl=mit --enable-shared=no --with-pic --with-libidn-prefix="${TP_INSTALL_DIR}"
+    make -j "${PARALLEL}" && make install
 }
 
 # krb5
 build_krb5() {
-    check_if_source_exist $KRB5_SOURCE
-    cd $TP_SOURCE_DIR/$KRB5_SOURCE/src
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
-    CFLAGS="-fcommon -fPIC" \
-    ../configure --prefix=$TP_INSTALL_DIR --disable-shared --enable-static
-    make -j $PARALLEL && make install
+    check_if_source_exist "${KRB5_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${KRB5_SOURCE}/src"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
+
+    if [[ "${KERNEL}" == 'Darwin' ]]; then
+        with_crypto_impl='--with-crypto-impl=openssl'
+    fi
+
+    CFLAGS="-fcommon -fPIC -I${TP_INSTALL_DIR}/include" LDFLAGS="-L${TP_INSTALL_DIR}/lib" \
+        ../configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static ${with_crypto_impl}
+    make -j "${PARALLEL}" && make install
 }
 
 # hdfs3
 build_hdfs3() {
-    check_if_source_exist $HDFS3_SOURCE
-    cd $TP_SOURCE_DIR/$HDFS3_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR && rm ./* -rf
+    check_if_source_exist "${HDFS3_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${HDFS3_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}" && rm -rf ./*
     # build libhdfs3 with kerberos support
     CPPLAGS="-I${TP_INCLUDE_DIR} -fPIC" \
-    LDFLAGS="-L${TP_LIB_DIR}" \
-    ../bootstrap --dependency="$TP_INSTALL_DIR" --prefix=$TP_INSTALL_DIR --disable-shared --enable-static
-    make CXXFLAGS="$libhdfs_cxx17" -j $PARALLEL
+        LDFLAGS="-L${TP_LIB_DIR}" \
+        ../bootstrap --dependency="${TP_INSTALL_DIR}" --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static
+    make CXXFLAGS="${libhdfs_cxx17}" -j "${PARALLEL}"
     make install
 }
+
 # benchmark
 build_benchmark() {
-    check_if_source_exist $BENCHMARK_SOURCE
+    check_if_source_exist "${BENCHMARK_SOURCE}"
 
-    cd $TP_SOURCE_DIR/$BENCHMARK_SOURCE
+    cd "${TP_SOURCE_DIR}/${BENCHMARK_SOURCE}"
 
     cmake -E make_directory "build"
+
+    if [[ "$KERNEL" != 'Darwin' ]]; then
+        cxxflags='-lresolv -pthread -lrt'
+    else
+        cxxflags='-lresolv -pthread'
+    fi
+
     # NOTE(amos): -DHAVE_STD_REGEX=1 avoid runtime checks as it will fail when compiling with non-standard toolchain
-    CXXFLAGS="-lresolv -pthread -lrt" cmake -E chdir "build" \
-    cmake ../ -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DHAVE_STD_REGEX=1
+    CXXFLAGS="${cxxflags}" cmake -E chdir "build" \
+        cmake ../ -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DHAVE_STD_REGEX=1
     cmake --build "build" --config Release
 
-    mkdir -p $TP_INCLUDE_DIR/benchmark
-    cp $TP_SOURCE_DIR/$BENCHMARK_SOURCE/include/benchmark/benchmark.h $TP_INCLUDE_DIR/benchmark/
-    cp $TP_SOURCE_DIR/$BENCHMARK_SOURCE/build/src/libbenchmark.a $TP_LIB_DIR/
+    mkdir -p "${TP_INCLUDE_DIR}/benchmark"
+    cp "${TP_SOURCE_DIR}/${BENCHMARK_SOURCE}/include/benchmark/benchmark.h" "${TP_INCLUDE_DIR}/benchmark/"
+    cp "${TP_SOURCE_DIR}/${BENCHMARK_SOURCE}/build/src/libbenchmark.a" "${TP_LIB_DIR}/"
 }
 
 # simdjson
 build_simdjson() {
-    check_if_source_exist $SIMDJSON_SOURCE
-    cd $TP_SOURCE_DIR/$SIMDJSON_SOURCE
+    check_if_source_exist "${SIMDJSON_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${SIMDJSON_SOURCE}"
 
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
     CXXFLAGS="-O3" \
-    CFLAGS="-O3" \
-    $CMAKE_CMD ..
+        CFLAGS="-O3" \
+        $CMAKE_CMD ..
     $CMAKE_CMD --build .
 
-    cp $TP_SOURCE_DIR/$SIMDJSON_SOURCE/$BUILD_DIR/libsimdjson.a $TP_INSTALL_DIR/lib64
+    cp "${TP_SOURCE_DIR}/${SIMDJSON_SOURCE}/${BUILD_DIR}/libsimdjson.a" "${TP_INSTALL_DIR}/lib64"
 
-    cp -r $TP_SOURCE_DIR/$SIMDJSON_SOURCE/include/* $TP_INCLUDE_DIR/
+    cp -r "${TP_SOURCE_DIR}/${SIMDJSON_SOURCE}/include"/* "${TP_INCLUDE_DIR}/"
 }
 
 # nlohmann_json
 build_nlohmann_json() {
-    check_if_source_exist $NLOHMANN_JSON_SOURCE
-    cd $TP_SOURCE_DIR/$NLOHMANN_JSON_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${NLOHMANN_JSON_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${NLOHMANN_JSON_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
 
-    $CMAKE_CMD -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DJSON_BuildTests=OFF ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" -DJSON_BuildTests=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # opentelemetry
 build_opentelemetry() {
-    check_if_source_exist $OPENTELEMETRY_SOURCE
-    cd $TP_SOURCE_DIR/$OPENTELEMETRY_SOURCE
-    mkdir -p $BUILD_DIR && cd $BUILD_DIR
+    check_if_source_exist "${OPENTELEMETRY_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${OPENTELEMETRY_SOURCE}"
+    mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}"
 
-    $CMAKE_CMD -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_TESTING=OFF \
-    -DWITH_OTLP=ON -DWITH_OTLP_GRPC=OFF -DWITH_OTLP_HTTP=ON -DWITH_ZIPKIN=ON -DWITH_EXAMPLES=OFF ..
-    ${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
+    "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF \
+        -DWITH_OTLP=ON -DWITH_OTLP_GRPC=OFF -DWITH_OTLP_HTTP=ON -DWITH_ZIPKIN=ON -DWITH_EXAMPLES=OFF ..
+    "${BUILD_SYSTEM}" -j "${PARALLEL}" && "${BUILD_SYSTEM}" install
 }
 
 # sse2neon
 build_sse2neon() {
-    check_if_source_exist $SSE2NEON_SOURCE
-    cd $TP_SOURCE_DIR/$SSE2NEON_SOURCE
-    cp sse2neon.h $TP_INSTALL_DIR/include/
+    check_if_source_exist "${SSE2NEON_SOURCE}"
+    cd "${TP_SOURCE_DIR}/${SSE2NEON_SOURCE}"
+    cp sse2neon.h "${TP_INSTALL_DIR}/include/"
 }
 
 build_libunixodbc
@@ -1091,4 +1229,3 @@ build_libbacktrace
 build_sse2neon
 
 echo "Finished to build all thirdparties"
-
diff --git a/thirdparty/download-thirdparty.sh b/thirdparty/download-thirdparty.sh
index c9d82949a3..bbd5141f93 100755
--- a/thirdparty/download-thirdparty.sh
+++ b/thirdparty/download-thirdparty.sh
@@ -349,4 +349,12 @@ fi
 cd -
 echo "Finished patching $AWS_SDK_SOURCE"
 
-
+cd "${TP_SOURCE_DIR}/${BRPC_SOURCE}"
+if [[ ! -f $PATCHED_MARK ]]; then
+    if [[ "$(uname -s)" == 'Darwin' ]]; then
+        patch -p1 <"${TP_PATCH_DIR}/brpc-1.1.0.patch"
+        touch ${PATCHED_MARK}
+    fi
+fi
+cd -
+echo "Finished patching ${BRPC_SOURCE}"
diff --git a/thirdparty/patches/brpc-1.1.0.patch b/thirdparty/patches/brpc-1.1.0.patch
new file mode 100644
index 0000000000..fd9a177a70
--- /dev/null
+++ b/thirdparty/patches/brpc-1.1.0.patch
@@ -0,0 +1,461 @@
+diff --git a/Makefile b/Makefile
+index 3538e47c..e2e1a6b2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -41,13 +41,15 @@ endif
+ 
+ #required by butil/crc32.cc to boost performance for 10x
+ ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0)
+-	CXXFLAGS+=-msse4 -msse4.2
++  ifeq ($(shell uname -p),i386)  #note: i386 is processor family type, not the 32-bit x86 arch
++    CXXFLAGS+=-msse4 -msse4.2
++  endif
+ endif
+ #not solved yet
+ ifeq ($(CC),gcc)
+- ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0)
+-	CXXFLAGS+=-Wno-aligned-new
+- endif
++  ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0)
++    CXXFLAGS+=-Wno-aligned-new
++  endif
+ endif
+ 
+ BUTIL_SOURCES = \
+diff --git a/config_brpc.sh b/config_brpc.sh
+index f52911db..842f100f 100755
+--- a/config_brpc.sh
++++ b/config_brpc.sh
+@@ -154,16 +154,21 @@ find_dir_of_header_or_die() {
+ }
+ 
+ if [ "$SYSTEM" = "Darwin" ]; then
+-    OPENSSL_LIB="/usr/local/opt/openssl/lib"
+-    OPENSSL_HDR="/usr/local/opt/openssl/include"
+-else
+-    # User specified path of openssl, if not given it's empty
+-    OPENSSL_LIB=$(find_dir_of_lib ssl)
+-    # Inconvenient to check these headers in baidu-internal
+-    #PTHREAD_HDR=$(find_dir_of_header_or_die pthread.h)
+-    OPENSSL_HDR=$(find_dir_of_header_or_die openssl/ssl.h mesalink/openssl/ssl.h)
++    if [ -d "/usr/local/opt/openssl" ]; then
++        LIBS_IN="/usr/local/opt/openssl/lib $LIBS_IN"
++        HDRS_IN="/usr/local/opt/openssl/include $HDRS_IN"
++    elif [ -d "/opt/homebrew/Cellar" ]; then
++        LIBS_IN="/opt/homebrew/Cellar $LIBS_IN"
++        HDRS_IN="/opt/homebrew/Cellar $HDRS_IN"
++    fi
+ fi
+ 
++# User specified path of openssl, if not given it's empty
++OPENSSL_LIB=$(find_dir_of_lib ssl)
++# Inconvenient to check these headers in baidu-internal
++#PTHREAD_HDR=$(find_dir_of_header_or_die pthread.h)
++OPENSSL_HDR=$(find_dir_of_header_or_die openssl/ssl.h mesalink/openssl/ssl.h)
++
+ if [ $WITH_MESALINK != 0 ]; then
+     MESALINK_HDR=$(find_dir_of_header_or_die mesalink/openssl/ssl.h)
+     OPENSSL_HDR="$OPENSSL_HDR\n$MESALINK_HDR"
+diff --git a/docs/cn/getting_started.md b/docs/cn/getting_started.md
+index 53ef0f50..b4af85a5 100644
+--- a/docs/cn/getting_started.md
++++ b/docs/cn/getting_started.md
+@@ -20,7 +20,7 @@ brpc有如下依赖:
+ ## Ubuntu/LinuxMint/WSL
+ ### 依赖准备
+ 
+-安装通用依赖,[gflags](https://github.com/gflags/gflags), [protobuf](https://github.com/google/protobuf), [leveldb](https://github.com/google/leveldb):
++安装依赖:
+ ```shell
+ sudo apt-get install -y git g++ make libssl-dev libgflags-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev
+ ```
+@@ -113,14 +113,9 @@ CentOS一般需要安装EPEL,否则很多包都默认不可用。
+ sudo yum install epel-release
+ ```
+ 
+-安装通用依赖:
++安装依赖:
+ ```shell
+-sudo yum install git gcc-c++ make openssl-devel
+-```
+-
+-安装 [gflags](https://github.com/gflags/gflags), [protobuf](https://github.com/google/protobuf), [leveldb](https://github.com/google/leveldb):
+-```shell
+-sudo yum install gflags-devel protobuf-devel protobuf-compiler leveldb-devel
++sudo yum install git gcc-c++ make openssl-devel gflags-devel protobuf-devel protobuf-compiler leveldb-devel
+ ```
+ 
+ 如果你要在样例中启用cpu/heap的profiler:
+@@ -216,18 +211,13 @@ $ make
+ 
+ ## MacOS
+ 
+-注意:在相同运行环境下,当前Mac版brpc的性能比Linux版差2.5倍。如果你的服务是性能敏感的,请不要使用MacOs作为你的生产环境。
++注意:在相同硬件条件下,MacOS版brpc的性能可能明显差于Linux版。如果你的服务是性能敏感的,请不要使用MacOS作为你的生产环境。
+ 
+ ### 依赖准备
+ 
+-安装通用依赖:
+-```shell
+-brew install openssl git gnu-getopt coreutils
+-```
+-
+-安装[gflags](https://github.com/gflags/gflags),[protobuf](https://github.com/google/protobuf),[leveldb](https://github.com/google/leveldb):
++安装依赖:
+ ```shell
+-brew install gflags protobuf leveldb
++brew install openssl git gnu-getopt coreutils gflags protobuf leveldb
+ ```
+ 
+ 如果你要在样例中启用cpu/heap的profiler:
+@@ -241,6 +231,17 @@ git clone https://github.com/google/googletest -b release-1.10.0 && cd googletes
+ ```
+ 在编译完成后,复制include/和lib/目录到/usr/local/include和/usr/local/lib目录中,以便于让所有应用都能使用gtest。
+ 
++### Monterey
++Monterey中openssl的安装位置可能不再位于`/usr/local/opt/openssl`,很可能会在`/opt/homebrew/Cellar`目录下,如果编译时报告找不到openssl,可考虑设置软链如下:
++```shell
++sudo ln -s /opt/homebrew/Cellar/openssl@3/3.0.3 /usr/local/opt/openssl
++```
++请注意上述命令中openssl的目录可能随环境变化而变化,你可以通过`brew info openssl`查看。
++
++### Apple Silicon
++
++master HEAD已支持M1系列芯片,M2未测试过。欢迎通过issues向我们报告遗留的warning/error。
++
+ ### 使用config_brpc.sh编译brpc
+ git克隆brpc,进入到项目目录然后运行:
+ ```shell
+diff --git a/docs/en/getting_started.md b/docs/en/getting_started.md
+index 4d24f2d7..03e34cf6 100644
+--- a/docs/en/getting_started.md
++++ b/docs/en/getting_started.md
+@@ -215,18 +215,13 @@ Same with [here](#compile-brpc-with-cmake)
+ 
+ ## MacOS
+ 
+-Note: In the same running environment, the performance of the current Mac version is about 2.5 times worse than the Linux version. If your service is performance-critical, do not use MacOS as your production environment.
++Note: With same environment, the performance of the MacOS version is worse than the Linux version. If your service is performance-critical, do not use MacOS as your production environment.
+ 
+ ### Prepare deps
+ 
+-Install common deps:
++Install dependencies:
+ ```shell
+-brew install openssl git gnu-getopt coreutils
+-```
+-
+-Install [gflags](https://github.com/gflags/gflags), [protobuf](https://github.com/google/protobuf), [leveldb](https://github.com/google/leveldb):
+-```shell
+-brew install gflags protobuf leveldb
++brew install openssl git gnu-getopt coreutils gflags protobuf leveldb
+ ```
+ 
+ If you need to enable cpu/heap profilers in examples:
+@@ -240,6 +235,20 @@ git clone https://github.com/google/googletest -b release-1.10.0 && cd googletes
+ ```
+ After the compilation, copy include/ and lib/ into /usr/local/include and /usr/local/lib respectively to expose gtest to all apps
+ 
++### Monterey
++
++openssl installed in Monterey may not be found at `/usr/local/opt/openssl`, instead it's probably put under `/opt/homebrew/Cellar`. If the compiler cannot find openssl, consider making a soft link like below:
++
++```shell
++sudo ln -s /opt/homebrew/Cellar/openssl@3/3.0.3 /usr/local/opt/openssl
++```
++
++Please note that the directory of installed openssl in above command may be different in different environments, you could check it  out by running `brew info openssl`.
++
++### Apple Silicon
++
++The code at master HEAD already supports M1 series chips. M2 series are not tested yet. Please feel free to report remaining warnings/errors to us by issues.
++
+ ### Compile brpc with config_brpc.sh
+ git clone brpc, cd into the repo and run
+ ```shell
+diff --git a/src/brpc/span.h b/src/brpc/span.h
+index 07771649..43ede3d5 100644
+--- a/src/brpc/span.h
++++ b/src/brpc/span.h
+@@ -34,7 +34,7 @@
+ #include "brpc/span.pb.h"
+ 
+ namespace bthread {
+-extern thread_local bthread::LocalStorage tls_bls;
++extern __thread bthread::LocalStorage tls_bls;
+ }
+ 
+ 
+diff --git a/src/bthread/context.cpp b/src/bthread/context.cpp
+index 5098bc39..b89d432a 100644
+--- a/src/bthread/context.cpp
++++ b/src/bthread/context.cpp
+@@ -713,3 +713,100 @@ __asm (
+ );
+ 
+ #endif
++
++
++#if defined(BTHREAD_CONTEXT_PLATFORM_apple_arm64) && defined(BTHREAD_CONTEXT_COMPILER_gcc)
++__asm (
++".text\n"
++".globl _bthread_jump_fcontext\n"
++".balign 16\n"
++"_bthread_jump_fcontext:\n"
++"    ; prepare stack for GP + FPU\n"
++"    sub  sp, sp, #0xb0\n"
++"#if (defined(__VFP_FP__) && !defined(__SOFTFP__))\n"
++"    ; test if fpu env should be preserved\n"
++"    cmp  w3, #0\n"
++"    b.eq  1f\n"
++"    ; save d8 - d15\n"
++"    stp  d8,  d9,  [sp, #0x00]\n"
++"    stp  d10, d11, [sp, #0x10]\n"
++"    stp  d12, d13, [sp, #0x20]\n"
++"    stp  d14, d15, [sp, #0x30]\n"
++"1:\n"
++"#endif\n"
++"    ; save x19-x30\n"
++"    stp  x19, x20, [sp, #0x40]\n"
++"    stp  x21, x22, [sp, #0x50]\n"
++"    stp  x23, x24, [sp, #0x60]\n"
++"    stp  x25, x26, [sp, #0x70]\n"
++"    stp  x27, x28, [sp, #0x80]\n"
++"    stp  fp,  lr,  [sp, #0x90]\n"
++"    ; save LR as PC\n"
++"    str  lr, [sp, #0xa0]\n"
++"    ; store RSP (pointing to context-data) in first argument (x0).\n"
++"    ; STR cannot have sp as a target register\n"
++"    mov  x4, sp\n"
++"    str  x4, [x0]\n"
++"    ; restore RSP (pointing to context-data) from A2 (x1)\n"
++"    mov  sp, x1\n"
++"#if (defined(__VFP_FP__) && !defined(__SOFTFP__))\n"
++"    ; test if fpu env should be preserved\n"
++"    cmp  w3, #0\n"
++"    b.eq  2f\n"
++"    ; load d8 - d15\n"
++"    ldp  d8,  d9,  [sp, #0x00]\n"
++"    ldp  d10, d11, [sp, #0x10]\n"
++"    ldp  d12, d13, [sp, #0x20]\n"
++"    ldp  d14, d15, [sp, #0x30]\n"
++"2:\n"
++"#endif\n"
++"    ; load x19-x30\n"
++"    ldp  x19, x20, [sp, #0x40]\n"
++"    ldp  x21, x22, [sp, #0x50]\n"
++"    ldp  x23, x24, [sp, #0x60]\n"
++"    ldp  x25, x26, [sp, #0x70]\n"
++"    ldp  x27, x28, [sp, #0x80]\n"
++"    ldp  fp,  lr,  [sp, #0x90]\n"
++"    ; use third arg as return value after jump\n"
++"    ; and as first arg in context function\n"
++"    mov  x0, x2\n"
++"    ; load pc\n"
++"    ldr  x4, [sp, #0xa0]\n"
++"    ; restore stack from GP + FPU\n"
++"    add  sp, sp, #0xb0\n"
++"    ret x4\n"
++);
++
++#endif
++
++#if defined(BTHREAD_CONTEXT_PLATFORM_apple_arm64) && defined(BTHREAD_CONTEXT_COMPILER_gcc)
++__asm (
++".text\n"
++".globl _bthread_make_fcontext\n"
++".balign 16\n"
++"_bthread_make_fcontext:\n"
++"    ; shift address in x0 (allocated stack) to lower 16 byte boundary\n"
++"    and x0, x0, ~0xF\n"
++"    ; reserve space for context-data on context-stack\n"
++"    sub  x0, x0, #0xb0\n"
++"    ; third arg of make_fcontext() == address of context-function\n"
++"    ; store address as a PC to jump in\n"
++"    str  x2, [x0, #0xa0]\n"
++"    ; compute abs address of label finish\n"
++"    ; 0x0c = 3 instructions * size (4) before label 'finish'\n"
++"    ; TODO: Numeric offset since llvm still does not support labels in ADR. Fix:\n"
++"    ;       http:\n"
++"    adr  x1, 0x0c\n"
++"    ; save address of finish as return-address for context-function\n"
++"    ; will be entered after context-function returns (LR register)\n"
++"    str  x1, [x0, #0x98]\n"
++"    ret  lr ; return pointer to context-data (x0)\n"
++"finish:\n"
++"    ; exit code is zero\n"
++"    mov  x0, #0\n"
++"    ; exit application\n"
++"    bl  __exit\n"
++);
++
++#endif
++
+diff --git a/src/bthread/context.h b/src/bthread/context.h
+index 8ff027df..ef98e458 100644
+--- a/src/bthread/context.h
++++ b/src/bthread/context.h
+@@ -23,9 +23,9 @@
+ 
+ #if defined(__GNUC__) || defined(__APPLE__)
+ 
+-    #define BTHREAD_CONTEXT_COMPILER_gcc
++  #define BTHREAD_CONTEXT_COMPILER_gcc
+ 
+-    #if defined(__linux__)
++  #if defined(__linux__)
+ 	#ifdef __x86_64__
+ 	    #define BTHREAD_CONTEXT_PLATFORM_linux_x86_64
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+@@ -41,27 +41,30 @@
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+ 	#endif
+ 
+-    #elif defined(__MINGW32__) || defined (__MINGW64__)
++  #elif defined(__MINGW32__) || defined (__MINGW64__)
+ 	#if defined(__x86_64__)
+ 	    #define BTHREAD_CONTEXT_COMPILER_gcc
+     	    #define BTHREAD_CONTEXT_PLATFORM_windows_x86_64
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+-	#endif
+-
+-	#if defined(__i386__)
++	#elif defined(__i386__)
+ 	    #define BTHREAD_CONTEXT_COMPILER_gcc
+ 	    #define BTHREAD_CONTEXT_PLATFORM_windows_i386
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION __cdecl
+ 	#endif
+-    #elif defined(__APPLE__) && defined(__MACH__)
++
++  #elif defined(__APPLE__) && defined(__MACH__)
+ 	#if defined (__i386__)
+ 	    #define BTHREAD_CONTEXT_PLATFORM_apple_i386
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+ 	#elif defined (__x86_64__)
+ 	    #define BTHREAD_CONTEXT_PLATFORM_apple_x86_64
+ 	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+-	#endif
++	#elif defined (__aarch64__)
++	    #define BTHREAD_CONTEXT_PLATFORM_apple_arm64
++	    #define BTHREAD_CONTEXT_CALL_CONVENTION
+     #endif
++  #endif
++
+ #endif
+ 
+ #if defined(_WIN32_WCE)
+diff --git a/src/bthread/key.cpp b/src/bthread/key.cpp
+index 53f7594f..a4a08407 100644
+--- a/src/bthread/key.cpp
++++ b/src/bthread/key.cpp
+@@ -34,7 +34,7 @@ class KeyTable;
+ 
+ // defined in task_group.cpp
+ extern __thread TaskGroup* tls_task_group;
+-extern thread_local LocalStorage tls_bls;
++extern __thread LocalStorage tls_bls;
+ static __thread bool tls_ever_created_keytable = false;
+ 
+ // We keep thread specific data in a two-level array. The top-level array
+diff --git a/src/bthread/task_group.cpp b/src/bthread/task_group.cpp
+index 9f6d42fb..b8ead163 100644
+--- a/src/bthread/task_group.cpp
++++ b/src/bthread/task_group.cpp
+@@ -61,7 +61,7 @@ __thread TaskGroup* tls_task_group = NULL;
+ // Sync with TaskMeta::local_storage when a bthread is created or destroyed.
+ // During running, the two fields may be inconsistent, use tls_bls as the
+ // groundtruth.
+-thread_local LocalStorage tls_bls = BTHREAD_LOCAL_STORAGE_INITIALIZER;
++__thread LocalStorage tls_bls = BTHREAD_LOCAL_STORAGE_INITIALIZER;
+ 
+ // defined in bthread/key.cpp
+ extern void return_keytable(bthread_keytable_pool_t*, KeyTable*);
+diff --git a/src/butil/time.h b/src/butil/time.h
+index b288d8e4..00949f8e 100644
+--- a/src/butil/time.h
++++ b/src/butil/time.h
+@@ -215,6 +215,7 @@ inline int64_t monotonic_time_s() {
+ 
+ namespace detail {
+ inline uint64_t clock_cycles() {
++#if defined(__x86_64__) || defined(__amd64__)
+     unsigned int lo = 0;
+     unsigned int hi = 0;
+     // We cannot use "=A", since this would use %rax on x86_64
+@@ -223,6 +224,31 @@ inline uint64_t clock_cycles() {
+         : "=a" (lo), "=d" (hi)
+         );
+     return ((uint64_t)hi << 32) | lo;
++#elif defined(__aarch64__)
++    uint64_t virtual_timer_value;
++    asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
++    return virtual_timer_value;
++#elif defined(__ARM_ARCH)
++  #if (__ARM_ARCH >= 6)
++    unsigned int pmccntr;
++    unsigned int pmuseren;
++    unsigned int pmcntenset;
++    // Read the user mode perf monitor counter access permissions.
++    asm volatile ("mrc p15, 0, %0, c9, c14, 0" : "=r" (pmuseren));
++    if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
++        asm volatile ("mrc p15, 0, %0, c9, c12, 1" : "=r" (pmcntenset));
++        if (pmcntenset & 0x80000000ul) {  // Is it counting?
++            asm volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r" (pmccntr));
++            // The counter is set up to count every 64th cycle
++            return static_cast<uint64_t>(pmccntr) * 64;  // Should optimize to << 6
++        }
++    }
++  #else
++    #error "unsupported arm_arch"
++  #endif
++#else
++  #error "unsupported arch"
++#endif
+ }
+ extern int64_t read_invariant_cpu_frequency();
+ // Be positive iff:
+diff --git a/test/BUILD b/test/BUILD.bazel
+similarity index 100%
+rename from test/BUILD
+rename to test/BUILD.bazel
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index 7c274ef5..f3e0c9bb 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -58,7 +58,7 @@ use_cxx11()
+ 
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+     #required by butil/crc32.cc to boost performance for 10x
+-    if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
++    if((CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
+         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4 -msse4.2")
+     endif()
+     if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
+diff --git a/test/Makefile b/test/Makefile
+index a6e035f4..99f7b4f7 100644
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -23,7 +23,9 @@ CXXFLAGS=$(CPPFLAGS) -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offseto
+ 
+ #required by butil/crc32.cc to boost performance for 10x
+ ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0)
+-	CXXFLAGS+=-msse4 -msse4.2
++  ifeq ($(shell uname -p),i386)  #note: i386 is processor family type, not the 32-bit x86 arch
++    CXXFLAGS+=-msse4 -msse4.2
++  endif
+ endif
+ #not solved yet
+ ifeq ($(CC),gcc)
+diff --git a/test/endpoint_unittest.cpp b/test/endpoint_unittest.cpp
+index ba9a4ee6..8b515ef3 100644
+--- a/test/endpoint_unittest.cpp
++++ b/test/endpoint_unittest.cpp
+@@ -384,6 +384,8 @@ TEST(EndPointTest, endpoint_sockaddr_conv_ipv6) {
+     in6_addr expect_in6_addr;
+     bzero(&expect_in6_addr, sizeof(expect_in6_addr));
+     expect_in6_addr.__in6_u.__u6_addr8[15] = 1;
++    // jge: mac monterey上应该这样,但准确判定条件不明
++    //expect_in6_addr.__u6_addr.__u6_addr8[15] = 1;
+ 
+     sockaddr_storage ss;
+     const sockaddr_in6* sa6 = (sockaddr_in6*) &ss;
diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh
index 9c344bcdde..14ba7ff033 100644
--- a/thirdparty/vars.sh
+++ b/thirdparty/vars.sh
@@ -180,16 +180,16 @@ ODBC_SOURCE=unixODBC-2.3.7
 ODBC_MD5SUM="274a711b0c77394e052db6493840c6f9"
 
 # leveldb
-LEVELDB_DOWNLOAD="https://github.com/google/leveldb/archive/v1.20.tar.gz"
-LEVELDB_NAME=leveldb-1.20.tar.gz
-LEVELDB_SOURCE=leveldb-1.20
-LEVELDB_MD5SUM="298b5bddf12c675d6345784261302252"
+LEVELDB_DOWNLOAD="https://github.com/google/leveldb/archive/refs/tags/1.23.tar.gz"
+LEVELDB_NAME=leveldb-1.23.tar.gz
+LEVELDB_SOURCE=leveldb-1.23
+LEVELDB_MD5SUM="afbde776fb8760312009963f09a586c7"
 
 # brpc
-BRPC_DOWNLOAD="https://github.com/apache/incubator-brpc/archive/refs/tags/1.0.0.tar.gz"
-BRPC_NAME="incubator-brpc-1.0.0.tar.gz"
-BRPC_SOURCE="incubator-brpc-1.0.0"
-BRPC_MD5SUM="73b201192a10107628e3af5ccd643676"
+BRPC_DOWNLOAD="https://github.com/apache/incubator-brpc/archive/refs/tags/1.1.0.tar.gz"
+BRPC_NAME="incubator-brpc-1.1.0.tar.gz"
+BRPC_SOURCE="incubator-brpc-1.1.0"
+BRPC_MD5SUM="e1439fd70e37a2bcffcf05b2526cacdd"
 
 # rocksdb
 ROCKSDB_DOWNLOAD="https://github.com/facebook/rocksdb/archive/v5.14.2.tar.gz"
@@ -411,8 +411,6 @@ SSE2NEON_NAME=sse2neon-1.5.1.tar.gz
 SSE2NEON_SOURCE=sse2neon-1.5.1
 SSE2NEON_MD5SUM="9de5dc2970aa7efac7faee59e2826c51"
 
-
-
 # all thirdparties which need to be downloaded is set in array TP_ARCHIVES
 export TP_ARCHIVES="LIBEVENT
 OPENSSL


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org