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 <morningman....@gmail.com> 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org