Files
doris/thirdparty/build-thirdparty.sh

1047 lines
34 KiB
Bash
Executable File

#!/usr/bin/env bash
# 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 -e
curdir=`dirname "$0"`
curdir=`cd "$curdir"; pwd`
export DORIS_HOME=$curdir/..
export TP_DIR=$curdir
# Check args
usage() {
echo "
Usage: $0 <options>
Optional options:
-j build thirdparty parallel
"
exit 1
}
OPTS=$(getopt \
-n $0 \
-o '' \
-o 'h' \
-l 'help' \
-o 'j:' \
-- "$@")
if [ $? != 0 ] ; then
usage
fi
eval set -- "$OPTS"
PARALLEL=$[$(nproc)/4+1]
if [[ $# -ne 1 ]] ; then
while true; do
case "$1" in
-j) PARALLEL=$2; shift 2 ;;
-h) HELP=1; shift ;;
--help) HELP=1; shift ;;
--) shift ; break ;;
*) echo "Internal error" ; exit 1 ;;
esac
done
fi
if [[ ${HELP} -eq 1 ]]; then
usage
exit
fi
echo "Get params:
PARALLEL -- $PARALLEL
"
# include custom environment variables
if [[ -f ${DORIS_HOME}/env.sh ]]; then
export BUILD_THIRDPARTY_WIP=1
. ${DORIS_HOME}/env.sh
export BUILD_THIRDPARTY_WIP=
fi
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
# 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
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/
ln -sf lib64 lib
popd
check_prerequest() {
local CMD=$1
local NAME=$2
if ! $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"
# 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_archieve_exist() {
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."
exit 1
fi
}
# 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 -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
}
build_openssl() {
MACHINE_TYPE=$(uname -m)
OPENSSL_PLATFORM="linux-x86_64"
if [[ "${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} -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}
# 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
}
# thrift
build_thrift() {
check_if_source_exist $THRIFT_SOURCE
cd $TP_SOURCE_DIR/$THRIFT_SOURCE
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
mv compiler/cpp/thrifty.hh compiler/cpp/thrifty.h
fi
make -j $PARALLEL && make install
}
# protobuf
build_protobuf() {
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
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
cd src
sed -i 's/^AM_LDFLAGS\(.*\)$/AM_LDFLAGS\1 -all-static/' Makefile
cd -
make -j $PARALLEL && make install
}
# 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_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
# 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
}
# 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
}
# rapidjson
build_rapidjson() {
check_if_source_exist $RAPIDJSON_SOURCE
rm -rf $TP_INSTALL_DIR/rapidjson
cp -r $TP_SOURCE_DIR/$RAPIDJSON_SOURCE/include/rapidjson $TP_INCLUDE_DIR/
}
# 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}" \
CFLAGS="-fPIC" \
LDFLAGS="-L${TP_LIB_DIR}" \
LD_LIBRARY_PATH="${TP_LIB_DIR}" \
CFLAGS="-fPIC" \
./configure --prefix=$TP_INSTALL_DIR/gperftools --disable-shared --enable-static --disable-libunwind --with-pic --enable-frame-pointers
make -j $PARALLEL && make install
}
# zlib
build_zlib() {
check_if_source_exist $ZLIB_SOURCE
cd $TP_SOURCE_DIR/$ZLIB_SOURCE
CPPFLAGS="-I${TP_INCLUDE_DIR}" \
LDFLAGS="-L${TP_LIB_DIR}" \
CFLAGS="-fPIC" \
./configure --prefix=$TP_INSTALL_DIR --static
make -j $PARALLEL && make install
# minizip
cd contrib/minizip
autoreconf --force --install
./configure --prefix=$TP_INSTALL_DIR --enable-static=yes --enable-shared=no
make -j $PARALLEL && make install
}
# lz4
build_lz4() {
check_if_source_exist $LZ4_SOURCE
cd $TP_SOURCE_DIR/$LZ4_SOURCE
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
}
# bzip
build_bzip() {
check_if_source_exist $BZIP_SOURCE
cd $TP_SOURCE_DIR/$BZIP_SOURCE
CFLAGS="-fPIC"
make -j $PARALLEL install PREFIX=$TP_INSTALL_DIR
}
# lzo2
build_lzo2() {
check_if_source_exist $LZO2_SOURCE
cd $TP_SOURCE_DIR/$LZO2_SOURCE
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
}
# curl
build_curl() {
check_if_source_exist $CURL_SOURCE
cd $TP_SOURCE_DIR/$CURL_SOURCE
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
}
# re2
build_re2() {
check_if_source_exist $RE2_SOURCE
cd $TP_SOURCE_DIR/$RE2_SOURCE
${CMAKE_CMD} -G "${GENERATOR}" -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR
${BUILD_SYSTEM} -j $PARALLEL install
}
# boost
build_boost() {
check_if_source_exist $BOOST_SOURCE
cd $TP_SOURCE_DIR/$BOOST_SOURCE
CXXFLAGS="-static" \
./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
}
# 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
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/ \
-DCMAKE_INCLUDE_PATH=$TP_INCLUDE_DIR -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} -v -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."
}
#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/
}
# 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/
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
}
# rocksdb
build_rocksdb() {
check_if_source_exist $ROCKSDB_SOURCE
cd $TP_SOURCE_DIR/$ROCKSDB_SOURCE
# -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
cp librocksdb.a ../../installed/lib/librocksdb.a
cp -r include/rocksdb ../../installed/include/
}
# cyrus_sasl
build_cyrus_sasl() {
check_if_source_exist $CYRUS_SASL_SOURCE
cd $TP_SOURCE_DIR/$CYRUS_SASL_SOURCE
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
}
# librdkafka
build_librdkafka() {
check_if_source_exist $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
}
# libunixodbc
build_libunixodbc() {
check_if_source_exist $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
}
# 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
}
# 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}
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=OFF \
-DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-DCMAKE_INSTALL_LIBDIR=lib64 \
-DARROW_BOOST_USE_SHARED=OFF \
-DARROW_GFLAGS_USE_SHARED=OFF \
-Dgflags_ROOT=$TP_INSTALL_DIR \
-DGLOG_ROOT=$TP_INSTALL_DIR \
-DZLIB_LIBRARY=$TP_INSTALL_DIR/lib/libz.a -DZLIB_INCLUDE_DIR=$TP_INSTALL_DIR/include \
-DRapidJSON_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 \
-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
}
# 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/
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
}
# bitshuffle
build_bitshuffle() {
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)
# Becuase aarch64 don't support avx2, disable it.
if [[ "${MACHINE_TYPE}" == "aarch64" ]]; then
arches="default"
fi
to_link=""
for arch in $arches ; do
arch_flag=""
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 \
"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
# For the AVX2 symbols, suffix them.
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
else
mv $tmp_obj $dst_obj
fi
to_link="$to_link $dst_obj"
done
rm -f libbitshuffle.a
$DORIS_BIN_UTILS/ar rs libbitshuffle.a $to_link
mkdir -p $PREFIX/include/bitshuffle
cp libbitshuffle.a $PREFIX/lib/
cp $TP_SOURCE_DIR/$BITSHUFFLE_SOURCE/src/bitshuffle.h $PREFIX/include/bitshuffle/bitshuffle.h
cp $TP_SOURCE_DIR/$BITSHUFFLE_SOURCE/src/bitshuffle_core.h $PREFIX/include/bitshuffle/bitshuffle_core.h
}
# croaring bitmap
build_croaringbitmap() {
check_if_source_exist $CROARINGBITMAP_SOURCE
cd $TP_SOURCE_DIR/$CROARINGBITMAP_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
rm -rf CMakeCache.txt CMakeFiles/
CXXFLAGS="-O3" \
LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
${CMAKE_CMD} -G "${GENERATOR}" -DROARING_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-DCMAKE_INCLUDE_PATH="$TP_INSTALL_DIR/include" -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_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/
}
#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 \
-DGTEST_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 \
-DZSTD_LIBRARIES=$TP_INSTALL_DIR/lib/libzstd.a \
-DBUILD_LIBHDFSPP=OFF \
-DBUILD_CPP_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
#cctz
build_cctz() {
check_if_source_exist $CCTZ_SOURCE
cd $TP_SOURCE_DIR/$CCTZ_SOURCE
PREFIX=$TP_INSTALL_DIR make -j $PARALLEL
PREFIX=$TP_INSTALL_DIR make install
}
# 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
}
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-c-common
build_aws_c_common() {
check_if_source_exist $AWS_C_COMMON_SOURCE
cd $TP_SOURCE_DIR/$AWS_C_COMMON_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="$warning_uninitialized $warning_option_ignored"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws-c-event-stream
build_aws_c_event_stream() {
check_if_source_exist $AWS_C_EVENT_STREAM_SOURCE
cd $TP_SOURCE_DIR/$AWS_C_EVENT_STREAM_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="$warning_option_ignored"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws-checksums
build_aws_checksums() {
check_if_source_exist $AWS_CHECKSUMS_SOURCE
cd $TP_SOURCE_DIR/$AWS_CHECKSUMS_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="$warning_option_ignored"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws-c-io
build_aws_c_io() {
check_if_source_exist $AWS_C_IO_SOURCE
cd $TP_SOURCE_DIR/$AWS_C_IO_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="$warning_option_ignored"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws-s2n
build_aws_s2n() {
check_if_source_exist $AWS_S2N_SOURCE
cd $TP_SOURCE_DIR/$AWS_S2N_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DCMAKE_C_FLAGS="$warning_array_parameter"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws-c-cal
build_aws_c_cal() {
check_if_source_exist $AWS_C_CAL_SOURCE
cd $TP_SOURCE_DIR/$AWS_C_CAL_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -G "${GENERATOR}" .. -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="$warning_option_ignored"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# aws_sdk
build_aws_sdk() {
check_if_source_exist $AWS_SDK_SOURCE
cd $TP_SOURCE_DIR/$AWS_SDK_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
# -Wno-nonnull gcc-11
$CMAKE_CMD -G "${GENERATOR}" .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
-DBUILD_DEPS=OFF -DCMAKE_PREFIX_PATH=$TP_INSTALL_DIR -DBUILD_SHARED_LIBS=OFF -DENABLE_TESTING=OFF \
-DCMAKE_MODULE_PATH=$TP_INSTALL_DIR/lib64/cmake -DBUILD_ONLY="s3" \
-DCMAKE_CXX_FLAGS="-Wno-nonnull"
${BUILD_SYSTEM} -j $PARALLEL && ${BUILD_SYSTEM} install
}
# lzma
build_lzma() {
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
}
# xml2
build_xml2() {
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
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
}
# 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
../configure --prefix=$TP_INSTALL_DIR --enable-shared=no --with-pic --with-libidn-prefix=$TP_INSTALL_DIR
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
../bootstrap --dependency=$TP_INSTALL_DIR --prefix=$TP_INSTALL_DIR
make CXXFLAGS="$libhdfs_cxx17" -j $PARALLEL
make install
}
# benchmark
build_benchmark() {
check_if_source_exist $BENCHMARK_SOURCE
cd $TP_SOURCE_DIR/$BENCHMARK_SOURCE
cmake -E make_directory "build"
# 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
cmake --build "build" --config Release
mkdir $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/
}
# breakpad
build_breakpad() {
check_if_source_exist $BREAKPAD_SOURCE
cd $TP_SOURCE_DIR/$BREAKPAD_SOURCE
./configure --prefix=$TP_INSTALL_DIR
make -j $PARALLEL && make install
}
# simdjson
build_simdjson() {
check_if_source_exist $SIMDJSON_SOURCE
cd $TP_SOURCE_DIR/$SIMDJSON_SOURCE
mkdir -p $BUILD_DIR && cd $BUILD_DIR
CXX_FLAGS="-O3" \
C_FLAGS="-O3" \
$CMAKE_CMD ..
$CMAKE_CMD --build .
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/
}
build_libunixodbc
build_openssl
build_libevent
build_zlib
build_lz4
build_bzip
build_lzo2
build_zstd
build_boost # must before thrift
build_protobuf
build_gflags
build_gtest
build_glog
build_rapidjson
build_snappy
build_gperftools
build_curl
build_re2
build_thrift
build_leveldb
build_brpc
build_rocksdb
build_cyrus_sasl
build_librdkafka
build_flatbuffers
build_arrow
build_s2
build_bitshuffle
build_croaringbitmap
build_fmt
build_parallel_hashmap
build_pdqsort
build_libdivide
build_orc
build_cctz
build_tsan_header
build_mysql
build_aws_c_common
build_aws_s2n
build_aws_c_cal
build_aws_c_io
build_aws_checksums
build_aws_c_event_stream
build_aws_sdk
build_js_and_css
build_lzma
build_xml2
build_idn
build_gsasl
build_hdfs3
build_benchmark
build_breakpad
build_simdjson
echo "Finished to build all thirdparties"