| #!/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 |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| ################################################################################# |
| # This script will |
| # 1. Check prerequisite libraries. Including: |
| # cmake byacc flex automake libtool binutils-dev libiberty-dev bison |
| # 2. Compile and install all thirdparties which are downloaded |
| # using *download-thirdparty.sh*. |
| # |
| # This script will run *download-thirdparty.sh* once again |
| # to check if all thirdparties have been downloaded, unpacked and patched. |
| ################################################################################# |
| |
| set -eo pipefail |
| |
| curdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" |
| |
| export DORIS_HOME="${curdir}/.." |
| export TP_DIR="${curdir}" |
| |
| # include custom environment variables |
| if [[ -f "${DORIS_HOME}/env.sh" ]]; then |
| export DO_NOT_CHECK_JAVA_ENV=1 |
| . "${DORIS_HOME}/env.sh" |
| export DO_NOT_CHECK_JAVA_ENV= |
| fi |
| |
| # Check args |
| usage() { |
| echo " |
| Usage: $0 [options...] [packages...] |
| Optional options: |
| -j <num> build thirdparty parallel |
| --clean clean the extracted data |
| --continue <package> continue to build the remaining packages (starts from the specified package) |
| " |
| exit 1 |
| } |
| |
| if ! OPTS="$(getopt \ |
| -n "$0" \ |
| -o 'hj:' \ |
| -l 'help,clean,continue:' \ |
| -- "$@")"; then |
| usage |
| fi |
| |
| eval set -- "${OPTS}" |
| |
| KERNEL="$(uname -s)" |
| |
| if [[ "${KERNEL}" == 'Darwin' ]]; then |
| PARALLEL="$(($(sysctl -n hw.logicalcpu) / 4 + 1))" |
| else |
| PARALLEL="$(($(nproc) / 4 + 1))" |
| fi |
| |
| while true; do |
| case "$1" in |
| -j) |
| PARALLEL="$2" |
| shift 2 |
| ;; |
| -h) |
| HELP=1 |
| shift |
| ;; |
| --help) |
| HELP=1 |
| shift |
| ;; |
| --clean) |
| CLEAN=1 |
| shift |
| ;; |
| --continue) |
| CONTINUE=1 |
| start_package="${2}" |
| shift 2 |
| ;; |
| --) |
| shift |
| break |
| ;; |
| *) |
| echo "Internal error" |
| exit 1 |
| ;; |
| esac |
| done |
| |
| if [[ "${CONTINUE}" -eq 1 ]]; then |
| if [[ -z "${start_package}" ]] || [[ "${#}" -ne 0 ]]; then |
| usage |
| fi |
| fi |
| |
| read -r -a packages <<<"${@}" |
| |
| if [[ "${HELP}" -eq 1 ]]; then |
| usage |
| fi |
| |
| echo "Get params: |
| PARALLEL -- ${PARALLEL} |
| CLEAN -- ${CLEAN} |
| PACKAGES -- ${packages[*]} |
| CONTINUE -- ${start_package} |
| " |
| |
| if [[ ! -f "${TP_DIR}/download-thirdparty.sh" ]]; then |
| echo "Download thirdparty script is missing". |
| exit 1 |
| fi |
| |
| if [[ ! -f "${TP_DIR}/vars.sh" ]]; then |
| echo "vars.sh is missing". |
| exit 1 |
| fi |
| |
| . "${TP_DIR}/vars.sh" |
| |
| cd "${TP_DIR}" |
| |
| if [[ "${CLEAN}" -eq 1 ]] && [[ -d "${TP_SOURCE_DIR}" ]]; then |
| echo 'Clean the extracted data ...' |
| find "${TP_SOURCE_DIR}" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \; |
| echo 'Success!' |
| fi |
| |
| # Download thirdparties. |
| "${TP_DIR}/download-thirdparty.sh" |
| |
| export LD_LIBRARY_PATH="${TP_DIR}/installed/lib:${LD_LIBRARY_PATH}" |
| |
| # toolchain specific warning options and settings |
| if [[ "${CC}" == *gcc ]]; then |
| warning_uninitialized='-Wno-maybe-uninitialized' |
| warning_stringop_truncation='-Wno-stringop-truncation' |
| warning_class_memaccess='-Wno-class-memaccess' |
| warning_array_parameter='-Wno-array-parameter' |
| warning_narrowing='-Wno-narrowing' |
| warning_dangling_reference='-Wno-dangling-reference' |
| 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' |
| warning_narrowing='-Wno-c++11-narrowing' |
| boost_toolset='clang' |
| libhdfs_cxx17='-std=c++1z' |
| |
| test_warning_result="$("${CC}" -xc++ "${warning_unused_but_set_variable}" /dev/null 2>&1 || true)" |
| if echo "${test_warning_result}" | grep 'unknown warning option' >/dev/null; then |
| warning_unused_but_set_variable='' |
| fi |
| fi |
| |
| # prepare installed prefix |
| mkdir -p "${TP_DIR}/installed/lib64" |
| pushd "${TP_DIR}/installed"/ |
| ln -sf lib64 lib |
| popd |
| |
| # Configure the search paths for pkg-config and cmake |
| export PKG_CONFIG_PATH="${TP_DIR}/installed/lib64/pkgconfig" |
| export CMAKE_PREFIX_PATH="${TP_DIR}/installed" |
| |
| echo "PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}" |
| echo "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" |
| |
| check_prerequest() { |
| local CMD="$1" |
| local NAME="$2" |
| if ! eval "${CMD}"; then |
| echo "${NAME} is missing" |
| exit 1 |
| else |
| echo "${NAME} is found" |
| fi |
| } |
| |
| # sudo apt-get install cmake |
| # sudo yum install cmake |
| check_prerequest "${CMAKE_CMD} --version" "cmake" |
| |
| # sudo apt-get install byacc |
| # sudo yum install byacc |
| check_prerequest "byacc -V" "byacc" |
| |
| # sudo apt-get install flex |
| # sudo yum install flex |
| check_prerequest "flex -V" "flex" |
| |
| # sudo apt-get install automake |
| # sudo yum install automake |
| check_prerequest "automake --version" "automake" |
| |
| # sudo apt-get install libtool |
| # sudo yum install libtool |
| 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 |
| echo "Error: aclocal version(${aclocal_version}) is not equal to automake version(${automake_version})." |
| exit 1 |
| fi |
| |
| # sudo apt-get install binutils-dev |
| # sudo yum install binutils-devel |
| #check_prerequest "locate libbfd.a" "binutils-dev" |
| |
| # sudo apt-get install libiberty-dev |
| # no need in centos 7.1 |
| #check_prerequest "locate libiberty.a" "libiberty-dev" |
| |
| # sudo apt-get install bison |
| # sudo yum install bison |
| # necessary only when compiling be |
| #check_prerequest "bison --version" "bison" |
| |
| ######################### |
| # 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 |
| 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." |
| exit 1 |
| fi |
| echo "===== begin build $1" |
| } |
| |
| check_if_archive_exist() { |
| if [[ -z $1 ]]; then |
| echo "archive should specified to check if exist." |
| exit 1 |
| fi |
| |
| 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 |
| } |
| |
| if [[ -z "${STRIP_TP_LIB}" ]]; then |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| STRIP_TP_LIB='ON' |
| else |
| STRIP_TP_LIB='OFF' |
| fi |
| fi |
| |
| if [[ "${STRIP_TP_LIB}" = "ON" ]]; then |
| echo "Strip thirdparty libraries" |
| else |
| echo "Do not strip thirdparty libraries" |
| fi |
| |
| strip_lib() { |
| if [[ "${STRIP_TP_LIB}" = "ON" ]]; then |
| if [[ -z $1 ]]; then |
| echo "Must specify the library to be stripped." |
| exit 1 |
| fi |
| if [[ ! -f "${TP_LIB_DIR}/$1" ]]; then |
| echo "Library to be stripped (${TP_LIB_DIR}/$1) does not exist." |
| exit 1 |
| fi |
| strip --strip-debug --strip-unneeded "${TP_LIB_DIR}/$1" |
| fi |
| } |
| |
| #libbacktrace |
| build_libbacktrace() { |
| check_if_source_exist "${LIBBACKTRACE_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${LIBBACKTRACE_SOURCE}" |
| |
| 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}" |
| |
| 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_lib libevent.a |
| } |
| |
| build_openssl() { |
| MACHINE_TYPE="$(uname -m)" |
| OPENSSL_PLATFORM="linux-x86_64" |
| 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}" |
| |
| 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 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* |
| fi |
| 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}" |
| |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| cflags="-I${TP_INCLUDE_DIR}" |
| cxxflags="-I${TP_INCLUDE_DIR} ${warning_unused_but_set_variable} -Wno-inconsistent-missing-override" |
| ldflags="-L${TP_LIB_DIR} --static" |
| else |
| cflags="-I${TP_INCLUDE_DIR} -Wno-implicit-function-declaration -Wno-inconsistent-missing-override" |
| cxxflags="-I${TP_INCLUDE_DIR} ${warning_unused_but_set_variable} -Wno-inconsistent-missing-override" |
| ldflags="-L${TP_LIB_DIR}" |
| fi |
| |
| # NOTE(amos): libtool discard -static. --static works. |
| ./configure CFLAGS="${cflags}" CXXFLAGS="${cxxflags}" 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 |
| strip_lib libthrift.a |
| strip_lib libthriftnb.a |
| } |
| |
| # protobuf |
| build_protobuf() { |
| check_if_source_exist "${PROTOBUF_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${PROTOBUF_SOURCE}" |
| |
| if [[ "${KERNEL}" == 'Darwin' ]]; then |
| ldflags="-L${TP_LIB_DIR}" |
| else |
| ldflags="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc -Wl,--undefined=pthread_create" |
| fi |
| |
| mkdir -p cmake/build |
| cd cmake/build |
| |
| CXXFLAGS="-O2 -I${TP_INCLUDE_DIR}" \ |
| LDFLAGS="${ldflags}" \ |
| "${CMAKE_CMD}" -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" \ |
| -Dprotobuf_USE_EXTERNAL_GTEST=ON \ |
| -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ |
| -Dprotobuf_BUILD_SHARED_LIBS=OFF \ |
| -Dprotobuf_BUILD_TESTS=OFF \ |
| -DZLIB_LIBRARY="${TP_LIB_DIR}/libz.a" \ |
| -Dprotobuf_ABSL_PROVIDER=package \ |
| -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ../.. |
| |
| make -j "${PARALLEL}" |
| make install |
| strip_lib libprotobuf.a |
| strip_lib libprotoc.a |
| } |
| |
| # gflags |
| build_gflags() { |
| check_if_source_exist "${GFLAGS_SOURCE}" |
| |
| 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_BUILD_TYPE=Release -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}" |
| |
| if [[ "${GLOG_SOURCE}" == "glog-0.4.0" ]]; then |
| # 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}" \ |
| ./configure --prefix="${TP_INSTALL_DIR}" --enable-frame-pointers --disable-shared --enable-static |
| |
| make -j "${PARALLEL}" |
| make install |
| elif [[ "${GLOG_SOURCE}" == "glog-0.6.0" ]]; then |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| "${CMAKE_CMD}" -S . -B build -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ |
| -DWITH_UNWIND=OFF \ |
| -DBUILD_SHARED_LIBS=OFF \ |
| -DWITH_TLS=OFF |
| |
| cmake --build build --target install |
| fi |
| |
| strip_lib libglog.a |
| } |
| |
| # gtest |
| build_gtest() { |
| check_if_source_exist "${GTEST_SOURCE}" |
| |
| 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 |
| # -DCMAKE_CXX_FLAGS="$warning_uninitialized" |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| strip_lib libgtest.a |
| } |
| |
| # rapidjson |
| build_rapidjson() { |
| 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 |
| } |
| |
| # snappy |
| build_snappy() { |
| check_if_source_exist "${SNAPPY_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${SNAPPY_SOURCE}" |
| |
| 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 |
| |
| #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" |
| } |
| |
| # gperftools |
| build_gperftools() { |
| 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}" \ |
| 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}" |
| |
| CFLAGS="-O3 -fPIC" \ |
| CPPFLAGS="-I${TP_INCLUDE_DIR}" \ |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| ./configure --prefix="${TP_INSTALL_DIR}" |
| |
| 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 |
| } |
| |
| # lz4 |
| build_lz4() { |
| 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 |
| rm -f "${TP_INSTALL_DIR}/bin/${link}" |
| done |
| |
| 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 |
| strip_lib libzstd.a |
| } |
| |
| # bzip |
| build_bzip() { |
| check_if_source_exist "${BZIP_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${BZIP_SOURCE}" |
| |
| make -j "${PARALLEL}" install PREFIX="${TP_INSTALL_DIR}" |
| } |
| |
| # lzo2 |
| build_lzo2() { |
| check_if_source_exist "${LZO2_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${LZO2_SOURCE}" |
| |
| 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_lib liblzo2.a |
| } |
| |
| # curl |
| build_curl() { |
| 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} " \ |
| 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 --without-nghttp2 |
| |
| make curl_LDFLAGS=-all-static -j "${PARALLEL}" |
| make curl_LDFLAGS=-all-static install |
| strip_lib libcurl.a |
| } |
| |
| # re2 |
| build_re2() { |
| 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_POSITION_INDEPENDENT_CODE=ON \ |
| -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" install |
| strip_lib libre2.a |
| } |
| |
| # hyperscan |
| build_hyperscan() { |
| check_if_source_exist "${RAGEL_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${RAGEL_SOURCE}" |
| |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| cxxflags='-static' |
| else |
| cxxflags='' |
| fi |
| |
| CXXFLAGS="${cxxflags}" \ |
| ./configure --prefix="${TP_INSTALL_DIR}" |
| make install |
| |
| check_if_source_exist "${HYPERSCAN_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${HYPERSCAN_SOURCE}" |
| |
| # We don't need to build tools/hsbench which depends on sqlite3 installed. |
| rm -rf "${TP_SOURCE_DIR}/${HYPERSCAN_SOURCE}/tools/hsbench" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| CXXFLAGS="-D_HAS_AUTO_PTR_ETC=0" \ |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| -DBOOST_ROOT="${TP_INSTALL_DIR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_EXAMPLES=OFF .. |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" install |
| strip_lib libhs.a |
| } |
| |
| # boost |
| build_boost() { |
| check_if_source_exist "${BOOST_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${BOOST_SOURCE}" |
| |
| 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++17 -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}" |
| |
| cd "${TP_SOURCE_DIR}/${MYSQL_SOURCE}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| rm -rf CMakeCache.txt CMakeFiles/ |
| |
| 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="${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/ |
| mkdir ../../../installed/include/mysql/ -p |
| cp -R ./include/* ../../../installed/include/mysql/ |
| cp -R ../include/* ../../../installed/include/mysql/ |
| cp ../libbinlogevents/export/binary_log_types.h ../../../installed/include/mysql/ |
| echo "mysql headers are installed." |
| |
| # copy libmysqlclient.a |
| cp libmysql/libmysqlclient.a ../../../installed/lib/ |
| echo "mysql client lib is installed." |
| strip_lib libmysqlclient.a |
| } |
| |
| #leveldb |
| build_leveldb() { |
| 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_lib libleveldb.a |
| } |
| |
| # brpc |
| build_brpc() { |
| check_if_source_exist "${BRPC_SOURCE}" |
| |
| cd "${TP_SOURCE_DIR}/${BRPC_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}" |
| |
| # Don't set OPENSSL_ROOT_DIR |
| sed '/set(OPENSSL_ROOT_DIR/,/)/ d' ../CMakeLists.txt >../CMakeLists.txt.bak |
| mv ../CMakeLists.txt.bak ../CMakeLists.txt |
| 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 |
| # If BUILD_SHARED_LIBS=OFF, on centos 5.4 will error: `undefined reference to `google::FlagRegisterer`, no error on MacOS. |
| # If glog is compiled before gflags, the above error will not exist, this works in glog 0.4, |
| # but glog 0.6 enforces dependency on gflags. |
| # glog must be enabled, otherwise error: `flag 'v' was defined more than once` (in files 'glog-0.6.0/src/vlog_is_on.cc' and 'brpc-1.6.0/src/butil/logging.cc') |
| LDFLAGS="${ldflags}" \ |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_SHARED_LIBS=ON -DWITH_GLOG=ON -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DCMAKE_LIBRARY_PATH="${TP_INSTALL_DIR}/lib64" -DCMAKE_INCLUDE_PATH="${TP_INSTALL_DIR}/include" \ |
| -DBUILD_BRPC_TOOLS=OFF \ |
| -DPROTOBUF_PROTOC_EXECUTABLE="${TP_INSTALL_DIR}/bin/protoc" .. |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| |
| remove_all_dylib |
| strip_lib libbrpc.a |
| } |
| |
| # rocksdb |
| build_rocksdb() { |
| check_if_source_exist "${ROCKSDB_SOURCE}" |
| |
| cd "${TP_SOURCE_DIR}/${ROCKSDB_SOURCE}" |
| |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| ldflags='-static-libstdc++ -static-libgcc' |
| else |
| if [[ "$(uname -m)" != 'x86_64' ]]; then |
| ldflags='' |
| else |
| ldflags="-L${TP_LIB_DIR} -ljemalloc_doris" |
| fi |
| fi |
| |
| # -Wno-range-loop-construct gcc-11 |
| CFLAGS="-I ${TP_INCLUDE_DIR} -I ${TP_INCLUDE_DIR}/snappy -I ${TP_INCLUDE_DIR}/lz4" \ |
| CXXFLAGS="-include cstdint -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_lib librocksdb.a |
| } |
| |
| # cyrus_sasl |
| build_cyrus_sasl() { |
| check_if_source_exist "${CYRUS_SASL_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${CYRUS_SASL_SOURCE}" |
| |
| CFLAGS="-fPIC -Wno-implicit-function-declaration" \ |
| CPPFLAGS="-I${TP_INCLUDE_DIR}" \ |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| LIBS="-lcrypto" \ |
| ./configure --prefix="${TP_INSTALL_DIR}" --enable-static --enable-shared=no --with-openssl="${TP_INSTALL_DIR}" --with-pic --enable-gssapi="${TP_INSTALL_DIR}" --with-gss_impl=mit --with-dblib=none |
| |
| 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}" |
| |
| cd "${TP_SOURCE_DIR}/${LIBRDKAFKA_SOURCE}" |
| |
| # NOTE(amos): librdkafka uses a weird autoconf variant (mklove) which doesn't allow extending PKG_CONFIG with spaces in cmd. |
| # As a result, we use a patch to hard code "--static" into PKG_CONFIG instead. |
| # PKG_CONFIG="pkg-config --static" |
| |
| CPPFLAGS="-I${TP_INCLUDE_DIR}" \ |
| LDFLAGS="-L${TP_LIB_DIR} -lssl -lcrypto -lzstd -lz -lsasl2 \ |
| -lgssapi_krb5 -lkrb5 -lkrb5support -lk5crypto -lcom_err -lresolv" \ |
| ./configure --prefix="${TP_INSTALL_DIR}" --enable-static --enable-sasl --disable-c11threads |
| |
| make -j "${PARALLEL}" |
| make install |
| |
| remove_all_dylib |
| strip_lib librdkafka.a |
| strip_lib librdkafka++.a |
| } |
| |
| # libunixodbc |
| build_libunixodbc() { |
| check_if_source_exist "${ODBC_SOURCE}" |
| |
| cd "${TP_SOURCE_DIR}/${ODBC_SOURCE}" |
| |
| CFLAGS="-I${TP_INCLUDE_DIR} -Wno-int-conversion -Wno-implicit-function-declaration" \ |
| 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/ |
| |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| ldflags='-static-libstdc++ -static-libgcc' |
| else |
| ldflags='' |
| fi |
| |
| LDFLAGS="${ldflags}" \ |
| "${CMAKE_CMD}" -G "${GENERATOR}" \ |
| -DFLATBUFFERS_CXX_FLAGS="${warning_class_memaccess} ${warning_unused_but_set_variable}" \ |
| -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 |
| } |
| |
| # c-ares |
| build_cares() { |
| check_if_source_exist "${CARES_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${CARES_SOURCE}" |
| |
| mkdir -p build |
| cd build |
| cmake -DCMAKE_BUILD_TYPE=Release \ |
| -DCARES_STATIC=ON \ |
| -DCARES_SHARED=OFF \ |
| -DCARES_STATIC_PIC=ON \ |
| -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" .. |
| make |
| make install |
| } |
| |
| # grpc |
| build_grpc() { |
| check_if_source_exist "${GRPC_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${GRPC_SOURCE}" |
| |
| mkdir -p cmake/build |
| cd cmake/build |
| |
| cmake -DgRPC_INSTALL=ON \ |
| -DgRPC_BUILD_TESTS=OFF \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DgRPC_CARES_PROVIDER=package \ |
| -Dc-ares_DIR="${TP_INSTALL_DIR}" \ |
| -DgRPC_ABSL_PROVIDER=package \ |
| -Dabsl_DIR="${TP_INSTALL_DIR}" \ |
| -DgRPC_PROTOBUF_PROVIDER=package \ |
| -DProtobuf_DIR="${TP_INSTALL_DIR}" \ |
| -DgRPC_RE2_PROVIDER=package \ |
| -Dre2_DIR:STRING="${TP_INSTALL_DIR}" \ |
| -DgRPC_SSL_PROVIDER=package \ |
| -DOPENSSL_ROOT_DIR="${TP_INSTALL_DIR}" \ |
| -DgRPC_ZLIB_PROVIDER=package \ |
| -DZLIB_ROOT="${TP_INSTALL_DIR}" \ |
| -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ |
| ../.. |
| |
| make -j "${PARALLEL}" |
| make install |
| |
| # for grpc > v1.55, cmake 2.22 does not support find_dependency, delete this line after cmake version upgrade. |
| # sed -i 's/find_dependency/find_package/g' "${TP_INSTALL_DIR}"/lib64/cmake/grpc/gRPCConfig.cmake |
| } |
| |
| # 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_ARROW_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}" |
| export ARROW_GRPC_URL="${TP_SOURCE_DIR}/${GRPC_NAME}" |
| export ARROW_PROTOBUF_URL="${TP_SOURCE_DIR}/${PROTOBUF_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 \ |
| -DARROW_WITH_GRPC=ON \ |
| -DgRPC_SOURCE=SYSTEM \ |
| -DgRPC_ROOT="${TP_INSTALL_DIR}" \ |
| -DARROW_WITH_PROTOBUF=ON \ |
| -DProtobuf_SOURCE=SYSTEM \ |
| -DProtobuf_LIB="${TP_INSTALL_DIR}/lib/libprotoc.a" -DProtobuf_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \ |
| -DARROW_FLIGHT=ON \ |
| -DARROW_FLIGHT_SQL=ON \ |
| -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_SOURCE=SYSTEM \ |
| -DZLIB_LIBRARY="${TP_INSTALL_DIR}/lib/libz.a" -DZLIB_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \ |
| -DRapidJSON_SOURCE=SYSTEM \ |
| -DRapidJSON_ROOT="${TP_INSTALL_DIR}" \ |
| -DORC_ROOT="${TP_INSTALL_DIR}" \ |
| -Dxsimd_SOURCE=BUNDLED \ |
| -DBrotli_SOURCE=BUNDLED \ |
| -DARROW_LZ4_USE_SHARED=OFF \ |
| -DLZ4_LIB="${TP_INSTALL_DIR}/lib/liblz4.a" -DLZ4_INCLUDE_DIR="${TP_INSTALL_DIR}/include/lz4" \ |
| -DLz4_SOURCE=SYSTEM \ |
| -DARROW_ZSTD_USE_SHARED=OFF \ |
| -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 \ |
| -Djemalloc_SOURCE=BUNDLED \ |
| -DARROW_THRIFT_USE_SHARED=OFF \ |
| -DThrift_SOURCE=SYSTEM \ |
| -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_arrow.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_lib libarrow.a |
| strip_lib libjemalloc_arrow.a |
| strip_lib libparquet.a |
| } |
| |
| # abseil |
| build_abseil() { |
| check_if_source_exist "${ABSEIL_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${ABSEIL_SOURCE}" |
| |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| "${CMAKE_CMD}" -B "${BUILD_DIR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DABSL_ENABLE_INSTALL=ON \ |
| -DBUILD_DEPS=ON \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ |
| -DABSL_PROPAGATE_CXX_STD=ON \ |
| -DBUILD_SHARED_LIBS=OFF |
| |
| cmake --build "${BUILD_DIR}" -j "${PARALLEL}" |
| cmake --install "${BUILD_DIR}" --prefix "${TP_INSTALL_DIR}" |
| } |
| |
| # s2 |
| build_s2() { |
| check_if_source_exist "${S2_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${S2_SOURCE}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| rm -rf CMakeCache.txt CMakeFiles/ |
| |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| ${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DCMAKE_PREFIX_PATH="${TP_INSTALL_DIR}" \ |
| -DBUILD_SHARED_LIBS=OFF \ |
| -DWITH_GFLAGS=ON \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_LIBRARY_PATH="${TP_INSTALL_DIR}" .. |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| strip_lib libs2.a |
| } |
| |
| # bitshuffle |
| build_bitshuffle() { |
| check_if_source_exist "${BITSHUFFLE_SOURCE}" |
| local ld="${DORIS_BIN_UTILS}/ld" |
| local ar="${DORIS_BIN_UTILS}/ar" |
| |
| if [[ ! -f "${ld}" ]]; then ld="$(command -v ld)"; fi |
| if [[ ! -f "${ar}" ]]; then ar="$(command -v ar)"; fi |
| |
| cd "${TP_SOURCE_DIR}/${BITSHUFFLE_SOURCE}" |
| PREFIX="${TP_INSTALL_DIR}" |
| |
| # This library has significant optimizations when built with AVX2/AVX512. However, |
| # we still need to support non-AVX2-capable hardware. So, we build it three times, |
| # with the flag AVX2, AVX512 each and once without, and use some linker tricks to |
| # suffix the AVX2 symbols with '_avx2', AVX512 symbols with '_avx512' |
| arches=('default' 'avx2' 'avx512') |
| MACHINE_TYPE="$(uname -m)" |
| # Becuase aarch64 don't support avx2, disable it. |
| if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then |
| arches=('default') |
| fi |
| |
| to_link="" |
| for arch in "${arches[@]}"; do |
| arch_flag="" |
| if [[ "${arch}" == "avx2" ]]; then |
| arch_flag="-mavx2" |
| fi |
| if [[ "${arch}" == "avx512" ]]; then |
| arch_flag="-mavx512bw -mavx512f" |
| fi |
| 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. |
| "${ld}" -r -o "${tmp_obj}" bitshuffle_core.o bitshuffle.o iochain.o |
| # For the AVX2 symbols, suffix them. |
| if [[ "${arch}" == "avx2" ]] || [[ "${arch}" == "avx512" ]]; then |
| local nm="${DORIS_BIN_UTILS}/nm" |
| local objcopy="${DORIS_BIN_UTILS}/objcopy" |
| |
| if [[ ! -f "${nm}" ]]; then nm="$(command -v nm)"; fi |
| if [[ ! -f "${objcopy}" ]]; then |
| if ! objcopy="$(command -v objcopy)"; then |
| objcopy="${TP_INSTALL_DIR}/binutils/bin/objcopy" |
| fi |
| fi |
| |
| # Create a mapping file with '<old_sym> <suffixed_sym>' on each line. |
| "${nm}" --defined-only --extern-only "${tmp_obj}" | while read -r addr type sym; do |
| echo "${sym} ${sym}_${arch}" |
| done >renames.txt |
| "${objcopy}" --redefine-syms=renames.txt "${tmp_obj}" "${dst_obj}" |
| else |
| mv "${tmp_obj}" "${dst_obj}" |
| fi |
| to_link="${to_link} ${dst_obj}" |
| done |
| local links |
| read -r -a links <<<"${to_link}" |
| rm -f libbitshuffle.a |
| "${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 [[ -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}" |
| |
| 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="${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}" |
| |
| 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 |
| } |
| |
| # 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/" |
| } |
| |
| # pdqsort |
| build_pdqsort() { |
| check_if_archive_exist "${PDQSORT_FILE}" |
| cd "${TP_SOURCE_DIR}" |
| cp "${PDQSORT_FILE}" "${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/" |
| } |
| |
| #orc |
| build_orc() { |
| 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 \ |
| -DSTOP_BUILD_ON_WARNING=OFF \ |
| -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| strip_lib liborc.a |
| } |
| |
| #cctz |
| build_cctz() { |
| 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.6.0' |
| |
| 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.6.0 "${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." |
| exit 1 |
| fi |
| |
| 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}" |
| |
| # -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 -Wno-deprecated-declarations ${warning_dangling_reference}" -DCPP_STANDARD=17 |
| |
| cd "${BUILD_DIR}" |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| strip_lib libaws-cpp-sdk-s3-crt.a |
| strip_lib libaws-cpp-sdk-s3.a |
| strip_lib libaws-cpp-sdk-core.a |
| strip_lib libs2n.a |
| strip_lib libaws-crt-cpp.a |
| strip_lib libaws-c-http.a |
| strip_lib libaws-c-common.a |
| strip_lib libaws-c-auth.a |
| strip_lib libaws-c-io.a |
| strip_lib libaws-c-mqtt.a |
| strip_lib libaws-c-s3.a |
| strip_lib libaws-c-event-stream.a |
| strip_lib libaws-c-cal.a |
| strip_lib libaws-cpp-sdk-transfer.a |
| strip_lib libaws-checksums.a |
| strip_lib libaws-c-compression.a |
| } |
| |
| # lzma |
| build_lzma() { |
| if [[ ! -x "$(command -v autopoint)" ]]; then |
| echo "autopoint is required by $0, install it first" |
| return 255 |
| fi |
| |
| 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 |
| strip_lib liblzma.a |
| } |
| |
| # xml2 |
| build_xml2() { |
| if [[ ! -x "$(command -v pkg-config)" ]]; then |
| echo "pkg-config is required by $0, install it first" |
| return 255 |
| fi |
| |
| check_if_source_exist "${XML2_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${XML2_SOURCE}" |
| |
| export ACLOCAL_PATH='/usr/share/aclocal' |
| |
| sed '/(libtoolize/,/}/d' autogen.sh | bash |
| make distclean |
| |
| 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 |
| strip_lib 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 |
| } |
| |
| # gsasl |
| build_gsasl() { |
| check_if_source_exist "${GSASL_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${GSASL_SOURCE}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| KRB5_CONFIG="${TP_INSTALL_DIR}/bin/krb5-config" \ |
| CFLAGS="-I${TP_INCLUDE_DIR} -Wno-implicit-function-declaration" \ |
| ../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}" |
| |
| if [[ "${KERNEL}" == 'Darwin' ]]; then |
| with_crypto_impl='--with-crypto-impl=openssl' |
| fi |
| |
| CFLAGS="-fcommon -fPIC -I${TP_INSTALL_DIR}/include" LDFLAGS="-L${TP_INSTALL_DIR}/lib" \ |
| ../configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static \ |
| --without-keyutils ${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 ./* |
| |
| if [[ "$(uname -m)" == "x86_64" ]]; then |
| SSE_OPTION='-DENABLE_SSE=ON' |
| else |
| SSE_OPTION='-DENABLE_SSE=OFF' |
| fi |
| cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_TEST=OFF "${SSE_OPTION}" \ |
| -DProtobuf_PROTOC_EXECUTABLE="${TP_INSTALL_DIR}/bin/protoc" \ |
| -DProtobuf_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \ |
| -DProtobuf_LIBRARIES="${TP_INSTALL_DIR}/lib/libprotoc.a" \ |
| -DKERBEROS_INCLUDE_DIRS="${TP_INSTALL_DIR}/include" \ |
| -DKERBEROS_LIBRARIES="${TP_INSTALL_DIR}/lib/libkrb5.a" \ |
| -DGSASL_INCLUDE_DIR="${TP_INSTALL_DIR}/include" \ |
| -DGSASL_LIBRARIES="${TP_INSTALL_DIR}/lib/libgsasl.a" \ |
| -DCMAKE_CXX_FLAGS='-include cstdint' \ |
| .. |
| |
| make CXXFLAGS="${libhdfs_cxx17}" -j "${PARALLEL}" |
| make install |
| strip_lib libhdfs3.a |
| } |
| |
| # jemalloc |
| build_jemalloc() { |
| check_if_source_exist "${JEMALLOC_DORIS_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${JEMALLOC_DORIS_SOURCE}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| cflags='-O3 -fno-omit-frame-pointer -fPIC -g' |
| # Build jemalloc --with-lg-page=16 in order to make the wheel work on both 4k and 64k page arm64 systems. |
| # Jemalloc compiled on a system with page size 4K can only run on a system with the same page size 4K. |
| # If it is run on a system with page size > 4K, an error `unsupported system page size`. |
| # Jemalloc compiled on a system with page size 64K can run on a system with page size < 64K, |
| # but this will waste more memory. Jemalloc does not support dynamic adaptation to the page size of the system. |
| # The reason is that jemalloc will perform some optimizations based on the page size when compiling. |
| if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then |
| WITH_LG_PAGE='--with-lg-page=16' |
| else |
| WITH_LG_PAGE='' |
| fi |
| |
| CFLAGS="${cflags}" ../configure --prefix="${TP_INSTALL_DIR}" --with-install-suffix="_doris" "${WITH_LG_PAGE}" \ |
| --with-jemalloc-prefix=je --enable-prof --disable-cxx --disable-libdl --disable-shared |
| |
| make -j "${PARALLEL}" |
| make install |
| mv "${TP_INCLUDE_DIR}/jemalloc/jemalloc_doris.h" "${TP_INCLUDE_DIR}/jemalloc/jemalloc.h" |
| } |
| |
| # libunwind |
| build_libunwind() { |
| # There are two major variants of libunwind. libunwind on Linux |
| # (https://www.nongnu.org/libunwind/) provides unw_backtrace, and |
| # Apache/LLVM libunwind (notably used on Apple platforms) doesn't |
| if [[ "${KERNEL}" != 'Darwin' ]]; then |
| check_if_source_exist "${LIBUNWIND_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${LIBUNWIND_SOURCE}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| # We should enable optimizations (otherwise it will be too slow in debug) |
| # and disable sanitizers (otherwise infinite loop may happen) |
| # close exceptions and rtti can improve the operating efficiency of the program |
| # LIBUNWIND_NO_HEAP: https://reviews.llvm.org/D11897 |
| # LIBUNWIND_IS_NATIVE_ONLY: https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160523/159802.html |
| # -nostdinc++ only required for gcc compilation |
| cflags="-I${TP_INCLUDE_DIR} -std=c99 -D_LIBUNWIND_NO_HEAP=1 -D_DEBUG -D_LIBUNWIND_IS_NATIVE_ONLY -O3 -fno-exceptions -funwind-tables -fno-sanitize=all -nostdinc++ -fno-rtti" |
| CFLAGS="${cflags}" LDFLAGS="-L${TP_LIB_DIR} -llzma" ../configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static |
| |
| make -j "${PARALLEL}" |
| make install |
| fi |
| } |
| |
| # benchmark |
| build_benchmark() { |
| check_if_source_exist "${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="${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}/include/benchmark/export.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}" |
| |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| 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 "${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}" |
| |
| "${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 |
| } |
| |
| # sse2neon |
| build_sse2neon() { |
| check_if_source_exist "${SSE2NEON_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${SSE2NEON_SOURCE}" |
| cp sse2neon.h "${TP_INSTALL_DIR}/include/" |
| } |
| |
| # xxhash |
| build_xxhash() { |
| check_if_source_exist "${XXHASH_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${XXHASH_SOURCE}" |
| |
| make -j "${PARALLEL}" |
| cp -r ./*.h "${TP_INSTALL_DIR}/include/" |
| cp libxxhash.a "${TP_INSTALL_DIR}/lib64" |
| } |
| |
| build_binutils() { |
| check_if_source_exist "${BINUTILS_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${BINUTILS_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| ../configure --prefix="${TP_INSTALL_DIR}/binutils" --includedir="${TP_INCLUDE_DIR}" --libdir="${TP_LIB_DIR}" \ |
| --enable-install-libiberty --without-msgpack |
| make -j "${PARALLEL}" |
| make install-bfd install-libiberty install-binutils |
| } |
| |
| build_gettext() { |
| check_if_source_exist "${GETTEXT_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${GETTEXT_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| ../gettext-runtime/configure --prefix="${TP_INSTALL_DIR}" --disable-java |
| cd intl |
| make -j "${PARALLEL}" |
| make install |
| |
| remove_all_dylib |
| } |
| |
| # concurrentqueue |
| build_concurrentqueue() { |
| check_if_source_exist "${CONCURRENTQUEUE_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${CONCURRENTQUEUE_SOURCE}" |
| cp ./*.h "${TP_INSTALL_DIR}/include/" |
| } |
| |
| # fast_float |
| build_fast_float() { |
| check_if_source_exist "${FAST_FLOAT_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${FAST_FLOAT_SOURCE}" |
| cp -r ./include/fast_float "${TP_INSTALL_DIR}/include/" |
| } |
| |
| # hadoop_libs |
| build_hadoop_libs() { |
| check_if_source_exist "${HADOOP_LIBS_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${HADOOP_LIBS_SOURCE}" |
| echo "THIRDPARTY_INSTALLED=${TP_INSTALL_DIR}" >env.sh |
| ./build.sh |
| |
| mkdir -p "${TP_INSTALL_DIR}/include/hadoop_hdfs/" |
| mkdir -p "${TP_INSTALL_DIR}/lib/hadoop_hdfs/" |
| cp -r ./hadoop-dist/target/hadoop-libhdfs-3.3.6/* "${TP_INSTALL_DIR}/lib/hadoop_hdfs/" |
| cp -r ./hadoop-dist/target/hadoop-libhdfs-3.3.6/include/hdfs.h "${TP_INSTALL_DIR}/include/hadoop_hdfs/" |
| rm -rf "${TP_INSTALL_DIR}/lib/hadoop_hdfs/native/*.a" |
| find ./hadoop-dist/target/hadoop-3.3.6/lib/native/ -type f ! -name '*.a' -exec cp {} "${TP_INSTALL_DIR}/lib/hadoop_hdfs/native/" \; |
| find ./hadoop-dist/target/hadoop-3.3.6/lib/native/ -type l -exec cp -P {} "${TP_INSTALL_DIR}/lib/hadoop_hdfs/native/" \; |
| } |
| |
| # dragonbox |
| build_dragonbox() { |
| check_if_source_exist "${DRAGONBOX_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${DRAGONBOX_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DDRAGONBOX_INSTALL_TO_CHARS=ON .. |
| |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| # AvxToNeon |
| build_avx2neon() { |
| check_if_source_exist "${AVX2NEON_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${AVX2NEON_SOURCE}" |
| mkdir -p "${TP_INSTALL_DIR}/include/avx2neon/" |
| cp -r ./* "${TP_INSTALL_DIR}/include/avx2neon/" |
| } |
| |
| # libdeflate |
| build_libdeflate() { |
| check_if_source_exist "${LIBDEFLATE_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${LIBDEFLATE_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release .. |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| # streamvbyte |
| build_streamvbyte() { |
| check_if_source_exist "${STREAMVBYTE_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${STREAMVBYTE_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release .. |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| # jsoncpp |
| build_jsoncpp() { |
| check_if_source_exist "${JSONCPP_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${JSONCPP_SOURCE}" |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" .. |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| # libuuid |
| build_libuuid() { |
| check_if_source_exist "${LIBUUID_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${LIBUUID_SOURCE}" |
| CC=gcc ./configure --prefix="${TP_INSTALL_DIR}" --disable-shared --enable-static |
| make -j "${PARALLEL}" |
| make install |
| } |
| |
| # ali_sdk |
| build_ali_sdk() { |
| build_jsoncpp |
| build_libuuid |
| check_if_source_exist "${ALI_SDK_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${ALI_SDK_SOURCE}" |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| CPPFLAGS="-I${TP_INCLUDE_DIR}" \ |
| CXXFLAGS="-I${TP_INCLUDE_DIR}" \ |
| LDFLAGS="-L${TP_LIB_DIR}" \ |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DBUILD_PRODUCT=core -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \ |
| -DTP_INSTALL_DIR="${TP_INSTALL_DIR}" .. |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| # base64 |
| build_base64() { |
| check_if_source_exist "${BASE64_SOURCE}" |
| cd "${TP_SOURCE_DIR}/${BASE64_SOURCE}" |
| |
| rm -rf "${BUILD_DIR}" |
| mkdir -p "${BUILD_DIR}" |
| cd "${BUILD_DIR}" |
| |
| "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release .. |
| MACHINE_TYPE="$(uname -m)" |
| if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then |
| CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crc" NEON64_CFLAGS=" " |
| else |
| AVX2_CFLAGS=-mavx2 SSSE3_CFLAGS=-mssse3 SSE41_CFLAGS=-msse4.1 SSE42_CFLAGS=-msse4.2 AVX_CFLAGS=-mavx |
| fi |
| "${BUILD_SYSTEM}" -j "${PARALLEL}" |
| "${BUILD_SYSTEM}" install |
| } |
| |
| if [[ "${#packages[@]}" -eq 0 ]]; then |
| packages=( |
| libunixodbc |
| openssl |
| libevent |
| zlib |
| lz4 |
| bzip |
| lzo2 |
| zstd |
| boost # must before thrift |
| abseil |
| gflags |
| gtest |
| glog |
| protobuf # after gtest |
| rapidjson |
| snappy |
| gperftools |
| curl |
| re2 |
| hyperscan |
| thrift |
| leveldb |
| brpc |
| jemalloc |
| rocksdb |
| krb5 # before cyrus_sasl |
| cyrus_sasl |
| librdkafka |
| flatbuffers |
| orc |
| cares |
| grpc # after cares, protobuf |
| arrow |
| s2 |
| bitshuffle |
| croaringbitmap |
| fmt |
| parallel_hashmap |
| pdqsort |
| libdivide |
| cctz |
| tsan_header |
| mysql |
| aws_sdk |
| js_and_css |
| lzma |
| xml2 |
| idn |
| gsasl |
| hdfs3 |
| benchmark |
| simdjson |
| nlohmann_json |
| libbacktrace |
| sse2neon |
| xxhash |
| concurrentqueue |
| fast_float |
| libunwind |
| dragonbox |
| avx2neon |
| libdeflate |
| streamvbyte |
| ali_sdk |
| base64 |
| ) |
| if [[ "$(uname -s)" == 'Darwin' ]]; then |
| read -r -a packages <<<"binutils gettext ${packages[*]}" |
| elif [[ "$(uname -s)" == 'Linux' ]]; then |
| read -r -a packages <<<"${packages[*]} hadoop_libs" |
| fi |
| fi |
| |
| for package in "${packages[@]}"; do |
| if [[ "${package}" == "${start_package}" ]]; then |
| PACKAGE_FOUND=1 |
| fi |
| if [[ "${CONTINUE}" -eq 0 ]] || [[ "${PACKAGE_FOUND}" -eq 1 ]]; then |
| command="build_${package}" |
| ${command} |
| fi |
| done |
| |
| echo "Finished to build all thirdparties" |