This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
new 1e69b90fb5 [dev-1.1.2][chore] Update thirdparties to be same as
master@08c5e0b1 (#12304)
1e69b90fb5 is described below
commit 1e69b90fb546ffb1d19ab5d64163e4e706d89f45
Author: Mingyu Chen <[email protected]>
AuthorDate: Fri Sep 2 16:46:50 2022 +0800
[dev-1.1.2][chore] Update thirdparties to be same as master@08c5e0b1
(#12304)
---
thirdparty/CHANGELOG.md | 15 +-
thirdparty/build-thirdparty.sh | 1384 ++++++++++++++--------
thirdparty/download-thirdparty.sh | 332 +++---
thirdparty/patches/apache-arrow-7.0.0.patch | 70 ++
thirdparty/patches/brpc-1.1.0-_dl_sym.patch | 28 -
thirdparty/patches/brpc-1.2.0.patch | 13 +
thirdparty/patches/opentelemetry-cpp-1.4.0.patch | 264 +++--
thirdparty/patches/vectorscan-5.4.7.patch | 31 +
thirdparty/vars.sh | 164 +--
9 files changed, 1388 insertions(+), 913 deletions(-)
diff --git a/thirdparty/CHANGELOG.md b/thirdparty/CHANGELOG.md
index ae9b8c31f8..dd5818aa1f 100644
--- a/thirdparty/CHANGELOG.md
+++ b/thirdparty/CHANGELOG.md
@@ -2,12 +2,23 @@
This file contains version of the third-party dependency libraries in the
build-env image. The docker build-env image is apache/doris, and the tag is
`build-env-${version}`
-## v20220812
+## v20220811
+- Modified: brpc 1.1.0 -> 1.2.0 fix _dl_sym undefined reference on Ubuntu22.04
+
+## v20220802
- Modified: libhdfs3 2.3.1 -> 2.3.2
+## v20220718
+
+- Modified: brpc 1.0.0 -> 1.1.0
+- Modified: leveldb 1.20 -> 1.23
+
+## v20220606
+- Added: vectorscan 5.4.7, and a patch for compilation
+
## v20220613
-- Modified: update libhdfs3 from 2.3.0 to 2.3.1 fix client uuid set error
+- Modified: update libhdfs3 from 2.3.0 to 2.3.1 fix client uuid set error
## v20220608
- Remove: remove libhdfs3 without kerberos support
diff --git a/thirdparty/build-thirdparty.sh b/thirdparty/build-thirdparty.sh
index 51d95a9b9a..a9ceb3820c 100755
--- a/thirdparty/build-thirdparty.sh
+++ b/thirdparty/build-thirdparty.sh
@@ -1,4 +1,6 @@
#!/usr/bin/env bash
+# shellcheck disable=2034
+
# 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
@@ -26,121 +28,140 @@
# This script will run *download-thirdparty.sh* once again
# to check if all thirdparties have been downloaded, unpacked and patched.
#################################################################################
-set -e
-curdir=`dirname "$0"`
-curdir=`cd "$curdir"; pwd`
+set -eo pipefail
+
+curdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
-export DORIS_HOME=$curdir/..
-export TP_DIR=$curdir
+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"
+eval set -- "${OPTS}"
+
+KERNEL="$(uname -s)"
+
+if [[ "${KERNEL}" == 'Darwin' ]]; then
+ PARALLEL="$(($(sysctl -n hw.logicalcpu) / 4 + 1))"
+else
+ PARALLEL="$(($(nproc) / 4 + 1))"
+fi
-PARALLEL=$[$(nproc)/4+1]
-if [[ $# -ne 1 ]] ; then
+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
-if [[ ${HELP} -eq 1 ]]; then
+if [[ "${HELP}" -eq 1 ]]; then
usage
exit
fi
echo "Get params:
- PARALLEL -- $PARALLEL
+ PARALLEL -- ${PARALLEL}
"
# include custom environment variables
-if [[ -f ${DORIS_HOME}/env.sh ]]; then
+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
-if [[ ! -f ${TP_DIR}/download-thirdparty.sh ]]; then
+if [[ ! -f "${TP_DIR}/download-thirdparty.sh" ]]; then
echo "Download thirdparty script is missing".
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
-cd $TP_DIR
+. "${TP_DIR}/vars.sh"
+
+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
+export LD_LIBRARY_PATH="${TP_DIR}/installed/lib:${LD_LIBRARY_PATH}"
# toolchain specific warning options and settings
-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
- warning_uninitialized=-Wno-uninitialized
- warning_shadow=-Wno-shadow
- warning_dangling_gsl=-Wno-dangling-gsl
- warning_unused_but_set_variable=-Wno-unused-but-set-variable
- warning_defaulted_function_deleted=-Wno-defaulted-function-deleted
- warning_reserved_identifier=-Wno-reserved-identifier
- warning_suggest_override="-Wno-suggest-override
-Wno-suggest-destructor-override"
- warning_option_ignored=-Wno-option-ignored
- boost_toolset=clang
- libhdfs_cxx17=-std=c++1z
+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
+ warning_uninitialized='-Wno-uninitialized'
+ warning_shadow='-Wno-shadow'
+ warning_dangling_gsl='-Wno-dangling-gsl'
+ warning_unused_but_set_variable='-Wno-unused-but-set-variable'
+ warning_defaulted_function_deleted='-Wno-defaulted-function-deleted'
+ warning_reserved_identifier='-Wno-reserved-identifier'
+ warning_suggest_override='-Wno-suggest-override
-Wno-suggest-destructor-override'
+ warning_option_ignored='-Wno-option-ignored'
+ boost_toolset='clang'
+ libhdfs_cxx17='-std=c++1z'
fi
# 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
check_prerequest() {
- local CMD=$1
- local NAME=$2
- if ! $CMD; then
- echo $NAME is missing
+ local CMD="$1"
+ local NAME="$2"
+ if ! ${CMD}; then
+ echo "${NAME} is missing"
exit 1
else
- echo $NAME is found
+ echo "${NAME} is found"
fi
}
@@ -165,9 +186,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,372 +210,481 @@ 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
- echo "$TP_SOURCE_DIR/$1 does not exist."
+ if [[ ! -d "${TP_SOURCE_DIR}/$1" ]]; then
+ echo "${TP_SOURCE_DIR}/$1 does not exist."
exit 1
fi
echo "===== begin build $1"
}
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
- echo "$TP_SOURCE_DIR/$1 does not exist."
+ 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
+ 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
- make -j $PARALLEL
+ CPPFLAGS="-I${TP_INCLUDE_DIR}" \
+ CXXFLAGS="-I${TP_INCLUDE_DIR}" \
+ LDFLAGS="-L${TP_LIB_DIR}" \
+ ./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}"
- 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
+ mkdir -p "${BUILD_DIR}"
+ cd "${BUILD_DIR}"
+
+ CFLAGS="-std=c99 -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
+
+ remove_all_dylib
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libevent.a
}
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}
+ CPPFLAGS="-I${TP_INCLUDE_DIR}" \
+ CXXFLAGS="-I${TP_INCLUDE_DIR}" \
+ LDFLAGS="-L${TP_LIB_DIR}" \
+ 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" \
+ --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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libthrift.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libthriftnb.a
}
# 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:-0}" == "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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libprotobuf.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libprotoc.a
}
# 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}" \
+ ./configure --prefix="${TP_INSTALL_DIR}" --enable-frame-pointers
--disable-shared --enable-static
+
+ make -j "${PARALLEL}"
+ make install
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libglog.a
}
# 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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libgtest.a
}
# 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}" \
+ LDFLAGS="-L${TP_LIB_DIR}" \
+ LD_LIBRARY_PATH="${TP_LIB_DIR}" \
+ ./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
+ CPPFLAGS="-I${TP_INCLUDE_DIR}" \
+ LDFLAGS="-L${TP_LIB_DIR}" \
+ ./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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libzstd.a
}
# 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
+ 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
+ CPPFLAGS="-I${TP_INCLUDE_DIR}" \
+ LDFLAGS="-L${TP_LIB_DIR}" \
+ ./configure --prefix="${TP_INSTALL_DIR}" --disable-shared
--enable-static
+
+ make -j "${PARALLEL}"
+ make install
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/liblzo2.a
}
# 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}" \
+ 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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libcurl.a
}
# 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} -DCMAKE_BUILD_TYPE=Release -G "${GENERATOR}"
-DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR
- ${BUILD_SYSTEM} -j $PARALLEL install
+ "${CMAKE_CMD}" -DCMAKE_BUILD_TYPE=Release -G "${GENERATOR}"
-DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}"
+ "${BUILD_SYSTEM}" -j "${PARALLEL}" install
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libre2.a
}
# hyperscan
build_hyperscan() {
- MACHINE_TYPE=$(uname -m)
- if [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
- echo "hyperscan is not supporting aarch64 now."
+ check_if_source_exist "${RAGEL_SOURCE}"
+ cd "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
+
+ if [[ "${KERNEL}" != 'Darwin' ]]; then
+ cxxflags='-static'
else
- check_if_source_exist $RAGEL_SOURCE
- cd $TP_SOURCE_DIR/$RAGEL_SOURCE
- ./configure --prefix=$TP_INSTALL_DIR && make install
-
- check_if_source_exist $HYPERSCAN_SOURCE
- 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 ..
- ${BUILD_SYSTEM} -j $PARALLEL install
+ cxxflags=''
fi
+
+ CXXFLAGS="${cxxflags}" \
+ ./configure --prefix="${TP_INSTALL_DIR}"
+ make install
+
+ check_if_source_exist "${HYPERSCAN_SOURCE}"
+ cd "${TP_SOURCE_DIR}/${HYPERSCAN_SOURCE}"
+
+ mkdir -p "${BUILD_DIR}"
+ cd "${BUILD_DIR}"
+
+ "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 \
+ -DBOOST_ROOT="${BOOST_SOURCE}"
-DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_EXAMPLES=OFF ..
+ "${BUILD_SYSTEM}" -j "${PARALLEL}" install
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libhs.a
}
# 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}"
- CXXFLAGS="-static" \
- ./bootstrap.sh --prefix=$TP_INSTALL_DIR --with-toolset=$boost_toolset
+ if [[ "${KERNEL}" != 'Darwin' ]]; then
+ cxxflags='-static'
+ else
+ cxxflags=''
+ fi
+
+ 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 -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
+
+ if [[ "${KERNEL}" != 'Darwin' ]]; then
+ cflags='-static -pthread -lrt'
+ cxxflags='-static -pthread -lrt'
+ else
+ cflags='-pthread'
+ cxxflags='-pthread'
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
+ 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/
@@ -567,474 +697,689 @@ build_mysql() {
# copy libmysqlclient.a
cp libmysql/libmysqlclient.a ../../../installed/lib/
echo "mysql client lib is installed."
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libmysqlclient.a
}
#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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libleveldb.a
}
# 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
+
+ # Currently, BRPC can't be built for static libraries only (without .so).
Therefore, we should add `-fPIC`
+ # to the dependencies which are required by BRPC. Dependencies: zlib,
glog, protobuf, leveldb
+ LDFLAGS="${ldflags}" \
+ "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=1 -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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libbrpc.a
}
# 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="-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/
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/librocksdb.a
}
# 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}" \
+ ./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}" \
+ ./configure --prefix="${TP_INSTALL_DIR}" --enable-static --enable-sasl
--disable-c11threads
+
+ make -j "${PARALLEL}"
+ make install
+
+ remove_all_dylib
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/librdkafka.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/librdkafka++.a
}
# 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}" \
+ ./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="${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"
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libarrow.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libjemalloc.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libparquet.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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libs2.a
}
# 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)
+ arches=('default' 'avx2')
+ MACHINE_TYPE="$(uname -m)"
# Becuase aarch64 don't support avx2, disable it.
- if [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
- arches="default"
+ 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:+${EXTRA_CFLAGS}} ${arch_flag:+${arch_flag}}
-std=c99 "-I${PREFIX}/include/lz4" -O3 -DNDEBUG -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 -r 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
+ local links
+ read -r -a links <<<"${to_link}"
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 "${links[@]}"
+ 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"
+ avx_flag=''
+ 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:+${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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/liborc.a
}
#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_BUILD_TYPE=Release
-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
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libaws-cpp-sdk-s3-crt.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-cpp-sdk-s3.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-cpp-sdk-core.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libs2n.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-crt-cpp.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-http.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-common.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-auth.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-io.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-mqtt.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-s3.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libaws-c-event-stream.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-cal.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libaws-cpp-sdk-transfer.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-checksums.a
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libaws-c-compression.a
}
# 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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/liblzma.a
}
# 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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libxml2.a
}
# 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 -I${TP_INSTALL_DIR}/include"
LDFLAGS="-L${TP_INSTALL_DIR}/lib" \
+ ../configure --prefix="${TP_INSTALL_DIR}" --disable-shared
--enable-static ${with_crypto_impl:+${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
+ CPPLAGS="-I${TP_INCLUDE_DIR}" \
+ 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
+ strip --strip-debug --strip-unneeded "${TP_LIB_DIR}"/libhdfs3.a
}
+
# 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
- CXXFLAGS="-O3" \
- CFLAGS="-O3" \
- $CMAKE_CMD ..
- $CMAKE_CMD --build .
+ mkdir -p "${BUILD_DIR}"
+ cd "${BUILD_DIR}"
- cp $TP_SOURCE_DIR/$SIMDJSON_SOURCE/$BUILD_DIR/libsimdjson.a
$TP_INSTALL_DIR/lib64
+ CXXFLAGS="-O3" CFLAGS="-O3" \
+ "${CMAKE_CMD}" -DSIMDJSON_EXCEPTIONS=OFF \
+ -DSIMDJSON_DEVELOPER_MODE=OFF -DSIMDJSON_BUILD_STATIC=ON \
+ -DSIMDJSON_JUST_LIBRARY=ON -DSIMDJSON_ENABLE_THREADS=ON ..
+ "${CMAKE_CMD}" --build . --config Release
- cp -r $TP_SOURCE_DIR/$SIMDJSON_SOURCE/include/* $TP_INCLUDE_DIR/
+ 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}/"
}
# 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
-
- $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
+ 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
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_exporter_zipkin_trace.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_trace.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_proto.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_resources.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_exporter_ostream_span.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_http_client_curl.a
+ strip --strip-debug --strip-unneeded
"${TP_LIB_DIR}"/libopentelemetry_exporter_otlp_http_client.a
}
# 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
@@ -1055,7 +1400,7 @@ build_snappy
build_gperftools
build_curl
build_re2
-# build_hyperscan
+build_hyperscan
build_thrift
build_leveldb
build_brpc
@@ -1091,4 +1436,3 @@ build_libbacktrace
build_sse2neon
echo "Finished to build all thirdparties"
-
diff --git a/thirdparty/download-thirdparty.sh
b/thirdparty/download-thirdparty.sh
index b236a64e34..3856993c2f 100755
--- a/thirdparty/download-thirdparty.sh
+++ b/thirdparty/download-thirdparty.sh
@@ -16,138 +16,135 @@
# specific language governing permissions and limitations
# under the License.
-set -e
################################################################
# This script will download all thirdparties and java libraries
# which are defined in *vars.sh*, unpack patch them if necessary.
# You can run this script multi-times.
# Things will only be downloaded, unpacked and patched once.
################################################################
-curdir=`dirname "$0"`
-curdir=`cd "$curdir"; pwd`
+
+set -eo pipefail
+
+curdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
if [[ -z "${DORIS_HOME}" ]]; then
- DORIS_HOME=$curdir/..
+ DORIS_HOME="${curdir}/.."
fi
# include custom environment variables
-if [[ -f ${DORIS_HOME}/custom_env.sh ]]; then
- . ${DORIS_HOME}/custom_env.sh
+if [[ -f "${DORIS_HOME}/custom_env.sh" ]]; then
+ # shellcheck disable=1091
+ . "${DORIS_HOME}/custom_env.sh"
fi
if [[ -z "${TP_DIR}" ]]; then
- TP_DIR=$curdir
+ TP_DIR="${curdir}"
fi
-if [ ! -f ${TP_DIR}/vars.sh ]; then
- echo "vars.sh is missing".
+if [[ ! -f "${TP_DIR}/vars.sh" ]]; then
+ echo 'vars.sh is missing'.
exit 1
fi
-. ${TP_DIR}/vars.sh
-mkdir -p ${TP_DIR}/src
+. "${TP_DIR}/vars.sh"
-md5sum_bin=md5sum
-if ! command -v ${md5sum_bin} >/dev/null 2>&1; then
+mkdir -p "${TP_DIR}/src"
+
+md5sum_bin='md5sum'
+if ! command -v "${md5sum_bin}" >/dev/null 2>&1; then
echo "Warn: md5sum is not installed"
md5sum_bin=""
fi
md5sum_func() {
- local FILENAME=$1
- local DESC_DIR=$2
- local MD5SUM=$3
+ local FILENAME="$1"
+ local DESC_DIR="$2"
+ local MD5SUM="$3"
+ local md5
- if [ "$md5sum_bin" == "" ]; then
- return 0
+ if [[ "${md5sum_bin}" == "" ]]; then
+ return 0
else
- md5=`md5sum "$DESC_DIR/$FILENAME"`
- if [ "$md5" != "$MD5SUM $DESC_DIR/$FILENAME" ]; then
- echo "$DESC_DIR/$FILENAME md5sum check failed!"
- echo -e "except-md5 $MD5SUM \nactual-md5 $md5"
- return 1
- fi
+ md5="$(md5sum "${DESC_DIR}/${FILENAME}")"
+ if [[ "${md5}" != "${MD5SUM} ${DESC_DIR}/${FILENAME}" ]]; then
+ echo "${DESC_DIR}/${FILENAME} md5sum check failed!"
+ echo -e "except-md5 ${MD5SUM} \nactual-md5 ${md5}"
+ return 1
+ fi
fi
-
return 0
}
# return 0 if download succeed.
# return 1 if not.
download_func() {
- local FILENAME=$1
- local DOWNLOAD_URL=$2
- local DESC_DIR=$3
- local MD5SUM=$4
+ local FILENAME="$1"
+ local DOWNLOAD_URL="$2"
+ local DESC_DIR="$3"
+ local MD5SUM="$4"
- if [ -z "$FILENAME" ]; then
+ if [[ -z "${FILENAME}" ]]; then
echo "Error: No file name specified to download"
exit 1
fi
- if [ -z "$DOWNLOAD_URL" ]; then
- echo "Error: No download url specified for $FILENAME"
+ if [[ -z "${DOWNLOAD_URL}" ]]; then
+ echo "Error: No download url specified for ${FILENAME}"
exit 1
fi
- if [ -z "$DESC_DIR" ]; then
- echo "Error: No dest dir specified for $FILENAME"
+ if [[ -z "${DESC_DIR}" ]]; then
+ echo "Error: No dest dir specified for ${FILENAME}"
exit 1
fi
-
local STATUS=1
for attemp in 1 2; do
- if [ -r "$DESC_DIR/$FILENAME" ]; then
- if md5sum_func $FILENAME $DESC_DIR $MD5SUM; then
- echo "Archive $FILENAME already exist."
+ if [[ -r "${DESC_DIR}/${FILENAME}" ]]; then
+ if md5sum_func "${FILENAME}" "${DESC_DIR}" "${MD5SUM}"; then
+ echo "Archive ${FILENAME} already exist."
STATUS=0
- break;
+ break
fi
- echo "Archive $FILENAME will be removed and download again."
- rm -f "$DESC_DIR/$FILENAME"
+ echo "Archive ${FILENAME} will be removed and download again."
+ rm -f "${DESC_DIR}/${FILENAME}"
else
- echo "Downloading $FILENAME from $DOWNLOAD_URL to $DESC_DIR"
- wget --no-check-certificate -q $DOWNLOAD_URL -O $DESC_DIR/$FILENAME
- if [ "$?"x == "0"x ]; then
- if md5sum_func $FILENAME $DESC_DIR $MD5SUM; then
+ echo "Downloading ${FILENAME} from ${DOWNLOAD_URL} to ${DESC_DIR}"
+ if wget --no-check-certificate -q "${DOWNLOAD_URL}" -O
"${DESC_DIR}/${FILENAME}"; then
+ if md5sum_func "${FILENAME}" "${DESC_DIR}" "${MD5SUM}"; then
STATUS=0
- echo "Success to download $FILENAME"
- break;
+ echo "Success to download ${FILENAME}"
+ break
fi
- echo "Archive $FILENAME will be removed and download again."
- rm -f "$DESC_DIR/$FILENAME"
+ echo "Archive ${FILENAME} will be removed and download again."
+ rm -f "${DESC_DIR}/${FILENAME}"
else
- echo "Failed to download $FILENAME. attemp: $attemp"
+ echo "Failed to download ${FILENAME}. attemp: ${attemp}"
fi
fi
done
- if [ $STATUS -ne 0 ]; then
- echo "Failed to download $FILENAME"
+ if [[ "${STATUS}" -ne 0 ]]; then
+ echo "Failed to download ${FILENAME}"
fi
- return $STATUS
+ return "${STATUS}"
}
# download thirdparty archives
echo "===== Downloading thirdparty archives..."
-for TP_ARCH in ${TP_ARCHIVES[*]}
-do
- NAME=$TP_ARCH"_NAME"
- MD5SUM=$TP_ARCH"_MD5SUM"
- if test "x$REPOSITORY_URL" = x; then
- URL=$TP_ARCH"_DOWNLOAD"
- download_func ${!NAME} ${!URL} $TP_SOURCE_DIR ${!MD5SUM}
- if [ "$?"x != "0"x ]; then
+for TP_ARCH in "${TP_ARCHIVES[@]}"; do
+ NAME="${TP_ARCH}_NAME"
+ MD5SUM="${TP_ARCH}_MD5SUM"
+ if [[ -z "${REPOSITORY_URL}" ]]; then
+ URL="${TP_ARCH}_DOWNLOAD"
+ if ! download_func "${!NAME}" "${!URL}" "${TP_SOURCE_DIR}"
"${!MD5SUM}"; then
echo "Failed to download ${!NAME}"
exit 1
fi
else
URL="${REPOSITORY_URL}/${!NAME}"
- download_func ${!NAME} ${URL} $TP_SOURCE_DIR ${!MD5SUM}
- if [ "$?x" != "0x" ]; then
+ if ! download_func "${!NAME}" "${URL}" "${TP_SOURCE_DIR}"
"${!MD5SUM}"; then
#try to download from home
- URL=$TP_ARCH"_DOWNLOAD"
- download_func ${!NAME} ${!URL} $TP_SOURCE_DIR ${!MD5SUM}
- if [ "$?"x != "0"x ]; then
+ URL="${TP_ARCH}_DOWNLOAD"
+ if ! download_func "${!NAME}" "${!URL}" "${TP_SOURCE_DIR}"
"${!MD5SUM}"; then
echo "Failed to download ${!NAME}"
exit 1 # download failed again exit.
fi
@@ -158,10 +155,9 @@ echo "===== Downloading thirdparty archives...done"
# check if all tp archives exists
echo "===== Checking all thirdpart archives..."
-for TP_ARCH in ${TP_ARCHIVES[*]}
-do
- NAME=$TP_ARCH"_NAME"
- if [ ! -r $TP_SOURCE_DIR/${!NAME} ]; then
+for TP_ARCH in "${TP_ARCHIVES[@]}"; do
+ NAME="${TP_ARCH}_NAME"
+ if [[ ! -r "${TP_SOURCE_DIR}/${!NAME}" ]]; then
echo "Failed to fetch ${!NAME}"
exit 1
fi
@@ -176,37 +172,36 @@ SUFFIX_TGZ="\.(tar\.gz|tgz)$"
SUFFIX_XZ="\.tar\.xz$"
SUFFIX_ZIP="\.zip$"
SUFFIX_BZ2="\.tar\.bz2$"
-for TP_ARCH in ${TP_ARCHIVES[*]}
-do
- NAME=$TP_ARCH"_NAME"
- SOURCE=$TP_ARCH"_SOURCE"
+for TP_ARCH in "${TP_ARCHIVES[@]}"; do
+ NAME="${TP_ARCH}_NAME"
+ SOURCE="${TP_ARCH}_SOURCE"
- if [ -z "${!SOURCE}" ]; then
+ if [[ -z "${!SOURCE}" ]]; then
continue
fi
- if [ ! -d $TP_SOURCE_DIR/${!SOURCE} ]; then
- if [[ "${!NAME}" =~ $SUFFIX_TGZ ]]; then
- echo "$TP_SOURCE_DIR/${!NAME}"
- echo "$TP_SOURCE_DIR/${!SOURCE}"
- if ! $TAR_CMD xzf "$TP_SOURCE_DIR/${!NAME}" -C "$TP_SOURCE_DIR/";
then
+ if [[ ! -d "${TP_SOURCE_DIR}/${!SOURCE}" ]]; then
+ if [[ "${!NAME}" =~ ${SUFFIX_TGZ} ]]; then
+ echo "${TP_SOURCE_DIR}/${!NAME}"
+ echo "${TP_SOURCE_DIR}/${!SOURCE}"
+ if ! "${TAR_CMD}" xzf "${TP_SOURCE_DIR}/${!NAME}" -C
"${TP_SOURCE_DIR}/"; then
echo "Failed to untar ${!NAME}"
exit 1
fi
- elif [[ "${!NAME}" =~ $SUFFIX_XZ ]]; then
- echo "$TP_SOURCE_DIR/${!NAME}"
- echo "$TP_SOURCE_DIR/${!SOURCE}"
- if ! $TAR_CMD xJf "$TP_SOURCE_DIR/${!NAME}" -C "$TP_SOURCE_DIR/";
then
+ elif [[ "${!NAME}" =~ ${SUFFIX_XZ} ]]; then
+ echo "${TP_SOURCE_DIR}/${!NAME}"
+ echo "${TP_SOURCE_DIR}/${!SOURCE}"
+ if ! "${TAR_CMD}" xJf "${TP_SOURCE_DIR}/${!NAME}" -C
"${TP_SOURCE_DIR}/"; then
echo "Failed to untar ${!NAME}"
exit 1
fi
- elif [[ "${!NAME}" =~ $SUFFIX_ZIP ]]; then
- if ! $UNZIP_CMD -o -qq "$TP_SOURCE_DIR/${!NAME}" -d
"$TP_SOURCE_DIR/"; then
+ elif [[ "${!NAME}" =~ ${SUFFIX_ZIP} ]]; then
+ if ! "${UNZIP_CMD}" -o -qq "${TP_SOURCE_DIR}/${!NAME}" -d
"${TP_SOURCE_DIR}/"; then
echo "Failed to unzip ${!NAME}"
exit 1
fi
- elif [[ "${!NAME}" =~ $SUFFIX_BZ2 ]]; then
- if ! $TAR_CMD xf "$TP_SOURCE_DIR/${!NAME}" -C "$TP_SOURCE_DIR/";
then
+ elif [[ "${!NAME}" =~ ${SUFFIX_BZ2} ]]; then
+ if ! "${TAR_CMD}" xf "${TP_SOURCE_DIR}/${!NAME}" -C
"${TP_SOURCE_DIR}/"; then
echo "Failed to untar ${!NAME}"
exit 1
fi
@@ -227,116 +222,132 @@ echo "===== Patching thirdparty archives..."
PATCHED_MARK="patched_mark"
# glog patch
-cd $TP_SOURCE_DIR/$GLOG_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/glog-0.4.0.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${GLOG_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/glog-0.4.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $GLOG_SOURCE"
+echo "Finished patching ${GLOG_SOURCE}"
# gtest patch
-cd $TP_SOURCE_DIR/$GTEST_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/googletest-release-1.11.0.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${GTEST_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/googletest-release-1.11.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $GTEST_SOURCE"
+echo "Finished patching ${GTEST_SOURCE}"
# mysql patch
-cd $TP_SOURCE_DIR/$MYSQL_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/mysql-server-mysql-5.7.18.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${MYSQL_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/mysql-server-mysql-5.7.18.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $MYSQL_SOURCE"
+echo "Finished patching ${MYSQL_SOURCE}"
# libevent patch
-cd $TP_SOURCE_DIR/$LIBEVENT_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/libevent.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${LIBEVENT_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/libevent.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $LIBEVENT_SOURCE"
+echo "Finished patching ${LIBEVENT_SOURCE}"
# s2 patch to disable shared library
-cd $TP_SOURCE_DIR/$S2_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/s2geometry-0.9.0.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${S2_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/s2geometry-0.9.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $S2_SOURCE"
+echo "Finished patching ${S2_SOURCE}"
# gsasl2 patch to fix link error such as mutilple func defination
# when link target with kerberos
-cd $TP_SOURCE_DIR/$GSASL_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/libgsasl-1.8.0.patch
- touch $PATCHED_MARK
+cd "${TP_SOURCE_DIR}/${GSASL_SOURCE}"
+if [[ ! -f ${PATCHED_MARK} ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/libgsasl-1.8.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $GSASL_SOURCE"
+echo "Finished patching ${GSASL_SOURCE}"
# rocksdb patch to fix compile error
-if [ $ROCKSDB_SOURCE == "rocksdb-5.14.2" ]; then
- cd $TP_SOURCE_DIR/$ROCKSDB_SOURCE
- if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/rocksdb-5.14.2.patch
- touch $PATCHED_MARK
+if [[ "${ROCKSDB_SOURCE}" == "rocksdb-5.14.2" ]]; then
+ cd "${TP_SOURCE_DIR}/${ROCKSDB_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/rocksdb-5.14.2.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
fi
-echo "Finished patching $ROCKSDB_SOURCE"
+echo "Finished patching ${ROCKSDB_SOURCE}"
# opentelemetry patch is used to solve the problem that threadlocal depends on
GLIBC_2.18
# see: https://github.com/apache/doris/pull/7911
-if [ $OPENTELEMETRY_SOURCE == "opentelemetry-cpp-1.4.0" ]; then
- rm -rf
$TP_SOURCE_DIR/$OPENTELEMETRY_SOURCE/third_party/opentelemetry-proto/*
- cp -r $TP_SOURCE_DIR/$OPENTELEMETRY_PROTO_SOURCE/*
$TP_SOURCE_DIR/$OPENTELEMETRY_SOURCE/third_party/opentelemetry-proto
- mkdir -p
$TP_SOURCE_DIR/$OPENTELEMETRY_SOURCE/third_party/opentelemetry-proto/.git
-
- cd $TP_SOURCE_DIR/$OPENTELEMETRY_SOURCE
- if [ ! -f $PATCHED_MARK ]; then
- patch -p1 < $TP_PATCH_DIR/opentelemetry-cpp-1.4.0.patch
- touch $PATCHED_MARK
+if [[ "${OPENTELEMETRY_SOURCE}" == "opentelemetry-cpp-1.4.0" ]]; then
+ rm -rf
"${TP_SOURCE_DIR}/${OPENTELEMETRY_SOURCE}/third_party/opentelemetry-proto"/*
+ cp -r "${TP_SOURCE_DIR}/${OPENTELEMETRY_PROTO_SOURCE}"/*
"${TP_SOURCE_DIR}/${OPENTELEMETRY_SOURCE}/third_party/opentelemetry-proto"
+ mkdir -p
"${TP_SOURCE_DIR}/${OPENTELEMETRY_SOURCE}/third_party/opentelemetry-proto/.git"
+
+ cd "${TP_SOURCE_DIR}/${OPENTELEMETRY_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/opentelemetry-cpp-1.4.0.patch"
+ touch "${PATCHED_MARK}"
+ fi
+ cd -
+fi
+echo "Finished patching ${OPENTELEMETRY_SOURCE}"
+
+# arrow patch is used to get the raw orc reader for filter prune.
+if [[ "${ARROW_SOURCE}" == "apache-arrow-7.0.0" ]]; then
+ cd "${TP_SOURCE_DIR}/${ARROW_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/apache-arrow-7.0.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
fi
-echo "Finished patching $OPENTELEMETRY_SOURCE"
+echo "Finished patching ${ARROW_SOURCE}"
# patch librdkafka to avoid crash
-if [ $LIBRDKAFKA_SOURCE = "librdkafka-1.8.2" ]; then
- cd $TP_SOURCE_DIR/$LIBRDKAFKA_SOURCE
- if [ ! -f $PATCHED_MARK ]; then
- patch -p0 < $TP_PATCH_DIR/librdkafka-1.8.2.patch
- touch $PATCHED_MARK
+if [[ "${LIBRDKAFKA_SOURCE}" == "librdkafka-1.8.2" ]]; then
+ cd "${TP_SOURCE_DIR}/${LIBRDKAFKA_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p0 <"${TP_PATCH_DIR}/librdkafka-1.8.2.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
fi
-echo "Finished patching $LIBRDKAFKA_SOURCE"
+echo "Finished patching ${LIBRDKAFKA_SOURCE}"
# patch hyperscan
# https://github.com/intel/hyperscan/issues/292
-if [ $HYPERSCAN_SOURCE = "hyperscan-5.4.0" ]; then
- cd $TP_SOURCE_DIR/$HYPERSCAN_SOURCE
- if [ ! -f $PATCHED_MARK ]; then
- patch -p0 < $TP_PATCH_DIR/hyperscan-5.4.0.patch
- touch $PATCHED_MARK
+if [[ "${HYPERSCAN_SOURCE}" == "hyperscan-5.4.0" ]]; then
+ cd "${TP_SOURCE_DIR}/${HYPERSCAN_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p0 <"${TP_PATCH_DIR}/hyperscan-5.4.0.patch"
+ touch "${PATCHED_MARK}"
+ fi
+ cd -
+elif [[ "${HYPERSCAN_SOURCE}" == "vectorscan-vectorscan-5.4.7" ]]; then
+ cd "${TP_SOURCE_DIR}/${HYPERSCAN_SOURCE}"
+ if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p0 <"${TP_PATCH_DIR}/vectorscan-5.4.7.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
fi
-echo "Finished patching $HYPERSCAN_SOURCE"
-
-cd $TP_SOURCE_DIR/$AWS_SDK_SOURCE
-if [ ! -f $PATCHED_MARK ]; then
- if [ $AWS_SDK_SOURCE == "aws-sdk-cpp-1.9.211" ]; then
- wget --no-check-certificate -q
https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/aws-crt-cpp-1.9.211.tar.gz
-O aws-crt-cpp-1.9.211.tar.gz
- ret="$?"
- if [ $ret -eq 0 ] ; then
+echo "Finished patching ${HYPERSCAN_SOURCE}"
+
+cd "${TP_SOURCE_DIR}/${AWS_SDK_SOURCE}"
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ if [[ "${AWS_SDK_SOURCE}" == "aws-sdk-cpp-1.9.211" ]]; then
+ if wget --no-check-certificate -q
https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/aws-crt-cpp-1.9.211.tar.gz
-O aws-crt-cpp-1.9.211.tar.gz; then
tar xzf aws-crt-cpp-1.9.211.tar.gz
else
bash ./prefetch_crt_dependency.sh
@@ -344,20 +355,15 @@ if [ ! -f $PATCHED_MARK ]; then
else
bash ./prefetch_crt_dependency.sh
fi
- touch $PATCHED_MARK
+ touch "${PATCHED_MARK}"
fi
cd -
-echo "Finished patching $AWS_SDK_SOURCE"
+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}
- else
- patch -p0 <"$TP_PATCH_DIR/brpc-1.1.0-_dl_sym.patch"
- touch ${PATCHED_MARK}
- fi
+if [[ ! -f "${PATCHED_MARK}" ]]; then
+ patch -p1 <"${TP_PATCH_DIR}/brpc-1.2.0.patch"
+ touch "${PATCHED_MARK}"
fi
cd -
echo "Finished patching ${BRPC_SOURCE}"
diff --git a/thirdparty/patches/apache-arrow-7.0.0.patch
b/thirdparty/patches/apache-arrow-7.0.0.patch
new file mode 100644
index 0000000000..9cb1812b35
--- /dev/null
+++ b/thirdparty/patches/apache-arrow-7.0.0.patch
@@ -0,0 +1,70 @@
+diff --git a/cpp/src/arrow/adapters/orc/adapter.cc
b/cpp/src/arrow/adapters/orc/adapter.cc
+index 03243e7..cbb3ed9 100644
+--- a/cpp/src/arrow/adapters/orc/adapter.cc
++++ b/cpp/src/arrow/adapters/orc/adapter.cc
+@@ -47,9 +47,6 @@
+ #include "arrow/util/visibility.h"
+ #include "orc/Exceptions.hh"
+
+-// alias to not interfere with nested orc namespace
+-namespace liborc = orc;
+-
+ #define ORC_THROW_NOT_OK(s) \
+ do { \
+ Status _s = (s); \
+@@ -198,6 +195,11 @@ class ORCFileReader::Impl {
+ return Init();
+ }
+
++ virtual liborc::Reader* GetRawORCReader() {
++ return reader_.get();
++ }
++
++
+ Status Init() {
+ int64_t nstripes = reader_->getNumberOfStripes();
+ stripes_.resize(nstripes);
+@@ -504,6 +506,7 @@ class ORCFileReader::Impl {
+ return Status::OK();
+ }
+
++
+ Status NextStripeReader(int64_t batch_size,
std::shared_ptr<RecordBatchReader>* out) {
+ return NextStripeReader(batch_size, {}, out);
+ }
+@@ -531,6 +534,10 @@ Result<std::unique_ptr<ORCFileReader>>
ORCFileReader::Open(
+ return std::move(result);
+ }
+
++liborc::Reader* ORCFileReader::GetRawORCReader() {
++ return impl_->GetRawORCReader();
++}
++
+ Result<std::shared_ptr<const KeyValueMetadata>> ORCFileReader::ReadMetadata()
{
+ return impl_->ReadMetadata();
+ }
+diff --git a/cpp/src/arrow/adapters/orc/adapter.h
b/cpp/src/arrow/adapters/orc/adapter.h
+index 223efa5..a0d112a 100644
+--- a/cpp/src/arrow/adapters/orc/adapter.h
++++ b/cpp/src/arrow/adapters/orc/adapter.h
+@@ -30,6 +30,10 @@
+ #include "arrow/type_fwd.h"
+ #include "arrow/util/macros.h"
+ #include "arrow/util/visibility.h"
++#include "orc/Reader.hh"
++
++// alias to not interfere with nested orc namespace
++namespace liborc = orc;
+
+ namespace arrow {
+ namespace adapters {
+@@ -50,6 +54,9 @@ class ARROW_EXPORT ORCFileReader {
+ ARROW_DEPRECATED("Deprecated in 6.0.0. Use Result-returning overload
instead.")
+ static Status Open(const std::shared_ptr<io::RandomAccessFile>& file,
MemoryPool* pool,
+ std::unique_ptr<ORCFileReader>* reader);
++
++ /// \brief Get ORC reader from inside.
++ liborc::Reader* GetRawORCReader();
+
+ /// \brief Creates a new ORC reader
+ ///
\ No newline at end of file
diff --git a/thirdparty/patches/brpc-1.1.0-_dl_sym.patch
b/thirdparty/patches/brpc-1.1.0-_dl_sym.patch
deleted file mode 100644
index 35d06b7708..0000000000
--- a/thirdparty/patches/brpc-1.1.0-_dl_sym.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- src/bthread/mutex.cpp 2022-08-10 13:14:11.792739916 +0800
-+++ src/bthread/mutex.cpp 2022-08-10 13:04:54.644764937 +0800
-@@ -44,7 +44,7 @@
- #include "bthread/log.h"
-
- extern "C" {
--extern void* _dl_sym(void* handle, const char* symbol, void* caller);
-+extern void* __attribute__((weak)) _dl_sym(void* handle, const char* symbol,
void* caller);
- }
-
- namespace bthread {
-@@ -408,8 +408,14 @@ static void init_sys_mutex_lock() {
- #if defined(OS_LINUX)
- // TODO: may need dlvsym when GLIBC has multiple versions of a same
symbol.
- //
http://blog.fesnel.com/blog/2009/08/25/preloading-with-multiple-symbol-versions
-- sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT,
"pthread_mutex_lock", (void*)init_sys_mutex_lock);
-- sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT,
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
-+ if (_dl_sym) {
-+ sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT,
"pthread_mutex_lock", (void*)init_sys_mutex_lock);
-+ sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT,
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
-+ } else {
-+ // _dl_sym may be undefined reference in some system, fallback to
dlsym
-+ sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT,
"pthread_mutex_lock");
-+ sys_pthread_mutex_unlock = (MutexOp)dlsym(RTLD_NEXT,
"pthread_mutex_unlock");
-+ }
- #elif defined(OS_MACOSX)
- // TODO: look workaround for dlsym on mac
- sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_lock");
diff --git a/thirdparty/patches/brpc-1.2.0.patch
b/thirdparty/patches/brpc-1.2.0.patch
new file mode 100644
index 0000000000..7414a388b9
--- /dev/null
+++ b/thirdparty/patches/brpc-1.2.0.patch
@@ -0,0 +1,13 @@
+diff --git a/tools/rpc_press/rpc_press_impl.cpp
b/tools/rpc_press/rpc_press_impl.cpp
+index 8a873eff..d1ff2a1e 100644
+--- a/tools/rpc_press/rpc_press_impl.cpp
++++ b/tools/rpc_press/rpc_press_impl.cpp
+@@ -222,7 +222,7 @@ void RpcPress::sync_client() {
+ int64_t last_expected_time = butil::monotonic_time_ns();
+ const int64_t interval = (int64_t) (1000000000L / req_rate);
+ // the max tolerant delay between end_time and expected_time. 10ms or 10
intervals
+- int64_t max_tolerant_delay = std::max(10000000L, 10 * interval);
++ int64_t max_tolerant_delay = std::max<int64_t>(10000000L, 10 * interval);
+ while (!_stop) {
+ brpc::Controller* cntl = new brpc::Controller;
+ msg_index = (msg_index + _options.test_thread_num) % _msgs.size();
diff --git a/thirdparty/patches/opentelemetry-cpp-1.4.0.patch
b/thirdparty/patches/opentelemetry-cpp-1.4.0.patch
index 2862d11c29..6317c60bf3 100644
--- a/thirdparty/patches/opentelemetry-cpp-1.4.0.patch
+++ b/thirdparty/patches/opentelemetry-cpp-1.4.0.patch
@@ -1,19 +1,15 @@
diff --git a/api/include/opentelemetry/common/threadlocal.h
b/api/include/opentelemetry/common/threadlocal.h
new file mode 100644
-index 0000000..799ec6c
+index 0000000..23a39e1
--- /dev/null
+++ b/api/include/opentelemetry/common/threadlocal.h
-@@ -0,0 +1,206 @@
+@@ -0,0 +1,123 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+
-+#include <pthread.h>
-+
-+#include <memory>
-+#include <mutex>
-+#include <ostream>
++#include "opentelemetry/version.h"
+
+//
+// GCC can be told that a certain branch is not likely to be taken (for
@@ -21,20 +17,8 @@ index 0000000..799ec6c
+// Giving it this information can help it optimize for the common case in
+// the absence of better information (ie. -fprofile-arcs).
+//
-+#ifndef PREDICT_FALSE
-+#if defined(__GNUC__)
-+#define PREDICT_FALSE(x) (__builtin_expect(x, 0))
-+#else
-+#define PREDICT_FALSE(x) x
-+#endif
-+#endif
-+#ifndef PREDICT_TRUE
-+#if defined(__GNUC__)
-+#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-+#else
-+#define PREDICT_TRUE(x) x
-+#endif
-+#endif
++#define LIKELY(expr) __builtin_expect(!!(expr), 1)
++#define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
+
+// Block-scoped static thread local implementation.
+//
@@ -55,14 +39,16 @@ index 0000000..799ec6c
+// BLOCK_STATIC_THREAD_LOCAL_TELEMTRY(SomeClass, instance, arg1, arg2, arg3);
+// instance->DoSomething();
+//
-+#define BLOCK_STATIC_THREAD_LOCAL_TELEMTRY(T, t, ...)
\
-+static __thread T* t;
\
-+do {
\
-+ if (PREDICT_FALSE(t == NULL)) {
\
-+ t = new T(__VA_ARGS__);
\
-+
internal_threadlocal::ThreadLocal::AddDestructor(internal_threadlocal::ThreadLocal::Destroy<T>,
t); \
-+ }
\
-+} while (false)
++#define BLOCK_STATIC_THREAD_LOCAL_TELEMTRY(T, t, ...)
\
++ static __thread T *t;
\
++ do
\
++ {
\
++ if (UNLIKELY(t == nullptr))
\
++ {
\
++ t = new T(__VA_ARGS__);
\
++ internal_threadlocal::AddDestructor(internal_threadlocal::Destroy<T>,
t); \
++ }
\
++ } while (false)
+
+// Class-scoped static thread local implementation.
+//
@@ -108,111 +94,42 @@ index 0000000..799ec6c
+// dtor must be destructed _after_ t, so it gets defined first.
+// Uses a mangled variable name for dtor since it must also be a member of the
+// class.
-+#define DECLARE_STATIC_THREAD_LOCAL_TELEMETRY(T, t)
\
-+static __thread T* t
++#define DECLARE_STATIC_THREAD_LOCAL_TELEMETRY(T, t) static __thread T *t
+
+// You must also define the instance in the .cc file.
-+#define DEFINE_STATIC_THREAD_LOCAL_TELEMETRY(T, Class, t)
\
-+__thread T* Class::t
++#define DEFINE_STATIC_THREAD_LOCAL_TELEMETRY(T, Class, t) __thread T *Class::t
+
+// Must be invoked at least once by each thread that will access t.
-+#define INIT_STATIC_THREAD_LOCAL_TELEMETRY(T, t, ...)
\
-+do {
\
-+ if (PREDICT_FALSE(t == NULL)) {
\
-+ t = new T(__VA_ARGS__);
\
-+
internal_threadlocal::ThreadLocal::AddDestructor(internal_threadlocal::ThreadLocal::Destroy<T>,
t); \
-+ }
\
-+} while (false)
++#define INIT_STATIC_THREAD_LOCAL_TELEMETRY(T, t, ...)
\
++ do
\
++ {
\
++ if (UNLIKELY(t == nullptr))
\
++ {
\
++ t = new T(__VA_ARGS__);
\
++ internal_threadlocal::AddDestructor(internal_threadlocal::Destroy<T>,
t); \
++ }
\
++ } while (false)
+
+// Internal implementation below.
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace internal_threadlocal
+{
+
-+// One key used by the entire process to attach destructors on thread exit.
-+static pthread_key_t destructors_key;
-+
-+static std::once_flag once_init;
-+
-+namespace
-+{
-+// List of destructors for all thread locals instantiated on a given thread.
-+struct PerThreadDestructorList
-+{
-+ void (*destructor)(void *);
-+ void *arg;
-+ PerThreadDestructorList *next;
-+};
-+
-+} // anonymous namespace
++// Add a destructor to the list.
++void AddDestructor(void (*destructor)(void *), void *arg);
+
-+class ThreadLocal {
-+public:
+// Destroy the passed object of type T.
-+ template <class T>
-+ static void Destroy(void *t)
-+ {
-+ // With tcmalloc, this should be pretty cheap (same thread as new).
-+ delete reinterpret_cast<T *>(t);
-+ }
-+
-+ // Call all the destructors associated with all THREAD_LOCAL instances in
this
-+// thread.
-+ static void InvokeDestructors(void *t)
-+ {
-+ PerThreadDestructorList *d = reinterpret_cast<PerThreadDestructorList
*>(t);
-+ while (d != nullptr)
-+ {
-+ d->destructor(d->arg);
-+ PerThreadDestructorList *next = d->next;
-+ delete d;
-+ d = next;
-+ }
-+ }
-+
-+// This key must be initialized only once.
-+ static void CreateKey()
-+ {
-+ int ret = pthread_key_create(&destructors_key, &InvokeDestructors);
-+ // Linux supports up to 1024 keys, we will use only one for all thread
locals.
-+/* if (ret != 0)
-+ {
-+ std::stringstream ss;
-+ ss << "[thread local] pthread_key_create() failed, cannot add
destructor to thread: "
-+ << "error " << ret;
-+ OTEL_INTERNAL_LOG_ERROR(ss.str());
-+ }*/
-+ }
-+
-+// Adds a destructor to the list.
-+ static void AddDestructor(void (*destructor)(void *), void *arg)
-+ {
-+ std::call_once(once_init, &CreateKey);
-+
-+ // Returns NULL if nothing is set yet.
-+ std::unique_ptr<PerThreadDestructorList> p(new PerThreadDestructorList());
-+ p->destructor = destructor;
-+ p->arg = arg;
-+ p->next = reinterpret_cast<PerThreadDestructorList
*>(pthread_getspecific(destructors_key));
-+ int ret = pthread_setspecific(destructors_key, p.release());
-+ // The only time this check should fail is if we are out of memory, or if
-+ // somehow key creation failed, which should be caught by the above CHECK.
-+/* if (ret != 0)
-+ {
-+ std::stringstream ss;
-+ ss << "[thread local] pthread_setspecific() failed, cannot update
destructor list: "
-+ << "error " << ret;
-+ OTEL_INTERNAL_LOG_ERROR(ss.str());
-+ }*/
-+ }
-+
-+};
-+
-+} // namespace threadlocal
++template <class T>
++static void Destroy(void *t)
++{
++ // With tcmalloc, this should be pretty cheap (same thread as new).
++ delete reinterpret_cast<T *>(t);
++}
++} // namespace internal_threadlocal
+OPENTELEMETRY_END_NAMESPACE
\ No newline at end of file
diff --git a/api/include/opentelemetry/context/runtime_context.h
b/api/include/opentelemetry/context/runtime_context.h
-index 5cb793b..24ba44b 100644
+index 167a928..608b6da 100644
--- a/api/include/opentelemetry/context/runtime_context.h
+++ b/api/include/opentelemetry/context/runtime_context.h
@@ -4,6 +4,7 @@
@@ -223,7 +140,7 @@ index 5cb793b..24ba44b 100644
OPENTELEMETRY_BEGIN_NAMESPACE
namespace context
-@@ -178,7 +179,7 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
+@@ -188,7 +189,7 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
ThreadLocalContextStorage() noexcept = default;
// Return the current context.
@@ -232,7 +149,7 @@ index 5cb793b..24ba44b 100644
// Resets the context to the value previous to the passed in token. This
will
// also detach all child contexts of the passed in token.
-@@ -186,23 +187,23 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
+@@ -196,23 +197,23 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
bool Detach(Token &token) noexcept override
{
// In most cases, the context to be detached is on the top of the stack.
@@ -262,7 +179,7 @@ index 5cb793b..24ba44b 100644
return true;
}
-@@ -211,14 +212,14 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
+@@ -221,14 +222,14 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
// that can be used to reset to the previous Context.
nostd::unique_ptr<Token> Attach(const Context &context) noexcept override
{
@@ -279,7 +196,7 @@ index 5cb793b..24ba44b 100644
friend class ThreadLocalContextStorage;
Stack() noexcept : size_(0), capacity_(0), base_(nullptr){};
-@@ -305,9 +306,10 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
+@@ -315,9 +316,10 @@ class ThreadLocalContextStorage : public
RuntimeContextStorage
Context *base_;
};
@@ -293,7 +210,7 @@ index 5cb793b..24ba44b 100644
}
};
diff --git a/sdk/CMakeLists.txt b/sdk/CMakeLists.txt
-index 9aa4588..e2c5a4a 100644
+index 1a824fe..91d4b5c 100644
--- a/sdk/CMakeLists.txt
+++ b/sdk/CMakeLists.txt
@@ -1,4 +1,4 @@
@@ -302,6 +219,16 @@ index 9aa4588..e2c5a4a 100644
target_include_directories(
opentelemetry_sdk
INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
+diff --git a/sdk/src/common/CMakeLists.txt b/sdk/src/common/CMakeLists.txt
+index debffef..b4fc875 100644
+--- a/sdk/src/common/CMakeLists.txt
++++ b/sdk/src/common/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-set(COMMON_SRCS random.cc core.cc)
++set(COMMON_SRCS random.cc core.cc threadlocal.cc)
+ if(WIN32)
+ list(APPEND COMMON_SRCS platform/fork_windows.cc)
+ else()
diff --git a/sdk/src/common/random.cc b/sdk/src/common/random.cc
index 77b88cf..dc71f9c 100644
--- a/sdk/src/common/random.cc
@@ -372,3 +299,92 @@ index ecd6dab..1aaa220 100644
};
} // namespace common
} // namespace sdk
+diff --git a/sdk/src/common/threadlocal.cc b/sdk/src/common/threadlocal.cc
+new file mode 100644
+index 0000000..1f8b6b1
+--- /dev/null
++++ b/sdk/src/common/threadlocal.cc
+@@ -0,0 +1,82 @@
++// Copyright The OpenTelemetry Authors
++// SPDX-License-Identifier: Apache-2.0
++
++#include <opentelemetry/common/threadlocal.h>
++
++#include <pthread.h>
++#include <memory>
++#include <mutex>
++#include <ostream>
++#include <sstream>
++
++OPENTELEMETRY_BEGIN_NAMESPACE
++namespace internal_threadlocal
++{
++
++// One key used by the entire process to attach destructors on thread exit.
++static pthread_key_t destructors_key;
++
++static std::once_flag once_init;
++
++namespace
++{
++// List of destructors for all thread locals instantiated on a given thread.
++struct PerThreadDestructorList
++{
++ void (*destructor)(void *);
++ void *arg;
++ PerThreadDestructorList *next;
++};
++
++} // anonymous namespace
++
++// Call all the destructors associated with all THREAD_LOCAL instances in
this thread.
++static void InvokeDestructors(void *t)
++{
++ auto *d = reinterpret_cast<PerThreadDestructorList *>(t);
++ while (d != nullptr)
++ {
++ d->destructor(d->arg);
++ PerThreadDestructorList *next = d->next;
++ delete d;
++ d = next;
++ }
++}
++
++// This key must be initialized only once.
++static void CreateKey()
++{
++ int ret = pthread_key_create(&destructors_key, &InvokeDestructors);
++ // Linux supports up to 1024 keys, we will use only one for all thread
locals.
++ if (ret != 0)
++ {
++ std::stringstream ss;
++ ss << "[thread local] pthread_key_create() failed, cannot add destructor
to thread: "
++ << "error " << ret;
++ fprintf(stderr, "%s\n", ss.str().c_str());
++ }
++}
++
++// Adds a destructor to the list.
++void AddDestructor(void (*destructor)(void *), void *arg)
++{
++ std::call_once(once_init, &CreateKey);
++
++ // Returns NULL if nothing is set yet.
++ std::unique_ptr<PerThreadDestructorList> p(new PerThreadDestructorList());
++ p->destructor = destructor;
++ p->arg = arg;
++ p->next = reinterpret_cast<PerThreadDestructorList
*>(pthread_getspecific(destructors_key));
++ int ret = pthread_setspecific(destructors_key, p.release());
++ // The only time this check should fail is if we are out of memory, or if
++ // somehow key creation failed, which should be caught by the above CHECK.
++ if (ret != 0)
++ {
++ std::stringstream ss;
++ ss << "[thread local] pthread_setspecific() failed, cannot update
destructor list: "
++ << "error " << ret;
++ fprintf(stderr, "%s\n", ss.str().c_str());
++ }
++}
++} // namespace internal_threadlocal
++OPENTELEMETRY_END_NAMESPACE
+\ No newline at end of file
diff --git a/thirdparty/patches/vectorscan-5.4.7.patch
b/thirdparty/patches/vectorscan-5.4.7.patch
new file mode 100644
index 0000000000..712c11e86a
--- /dev/null
+++ b/thirdparty/patches/vectorscan-5.4.7.patch
@@ -0,0 +1,31 @@
+diff --git CMakeLists.txt CMakeLists.txt
+index cb4ba80..9a106e5 100644
+--- CMakeLists.txt
++++ CMakeLists.txt
+@@ -170,7 +170,7 @@ if (CMAKE_COMPILER_IS_GNUCC AND NOT CROSS_COMPILE)
+
+ # arg1 might exist if using ccache
+ string (STRIP "${CMAKE_C_COMPILER_ARG1}" CC_ARG1)
+- set (EXEC_ARGS ${CC_ARG1} -c -Q --help=target -${ARCH_FLAG}=native
-mtune=native)
++ set (EXEC_ARGS ${CC_ARG1} -c -Q --help=target -mtune=native)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${EXEC_ARGS}
+ OUTPUT_VARIABLE _GCC_OUTPUT)
+ string(FIND "${_GCC_OUTPUT}" "${ARCH_FLAG}" POS)
+diff --git cmake/build_wrapper.sh cmake/build_wrapper.sh
+index 895610c..becfbf4 100755
+--- cmake/build_wrapper.sh
++++ cmake/build_wrapper.sh
+@@ -17,11 +17,11 @@ KEEPSYMS=$(mktemp -p /tmp keep.syms.XXXXX)
+ LIBC_SO=$("$@" --print-file-name=libc.so.6)
+ cp ${KEEPSYMS_IN} ${KEEPSYMS}
+ # get all symbols from libc and turn them into patterns
+-nm -f p -g -D ${LIBC_SO} | sed -s 's/\([^ @]*\).*/^\1$/' >> ${KEEPSYMS}
++nm -f posix -g -D ${LIBC_SO} | sed -s 's/\([^ @]*\).*/^\1$/' >> ${KEEPSYMS}
+ # build the object
+ "$@"
+ # rename the symbols in the object
+-nm -f p -g ${OUT} | cut -f1 -d' ' | grep -v -f ${KEEPSYMS} | sed -e
"s/\(.*\)/\1\ ${PREFIX}_\1/" >> ${SYMSFILE}
++nm -f posix -g ${OUT} | cut -f1 -d' ' | grep -v -f ${KEEPSYMS} | sed -e
"s/\(.*\)/\1\ ${PREFIX}_\1/" >> ${SYMSFILE}
+ if test -s ${SYMSFILE}
+ then
+ objcopy --redefine-syms=${SYMSFILE} ${OUT}
diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh
index de005c6dbb..96148f6628 100755
--- a/thirdparty/vars.sh
+++ b/thirdparty/vars.sh
@@ -1,4 +1,6 @@
#!/bin/bash
+# shellcheck disable=2034
+
# 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
@@ -27,25 +29,25 @@
###################################################
# thirdparties will be downloaded and unpacked here
-export TP_SOURCE_DIR=$TP_DIR/src
+export TP_SOURCE_DIR="${TP_DIR:-.}/src"
# thirdparties will be installed to here
-export TP_INSTALL_DIR=$TP_DIR/installed
+export TP_INSTALL_DIR="${TP_DIR:-.}/installed"
# patches for all thirdparties
-export TP_PATCH_DIR=$TP_DIR/patches
+export TP_PATCH_DIR="${TP_DIR:-.}/patches"
# header files of all thirdparties will be intalled to here
-export TP_INCLUDE_DIR=$TP_INSTALL_DIR/include
+export TP_INCLUDE_DIR="${TP_INSTALL_DIR}/include"
# libraries of all thirdparties will be intalled to here
-export TP_LIB_DIR=$TP_INSTALL_DIR/lib
+export TP_LIB_DIR="${TP_INSTALL_DIR}/lib"
# all java libraries will be unpacked to here
-export TP_JAR_DIR=$TP_INSTALL_DIR/lib/jar
+export TP_JAR_DIR="${TP_INSTALL_DIR}/lib/jar"
# source of all dependencies, default unuse it
-export REPOSITORY_URL=
+# export REPOSITORY_URL=
#####################################################
# Download url, filename and unpaced filename
@@ -155,6 +157,16 @@ HYPERSCAN_NAME=hyperscan-5.4.0.tar.gz
HYPERSCAN_SOURCE=hyperscan-5.4.0
HYPERSCAN_MD5SUM="65e08385038c24470a248f6ff2fa379b"
+# vectorscan (support arm for hyperscan)
+MACHINE_TYPE=$(uname -m)
+if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then
+ echo "use vectorscan instead of hyperscan on aarch64"
+
HYPERSCAN_DOWNLOAD="https://github.com/VectorCamp/vectorscan/archive/refs/tags/vectorscan/5.4.7.tar.gz"
+ HYPERSCAN_NAME=vectorscan-5.4.7.tar.gz
+ HYPERSCAN_SOURCE=vectorscan-vectorscan-5.4.7
+ HYPERSCAN_MD5SUM="ae924ccce79ef9bf6bf118693ae14fe5"
+fi
+
# ragel (dependency for hyperscan)
RAGEL_DOWNLOAD="http://www.colm.net/files/ragel/ragel-6.10.tar.gz"
RAGEL_NAME=ragel-6.10.tar.gz
@@ -180,16 +192,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.2.0.tar.gz"
+BRPC_NAME="incubator-brpc-1.2.0.tar.gz"
+BRPC_SOURCE="incubator-brpc-1.2.0"
+BRPC_MD5SUM="556c024d5f770dbd2336ca4541ae8c96"
# rocksdb
ROCKSDB_DOWNLOAD="https://github.com/facebook/rocksdb/archive/v5.14.2.tar.gz"
@@ -411,65 +423,65 @@ 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
-THRIFT
-PROTOBUF
-GFLAGS
-GLOG
-GTEST
-RAPIDJSON
-SNAPPY
-GPERFTOOLS
-ZLIB
-LZ4
-BZIP
-LZO2
-CURL
-RE2
-HYPERSCAN
-RAGEL
-BOOST
-MYSQL
-ODBC
-LEVELDB
-BRPC
-ROCKSDB
-CYRUS_SASL
-LIBRDKAFKA
-FLATBUFFERS
-ARROW
-BROTLI
-ZSTD
-S2
-BITSHUFFLE
-CROARINGBITMAP
-FMT
-PARALLEL_HASHMAP
-ORC
-JEMALLOC
-CCTZ
-DATATABLES
-BOOTSTRAP_TABLE_JS
-BOOTSTRAP_TABLE_CSS
-TSAN_HEADER
-AWS_SDK
-LZMA
-XML2
-IDN
-GSASL
-KRB5
-HDFS3
-LIBDIVIDE
-PDQSORT
-BENCHMARK
-XSIMD
-SIMDJSON
-NLOHMANN_JSON
-OPENTELEMETRY_PROTO
-OPENTELEMETRY
-LIBBACKTRACE
-SSE2NEON"
+export TP_ARCHIVES=(
+ 'LIBEVENT'
+ 'OPENSSL'
+ 'THRIFT'
+ 'PROTOBUF'
+ 'GFLAGS'
+ 'GLOG'
+ 'GTEST'
+ 'RAPIDJSON'
+ 'SNAPPY'
+ 'GPERFTOOLS'
+ 'ZLIB'
+ 'LZ4'
+ 'BZIP'
+ 'LZO2'
+ 'CURL'
+ 'RE2'
+ 'HYPERSCAN'
+ 'RAGEL'
+ 'BOOST'
+ 'MYSQL'
+ 'ODBC'
+ 'LEVELDB'
+ 'BRPC'
+ 'ROCKSDB'
+ 'CYRUS_SASL'
+ 'LIBRDKAFKA'
+ 'FLATBUFFERS'
+ 'ARROW'
+ 'BROTLI'
+ 'ZSTD'
+ 'S2'
+ 'BITSHUFFLE'
+ 'CROARINGBITMAP'
+ 'FMT'
+ 'PARALLEL_HASHMAP'
+ 'ORC'
+ 'JEMALLOC'
+ 'CCTZ'
+ 'DATATABLES'
+ 'BOOTSTRAP_TABLE_JS'
+ 'BOOTSTRAP_TABLE_CSS'
+ 'TSAN_HEADER'
+ 'AWS_SDK'
+ 'LZMA'
+ 'XML2'
+ 'IDN'
+ 'GSASL'
+ 'KRB5'
+ 'HDFS3'
+ 'LIBDIVIDE'
+ 'PDQSORT'
+ 'BENCHMARK'
+ 'XSIMD'
+ 'SIMDJSON'
+ 'NLOHMANN_JSON'
+ 'OPENTELEMETRY_PROTO'
+ 'OPENTELEMETRY'
+ 'LIBBACKTRACE'
+ 'SSE2NEON'
+)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]