change palo -> doris do not check compiler's version inenv.sh, because building broker does not need gcc compiler. And the version is also checked in CMakefile
263 lines
7.5 KiB
Bash
Executable File
263 lines
7.5 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.
|
|
|
|
# check DORIS_HOME
|
|
export LC_ALL=C
|
|
|
|
if [[ -z "${DORIS_HOME}" ]]; then
|
|
echo "Error: DORIS_HOME is not set"
|
|
exit 1
|
|
fi
|
|
|
|
# check OS type
|
|
if [[ -n "${OSTYPE}" ]]; then
|
|
if [[ "${OSTYPE}" != "linux-gnu" ]] && [[ "${OSTYPE:0:6}" != "darwin" ]]; then
|
|
echo "Error: Unsupported OS type: ${OSTYPE}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [[ "$(uname -s)" == 'Darwin' ]]; then
|
|
if ! command -v brew &>/dev/null; then
|
|
echo "Error: Homebrew is missing. Please install it first due to we use Homebrew to manage the tools which are needed to build the project."
|
|
exit 1
|
|
fi
|
|
|
|
cat >"${DORIS_HOME}/custom_env_mac.sh" <<EOF
|
|
# This file is generated automatically. PLEASE DO NOT MODIFY IT.
|
|
|
|
HOMEBREW_REPO_PREFIX="$(brew --prefix)"
|
|
CELLARS=(
|
|
automake
|
|
autoconf
|
|
libtool
|
|
pkg-config
|
|
texinfo
|
|
coreutils
|
|
gnu-getopt
|
|
python@3
|
|
cmake
|
|
ninja
|
|
ccache
|
|
bison
|
|
byacc
|
|
gettext
|
|
wget
|
|
pcre
|
|
maven
|
|
llvm@16
|
|
)
|
|
for cellar in "\${CELLARS[@]}"; do
|
|
EXPORT_CELLARS="\${HOMEBREW_REPO_PREFIX}/opt/\${cellar}/bin:\${EXPORT_CELLARS}"
|
|
done
|
|
export PATH="\${EXPORT_CELLARS}:/usr/bin:\${PATH}"
|
|
|
|
export DORIS_BUILD_PYTHON_VERSION=python3
|
|
EOF
|
|
|
|
DORIS_HOME_ABSOLUATE_PATH="$(
|
|
set -e
|
|
cd "${DORIS_HOME}"
|
|
pwd
|
|
)"
|
|
SOURCE_MAC_ENV_CONTENT="source '${DORIS_HOME_ABSOLUATE_PATH}/custom_env_mac.sh'"
|
|
if [[ ! -f "${DORIS_HOME}/custom_env.sh" ]] ||
|
|
! grep "${SOURCE_MAC_ENV_CONTENT}" "${DORIS_HOME}/custom_env.sh" &>/dev/null; then
|
|
echo "${SOURCE_MAC_ENV_CONTENT}" >>"${DORIS_HOME}/custom_env.sh"
|
|
fi
|
|
fi
|
|
|
|
# include custom environment variables
|
|
if [[ -f "${DORIS_HOME}/custom_env.sh" ]]; then
|
|
# shellcheck disable=1091
|
|
. "${DORIS_HOME}/custom_env.sh"
|
|
fi
|
|
|
|
# set DORIS_THIRDPARTY
|
|
if [[ -z "${DORIS_THIRDPARTY}" ]]; then
|
|
export DORIS_THIRDPARTY="${DORIS_HOME}/thirdparty"
|
|
fi
|
|
|
|
# check python
|
|
if [[ -z "${DORIS_BUILD_PYTHON_VERSION}" ]]; then
|
|
DORIS_BUILD_PYTHON_VERSION="python"
|
|
fi
|
|
|
|
export PYTHON="${DORIS_BUILD_PYTHON_VERSION}"
|
|
|
|
if ! ${PYTHON} --version; then
|
|
echo "Error: ${PYTHON} is not found, maybe you should set DORIS_BUILD_PYTHON_VERSION."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "${DORIS_TOOLCHAIN}" ]]; then
|
|
if [[ "$(uname -s)" == 'Darwin' ]]; then
|
|
DORIS_TOOLCHAIN=clang
|
|
else
|
|
DORIS_TOOLCHAIN=clang
|
|
fi
|
|
fi
|
|
|
|
if [[ "${DORIS_TOOLCHAIN}" == "gcc" ]]; then
|
|
# set GCC HOME
|
|
if [[ -z "${DORIS_GCC_HOME}" ]]; then
|
|
DORIS_GCC_HOME="$(dirname "$(command -v gcc)")"/..
|
|
export DORIS_GCC_HOME
|
|
fi
|
|
|
|
export CC="${DORIS_GCC_HOME}/bin/gcc"
|
|
export CXX="${DORIS_GCC_HOME}/bin/g++"
|
|
if test -x "${DORIS_GCC_HOME}/bin/ld"; then
|
|
export DORIS_BIN_UTILS="${DORIS_GCC_HOME}/bin/"
|
|
fi
|
|
ENABLE_PCH='OFF'
|
|
elif [[ "${DORIS_TOOLCHAIN}" == "clang" ]]; then
|
|
# set CLANG HOME
|
|
if [[ -z "${DORIS_CLANG_HOME}" ]]; then
|
|
DORIS_CLANG_HOME="$(dirname "$(command -v clang)")"/..
|
|
export DORIS_CLANG_HOME
|
|
fi
|
|
|
|
export CC="${DORIS_CLANG_HOME}/bin/clang"
|
|
export CXX="${DORIS_CLANG_HOME}/bin/clang++"
|
|
if test -x "${DORIS_CLANG_HOME}/bin/ld.lld"; then
|
|
export DORIS_BIN_UTILS="${DORIS_CLANG_HOME}/bin/"
|
|
fi
|
|
if [[ -f "${DORIS_CLANG_HOME}/bin/llvm-symbolizer" ]]; then
|
|
export ASAN_SYMBOLIZER_PATH="${DORIS_CLANG_HOME}/bin/llvm-symbolizer"
|
|
fi
|
|
if [[ -z "${ENABLE_PCH}" ]]; then
|
|
ENABLE_PCH='ON'
|
|
fi
|
|
else
|
|
echo "Error: unknown DORIS_TOOLCHAIN=${DORIS_TOOLCHAIN}, currently only 'gcc' and 'clang' are supported"
|
|
exit 1
|
|
fi
|
|
|
|
export CCACHE_COMPILERCHECK=content
|
|
if [[ "${ENABLE_PCH}" == "ON" ]]; then
|
|
export CCACHE_PCH_EXTSUM=true
|
|
export CCACHE_SLOPPINESS="pch_defines,time_macros"
|
|
else
|
|
export CCACHE_NOPCH_EXTSUM=true
|
|
export CCACHE_SLOPPINESS="default"
|
|
fi
|
|
|
|
if [[ -z "${DORIS_BIN_UTILS}" ]]; then
|
|
export DORIS_BIN_UTILS='/usr/bin/'
|
|
fi
|
|
|
|
if [[ -z "${DORIS_GCC_HOME}" ]]; then
|
|
DORIS_GCC_HOME="$(dirname "$(command -v gcc)")/.."
|
|
export DORIS_GCC_HOME
|
|
fi
|
|
|
|
if [[ ! -f "${DORIS_GCC_HOME}/bin/gcc" ]]; then
|
|
echo "Error: wrong directory DORIS_GCC_HOME=${DORIS_GCC_HOME}"
|
|
exit 1
|
|
fi
|
|
|
|
# export CLANG COMPATIBLE FLAGS
|
|
CLANG_COMPATIBLE_FLAGS="$(echo | "${DORIS_GCC_HOME}/bin/gcc" -Wp,-v -xc++ - -fsyntax-only 2>&1 |
|
|
grep -E '^\s+/' | awk '{print "-I" $1}' | tr '\n' ' ')"
|
|
export CLANG_COMPATIBLE_FLAGS
|
|
|
|
# if is called from build-thirdparty.sh, no need to check these tools
|
|
if test -z "${BUILD_THIRDPARTY_WIP:-}"; then
|
|
# register keyword is forbidden to use in C++17
|
|
# the C++ code generated by flex that remove register keyword after version 2.6.0
|
|
# so we need check flex version here to avoid compilation failed
|
|
flex_ver="$(flex --version | awk '{print $2}')"
|
|
required_ver="2.6.0"
|
|
if [[ ! "$(printf '%s\n' "${required_ver}" "${flex_ver}" | sort -V | head -n1)" = "${required_ver}" ]]; then
|
|
echo "Error: flex version (${flex_ver}) must be greater than or equal to ${required_ver}"
|
|
exit 1
|
|
fi
|
|
|
|
# check java home
|
|
if [[ -z "${JAVA_HOME}" ]]; then
|
|
JAVA="$(command -v java)"
|
|
JAVAP="$(command -v javap)"
|
|
else
|
|
JAVA="${JAVA_HOME}/bin/java"
|
|
JAVAP="${JAVA_HOME}/bin/javap"
|
|
fi
|
|
export JAVA
|
|
|
|
if [[ ! -x "${JAVA}" ]]; then
|
|
echo "The JAVA_HOME environment variable is not defined correctly"
|
|
echo "This environment variable is needed to run this program"
|
|
echo "NB: JAVA_HOME should point to a JDK not a JRE"
|
|
exit 1
|
|
fi
|
|
|
|
JAVA_VER="$("${JAVAP}" -verbose java.lang.String | grep "major version" | cut -d " " -f5)"
|
|
if [[ "${JAVA_VER}" -lt 52 ]]; then
|
|
echo "Error: require JAVA with JDK version at least 1.8"
|
|
exit 1
|
|
fi
|
|
|
|
# check maven
|
|
MVN_CMD='mvn'
|
|
if [[ -n "${CUSTOM_MVN}" ]]; then
|
|
MVN_CMD="${CUSTOM_MVN}"
|
|
fi
|
|
if ! "${MVN_CMD}" --version; then
|
|
echo "Error: mvn is not found"
|
|
exit 1
|
|
fi
|
|
export MVN_CMD
|
|
fi
|
|
|
|
if [[ "$(uname -s)" == 'Darwin' ]]; then
|
|
if ! command -v libtoolize &>/dev/null && command -v glibtoolize &>/dev/null; then
|
|
shopt -s expand_aliases
|
|
alias libtoolize='glibtoolize'
|
|
fi
|
|
fi
|
|
|
|
CMAKE_CMD='cmake'
|
|
if [[ -n "${CUSTOM_CMAKE}" ]]; then
|
|
CMAKE_CMD="${CUSTOM_CMAKE}"
|
|
fi
|
|
if ! "${CMAKE_CMD}" --version; then
|
|
echo "Error: cmake is not found"
|
|
exit 1
|
|
fi
|
|
export CMAKE_CMD
|
|
|
|
GENERATOR="Unix Makefiles"
|
|
BUILD_SYSTEM="make"
|
|
if NINJA_VERSION="$(ninja --version 2>/dev/null)"; then
|
|
echo "ninja ${NINJA_VERSION}"
|
|
GENERATOR="Ninja"
|
|
BUILD_SYSTEM="ninja"
|
|
fi
|
|
|
|
if CCACHE_VERSION="$(ccache --version 2>/dev/null)"; then
|
|
echo "${CCACHE_VERSION}" | head -n 1
|
|
# shellcheck disable=2034
|
|
CMAKE_USE_CCACHE="-DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
|
|
fi
|
|
|
|
export GENERATOR
|
|
export BUILD_SYSTEM
|
|
|
|
export PKG_CONFIG_PATH="${DORIS_HOME}/thirdparty/installed/lib64/pkgconfig:${PKG_CONFIG_PATH}"
|