### What changes were proposed in this pull request? This PR adds support for lz4 decompression in CppClient. ### Why are the changes needed? To support reading from Celeborn with CppClient. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? By compilation and UTs. Closes #3402 from Jraaay/feat/cpp_client_lz4_decompression. Authored-by: Jray <1075860716@qq.com> Signed-off-by: SteNicholas <programgeek@163.com>
228 lines
7.1 KiB
Bash
Executable File
228 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Based on setup-ubuntu.sh from Facebook Velox
|
|
#
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
#
|
|
# Licensed 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 documents setting up a Ubuntu host for CelebornCpp
|
|
# development. Running it should make you ready to compile.
|
|
#
|
|
# Environment variables:
|
|
# * INSTALL_PREREQUISITES="N": Skip installation of packages for build.
|
|
# * PROMPT_ALWAYS_RESPOND="n": Automatically respond to interactive prompts.
|
|
# Use "n" to never wipe directories.
|
|
#
|
|
# You can also run individual functions below by specifying them as arguments:
|
|
# $ scripts/setup-ubuntu.sh install_googletest install_fmt
|
|
#
|
|
|
|
# Minimal setup for Ubuntu 22.04.
|
|
set -eufx -o pipefail
|
|
SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}")
|
|
source $SCRIPTDIR/setup-helper-functions.sh
|
|
|
|
# Folly must be built with the same compiler flags so that some low level types
|
|
# are the same size.
|
|
COMPILER_FLAGS=$(get_cxx_flags)
|
|
export COMPILER_FLAGS
|
|
NPROC=$(getconf _NPROCESSORS_ONLN)
|
|
BUILD_DUCKDB="${BUILD_DUCKDB:-true}"
|
|
export CMAKE_BUILD_TYPE=Release
|
|
SUDO="${SUDO:-"sudo --preserve-env"}"
|
|
USE_CLANG="${USE_CLANG:-false}"
|
|
export INSTALL_PREFIX=${INSTALL_PREFIX:-"/usr/local"}
|
|
DEPENDENCY_DIR=${DEPENDENCY_DIR:-$(pwd)/deps-download}
|
|
|
|
DEPENDENCY_DIR=${DEPENDENCY_DIR:-$(pwd)/deps-download}
|
|
OS_CXXFLAGS=""
|
|
|
|
function install_clang15 {
|
|
VERSION=`cat /etc/os-release | grep VERSION_ID`
|
|
if [[ ! ${VERSION} =~ "22.04" && ! ${VERSION} =~ "24.04" ]]; then
|
|
echo "Warning: using the Clang configuration is for Ubuntu 22.04 and 24.04. Errors might occur."
|
|
fi
|
|
CLANG_PACKAGE_LIST=clang-15
|
|
if [[ ${VERSION} =~ "22.04" ]]; then
|
|
CLANG_PACKAGE_LIST=${CLANG_PACKAGE_LIST} gcc-12 g++-12 libc++-12-dev
|
|
fi
|
|
${SUDO} apt install ${CLANG_PACKAGE_LIST} -y
|
|
}
|
|
|
|
FB_OS_VERSION="v2024.07.01.00"
|
|
FMT_VERSION="10.1.1"
|
|
BOOST_VERSION="boost-1.84.0"
|
|
ARROW_VERSION="15.0.0"
|
|
STEMMER_VERSION="2.2.0"
|
|
|
|
# Install gtest library package for tests.
|
|
function install_gtest {
|
|
${SUDO} apt-get install -y libgtest-dev cmake
|
|
mkdir -p $HOME/build
|
|
pushd $HOME/build
|
|
${SUDO} cmake /usr/src/googletest/googletest
|
|
${SUDO} make
|
|
${SUDO} cp lib/libgtest* /usr/lib/
|
|
popd
|
|
${SUDO} rm -rf $HOME/build
|
|
${SUDO} mkdir /usr/local/lib/googletest
|
|
${SUDO} ln -s /usr/lib/libgtest.a /usr/local/lib/googletest/libgtest.a
|
|
${SUDO} ln -s /usr/lib/libgtest_main.a /usr/local/lib/googletest/libgtest_main.a
|
|
}
|
|
|
|
# Install packages required for build.
|
|
function install_build_prerequisites {
|
|
${SUDO} apt update
|
|
# The is an issue on 22.04 where a version conflict prevents glog install,
|
|
# installing libunwind first fixes this.
|
|
${SUDO} apt install -y libunwind-dev
|
|
${SUDO} apt install -y \
|
|
build-essential \
|
|
python3-pip \
|
|
ccache \
|
|
curl \
|
|
ninja-build \
|
|
checkinstall \
|
|
git \
|
|
pkg-config \
|
|
gdb \
|
|
wget
|
|
|
|
install_gtest
|
|
|
|
# Install to /usr/local to make it available to all users.
|
|
${SUDO} pip3 install cmake==3.28.3
|
|
|
|
if [[ ${USE_CLANG} != "false" ]]; then
|
|
install_clang15
|
|
fi
|
|
|
|
# Install clang-format-15 for lint checking.
|
|
${SUDO} apt install -y clang-format-15
|
|
}
|
|
|
|
# Install packages required for build.
|
|
function install_celeborn_cpp_deps_from_apt {
|
|
${SUDO} apt update
|
|
${SUDO} apt install -y \
|
|
libc-ares-dev \
|
|
libcurl4-openssl-dev \
|
|
libssl-dev \
|
|
libicu-dev \
|
|
libdouble-conversion-dev \
|
|
libgoogle-glog-dev \
|
|
libbz2-dev \
|
|
libgflags-dev \
|
|
libgmock-dev \
|
|
libevent-dev \
|
|
libsodium-dev \
|
|
libxxhash-dev \
|
|
liblz4-dev \
|
|
libzstd-dev \
|
|
libre2-dev
|
|
}
|
|
|
|
function install_fmt {
|
|
wget_and_untar https://github.com/fmtlib/fmt/archive/${FMT_VERSION}.tar.gz fmt
|
|
cmake_install_dir fmt -DFMT_TEST=OFF
|
|
}
|
|
|
|
function install_boost {
|
|
wget_and_untar https://github.com/boostorg/boost/releases/download/${BOOST_VERSION}/${BOOST_VERSION}.tar.gz boost
|
|
(
|
|
cd ${DEPENDENCY_DIR}/boost
|
|
if [[ ${USE_CLANG} != "false" ]]; then
|
|
./bootstrap.sh --prefix=${INSTALL_PREFIX} --with-toolset="clang-15"
|
|
# Switch the compiler from the clang-15 toolset which doesn't exist (clang-15.jam) to
|
|
# clang of version 15 when toolset clang-15 is used.
|
|
# This reconciles the project-config.jam generation with what the b2 build system allows for customization.
|
|
sed -i 's/using clang-15/using clang : 15/g' project-config.jam
|
|
${SUDO} ./b2 "-j$(nproc)" -d0 install threading=multi toolset=clang-15 --without-python
|
|
else
|
|
./bootstrap.sh --prefix=${INSTALL_PREFIX}
|
|
${SUDO} ./b2 "-j$(nproc)" -d0 install threading=multi --without-python
|
|
fi
|
|
)
|
|
}
|
|
|
|
function install_protobuf {
|
|
### protobuf version must be aligned to CelebornJava.
|
|
wget_and_untar https://github.com/protocolbuffers/protobuf/releases/download/v21.7/protobuf-all-21.7.tar.gz protobuf
|
|
(
|
|
cd ${DEPENDENCY_DIR}/protobuf
|
|
./configure CXXFLAGS="-fPIC" --prefix=${INSTALL_PREFIX}
|
|
make "-j${NPROC}"
|
|
${SUDO} make install
|
|
${SUDO} ldconfig
|
|
)
|
|
}
|
|
|
|
function install_folly {
|
|
wget_and_untar https://github.com/facebook/folly/archive/refs/tags/${FB_OS_VERSION}.tar.gz folly
|
|
cmake_install_dir folly -DBUILD_TESTS=OFF -DFOLLY_HAVE_INT128_T=ON
|
|
}
|
|
|
|
function install_fizz {
|
|
wget_and_untar https://github.com/facebookincubator/fizz/archive/refs/tags/${FB_OS_VERSION}.tar.gz fizz
|
|
cmake_install_dir fizz/fizz -DBUILD_TESTS=OFF
|
|
}
|
|
|
|
function install_wangle {
|
|
wget_and_untar https://github.com/facebook/wangle/archive/refs/tags/${FB_OS_VERSION}.tar.gz wangle
|
|
cmake_install_dir wangle/wangle -DBUILD_TESTS=OFF
|
|
}
|
|
|
|
function install_celeborn_cpp_deps {
|
|
run_and_time install_celeborn_cpp_deps_from_apt
|
|
run_and_time install_fmt
|
|
run_and_time install_protobuf
|
|
run_and_time install_boost
|
|
run_and_time install_folly
|
|
run_and_time install_fizz
|
|
run_and_time install_wangle
|
|
}
|
|
|
|
function install_apt_deps {
|
|
install_build_prerequisites
|
|
install_celeborn_cpp_deps_from_apt
|
|
}
|
|
|
|
(return 2> /dev/null) && return # If script was sourced, don't run commands.
|
|
|
|
(
|
|
if [[ ${USE_CLANG} != "false" ]]; then
|
|
export CC=/usr/bin/clang-15
|
|
export CXX=/usr/bin/clang++-15
|
|
fi
|
|
if [[ $# -ne 0 ]]; then
|
|
for cmd in "$@"; do
|
|
run_and_time "${cmd}"
|
|
done
|
|
echo "All specified dependencies installed!"
|
|
else
|
|
if [ "${INSTALL_PREREQUISITES:-Y}" == "Y" ]; then
|
|
echo "Installing build dependencies"
|
|
run_and_time install_build_prerequisites
|
|
else
|
|
echo "Skipping installation of build dependencies since INSTALL_PREREQUISITES is not set"
|
|
fi
|
|
install_celeborn_cpp_deps
|
|
echo "All dependencies for CelebornCpp installed!"
|
|
if [[ ${USE_CLANG} != "false" ]]; then
|
|
echo "To use clang for the CelebornCpp build set the CC and CXX environment variables in your session."
|
|
echo " export CC=/usr/bin/clang-15"
|
|
echo " export CXX=/usr/bin/clang++-15"
|
|
fi
|
|
fi
|
|
)
|