370 lines
11 KiB
Bash
370 lines
11 KiB
Bash
#!/bin/bash
|
|
# Copyright Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
|
|
set -e
|
|
|
|
SCRIPT_PATH=$(cd $(dirname $0) && pwd)
|
|
PROJECT_ROOT_PATH=$(cd ${SCRIPT_PATH} && pwd)
|
|
|
|
export USE_BUILD_MAKE="ON"
|
|
export COMPONENT="CM"
|
|
export VERSION_MODE="release"
|
|
export THIRD="${PROJECT_ROOT_PATH}/binarylibs"
|
|
export OUT_PATH=${PROJECT_ROOT_PATH}/output
|
|
export TMP_BUILD_DIR=${PROJECT_ROOT_PATH}/dist
|
|
export PKG="no"
|
|
export ETCD="ON"
|
|
export HOTPATCH="ON"
|
|
export MULTIPLE_NODES="ON"
|
|
export OPEN_SOURCE_MODE="inc"
|
|
export LIBPQ="ON"
|
|
export KRB="OFF"
|
|
export GCC="7.3"
|
|
export PRIVATEGAUSS="ON"
|
|
export ALARM="ON"
|
|
|
|
export DCC="${PROJECT_ROOT_PATH}/../DCC"
|
|
export PKG_NAME_PRE="Package_ddes_cm"
|
|
|
|
export SYMBOLS_NAME_PRE="Symbols_ddes_cm"
|
|
export PKG_PREFIX_NAME=""
|
|
|
|
export PROJECT_NAME="CM"
|
|
export COMMIT_ID=$(git rev-parse HEAD | cut -b 1-8)
|
|
export COMPILE_TIME=$(date "+%Y-%m-%d %H:%M:%S")
|
|
|
|
function help() {
|
|
echo "$0 [-m {release|debug|memcheck|cov}] [-3rd \${THIRD_BINARY_PATH}] [-o \${OUTPUT_PATH}] [--pkg] [--single]
|
|
default: $0 -m ${VERSION_MODE} -3rd \"${THIRD}\" -o \"${OUT_PATH}\""
|
|
}
|
|
|
|
function build_dcc() {
|
|
export PLAT_FORM_STR=$(sh ${SCRIPT_PATH}/build/get_PlatForm_str.sh)
|
|
local dcc_build_mode="Release"
|
|
if [ $(echo $VERSION_MODE | grep -E "debug" | wc -l) -gt 0 ]; then
|
|
dcc_build_mode="Debug"
|
|
fi
|
|
if [ "x${THIRD_BIN_PATH}" == "x" ]; then
|
|
echo "THIRD_BIN_PATH not exist"
|
|
exit 1
|
|
fi
|
|
echo "build dcc version mode: ${dcc_build_mode}"
|
|
echo "compile cbb"
|
|
cd ${DCC}/../CBB/build/linux/opengauss && sh build.sh -3rd ${THIRD_BIN_PATH} -m $dcc_build_mode -t make
|
|
echo "compile dcf"
|
|
cd ${DCC}/../DCF/build/linux/opengauss && sh build.sh -3rd ${THIRD_BIN_PATH} -m $dcc_build_mode -t make
|
|
echo "compile dcc"
|
|
cd ${DCC}/build/linux/opengauss && sh build.sh -3rd ${THIRD_BIN_PATH} -m $dcc_build_mode -t make
|
|
cp -rf ${DCC}/../DCF/output/lib/libdcf.so ${DCC}/output/lib
|
|
}
|
|
|
|
function clean_dcc_dependency() {
|
|
echo "clean dcc libs[${PROJECT_ROOT_PATH}/common_lib/dcc/]"
|
|
mkdir -p ${PROJECT_ROOT_PATH}/common_lib/dcc/lib
|
|
mkdir -p ${PROJECT_ROOT_PATH}/common_lib/dcc/include
|
|
rm -rf ${PROJECT_ROOT_PATH}/common_lib/dcc/lib/*
|
|
rm -rf $PROJECT_ROOT_PATH/common_lib/dcc/include/*
|
|
}
|
|
|
|
function update_dcc_dependency() {
|
|
if [ -d "${DCC}" ]; then
|
|
echo "dcc[${DCC}] found, start compile dcc!!!"
|
|
build_dcc
|
|
clean_dcc_dependency
|
|
cp -rf ${DCC}/src/interface/dcc_interface.h ${PROJECT_ROOT_PATH}/common_lib/dcc/include/
|
|
cp -rf ${DCC}/output/lib/libdcc.so ${PROJECT_ROOT_PATH}/common_lib/dcc/lib/
|
|
cp -rf ${DCC}/output/lib/libdcf.so ${PROJECT_ROOT_PATH}/common_lib/dcc/lib/
|
|
cp -rf ${DCC}/output/lib/libgstor.so ${PROJECT_ROOT_PATH}/common_lib/dcc/lib/
|
|
return
|
|
fi
|
|
|
|
if [ "x${THIRD_BIN_PATH}" != "x" ]; then
|
|
local dcc_home="${THIRD_BIN_PATH}/kernel/component/dcc"
|
|
|
|
if [ -d "${dcc_home}" ]; then
|
|
echo "We well get dcc lib from 3rd[${dcc_home}]."
|
|
clean_dcc_dependency
|
|
cp -rf ${dcc_home}/include/* ${PROJECT_ROOT_PATH}/common_lib/dcc/include/
|
|
cp -rf ${dcc_home}/lib/*.so ${PROJECT_ROOT_PATH}/common_lib/dcc/lib/
|
|
return
|
|
else
|
|
echo "***************** no dcc lib found in 3rd[${dcc_home}]!!! *******************"
|
|
fi
|
|
fi
|
|
|
|
echo "there is no DCC source[${DCC}], and no 3rd path, we skip update dcc libs."
|
|
}
|
|
|
|
# use gcc7.3
|
|
function gcc_env() {
|
|
if [ "${THIRD}" == "library" ]; then
|
|
export CC=$(which gcc)
|
|
export CXX=$(which g++)
|
|
return
|
|
fi
|
|
export GCCFOLDER=${THIRD}/buildtools/gcc${GCC}/
|
|
echo "gcc set to 3rd path:[${GCCFOLDER}]!"
|
|
export CC=$GCCFOLDER/gcc/bin/gcc
|
|
export CXX=$GCCFOLDER/gcc/bin/g++
|
|
export LD_LIBRARY_PATH=${GCCFOLDER}/gcc/lib64:${GCCFOLDER}/isl/lib:${GCCFOLDER}/mpc/lib/:${GCCFOLDER}/mpfr/lib/:${GCCFOLDER}/gmp/lib/:$LD_LIBRARY_PATH
|
|
export PATH=${GCCFOLDER}/gcc/bin:$PATH
|
|
}
|
|
|
|
function compile_open_source() {
|
|
sh ${SCRIPT_PATH}/ready_open_source.sh -m ${OPEN_SOURCE_MODE} -c ${COMPONENT}
|
|
}
|
|
|
|
function cm_component_choice() {
|
|
ETCD="OFF"
|
|
HOTPATCH="OFF"
|
|
MULTIPLE_NODES="OFF"
|
|
PRIVATEGAUSS="OFF"
|
|
}
|
|
|
|
function pre_build() {
|
|
if [ "x${COMPONENT}" != "x" ]; then
|
|
case "${COMPONENT}" in
|
|
'CM')
|
|
cm_component_choice
|
|
;;
|
|
*)
|
|
echo "unknown component, please check [-c ${COMPONENT}]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ "x${THIRD}" == "xlibrary" ]; then
|
|
unset THIRD_BIN_PATH
|
|
compile_open_source
|
|
else
|
|
export THIRD_BIN_PATH="${THIRD}"
|
|
export GCC_VERSION=${GCC}
|
|
fi
|
|
|
|
gcc_env
|
|
}
|
|
|
|
function pkg() {
|
|
echo "pkg cm start"
|
|
local bin_tar="${PKG_NAME_PRE}.tar.gz"
|
|
local sym_tar="${SYMBOLS_NAME_PRE}.tar.gz"
|
|
if [ "x${PKG_PREFIX_NAME}" != "x" ]; then
|
|
local bin_tar="${PKG_PREFIX_NAME}.tar.gz"
|
|
local sym_tar="${PKG_PREFIX_NAME}-symbol.tar.gz"
|
|
fi
|
|
|
|
cd ${OUT_PATH}
|
|
tar -czf "${bin_tar}" bin lib share
|
|
if [ -d symbols ]; then
|
|
tar -czf "${sym_tar}" symbols
|
|
fi
|
|
}
|
|
|
|
function seperate_symbols() {
|
|
local sep_path=${SCRIPT_PATH}/build
|
|
local exclude_bin_objs="etcd etcdctl"
|
|
local exclude_lib_objs="libgcc_s.so libstdc++.so"
|
|
|
|
local strip_mode=""
|
|
if [ "x${COMPONENT}" == "xV3" ]; then
|
|
strip_mode="--strip-all"
|
|
else
|
|
strip_mode="--strip-debug"
|
|
fi
|
|
|
|
cd ${OUT_PATH}
|
|
mkdir -p ${OUT_PATH}/symbols
|
|
sh ${sep_path}/seperate_symbol.sh "bin" "${OUT_PATH}/symbols" "${exclude_bin_objs}" "${strip_mode}"
|
|
sh ${sep_path}/seperate_symbol.sh "lib" "${OUT_PATH}/symbols" "${exclude_lib_objs}" "${strip_mode}"
|
|
if [ "x${COMPONENT}" == "xV3" ]; then
|
|
sh ${sep_path}/seperate_symbol.sh "cm_tools/psutil" "${OUT_PATH}/symbols" "" "${strip_mode}"
|
|
fi
|
|
}
|
|
|
|
function after_build() {
|
|
if [ "${VERSION_MODE}" == "release" ]; then
|
|
seperate_symbols
|
|
fi
|
|
|
|
if [ "${PKG}" == "yes" ]; then
|
|
pkg
|
|
fi
|
|
}
|
|
|
|
function build_clean() {
|
|
[ -d "${PROJECT_ROOT_PATH}/output" ] && rm -rf ${PROJECT_ROOT_PATH}/output/*
|
|
[ -d "${PROJECT_ROOT_PATH}/dist" ] && rm -rf ${TMP_BUILD_DIR}/dist/*
|
|
[ -d "${PROJECT_ROOT_PATH}/library" ] && rm -rf ${PROJECT_ROOT_PATH}/library
|
|
echo "-- clean up --"
|
|
}
|
|
|
|
function build_cm() {
|
|
export MAKE_BUILD_TYPE="Release"
|
|
export MAKE_DEF=""
|
|
case "${VERSION_MODE}" in
|
|
'debug')
|
|
MAKE_BUILD_TYPE='Debug'
|
|
;;
|
|
'release')
|
|
MAKE_BUILD_TYPE='Release'
|
|
;;
|
|
'cov')
|
|
MAKE_BUILD_TYPE='Debug'
|
|
export GCOV="ON"
|
|
;;
|
|
'memcheck')
|
|
MAKE_BUILD_TYPE='Debug'
|
|
export MEMCHECK="ON"
|
|
;;
|
|
*)
|
|
echo "unknown build mode, please check [-m ${VERSION_MODE}]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
PKG_NAME="${PKG_NAME_PRE}_${VERSION_MODE}.tar.gz"
|
|
MAKE_DEF="MAKE_INSTALL_PREFIX="${OUT_PATH}" ENABLE_PRIVATEGAUSS=${PRIVATEGAUSS} BUILD_TYPE=${MAKE_BUILD_TYPE} ${MAKE_DEF} ENABLE_MULTIPLE_NODES=${MULTIPLE_NODES} ENABLE_ETCD=${ETCD} ENABLE_HOTPATCH=${HOTPATCH} ENABLE_LIBPQ=${LIBPQ} ENABLE_KRB=${KRB} ENABLE_ALARM=${ALARM}"
|
|
export CM_VERSION_STR="(${PROJECT_NAME} build ${COMMIT_ID}) compiled at ${COMPILE_TIME} ${MAKE_BUILD_TYPE}"
|
|
|
|
echo "********************************************************************"
|
|
echo "start build CM with <${VERSION_MODE}>
|
|
project_root_path=[${PROJECT_ROOT_PATH}]
|
|
3rd=[${THIRD}]
|
|
gcc=[${GCC}]
|
|
pkg=[${PKG}]
|
|
etcd=[${ETCD}]
|
|
hotpatch=[${HOTPATCH}]
|
|
libpq=[${LIBPQ}]
|
|
krb=[${KRB}]
|
|
multiple_nodes=[${MULTIPLE_NODES}]
|
|
make_def=[${MAKE_DEF}]
|
|
tmp_build_dir=[${TMP_BUILD_DIR}]
|
|
pkg_name=[${PKG_NAME}]
|
|
dcc=[${DCC}]
|
|
output to [${OUT_PATH}]."
|
|
echo "********************************************************************"
|
|
|
|
mkdir -p ${TMP_BUILD_DIR}
|
|
rm -rf ${TMP_BUILD_DIR}/*
|
|
|
|
mkdir -p ${OUT_PATH}
|
|
rm -rf ${OUT_PATH}/*
|
|
mkdir -p ${OUT_PATH}/share/config
|
|
mkdir -p ${OUT_PATH}/lib
|
|
mkdir -p ${OUT_PATH}/bin
|
|
|
|
cd ${SCRIPT_PATH}
|
|
|
|
make clean -sj
|
|
|
|
make install -sj
|
|
}
|
|
|
|
function main() {
|
|
if [ "x$1" == "xclean" ]; then
|
|
build_clean
|
|
exit 0
|
|
fi
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-h | --help)
|
|
help
|
|
exit 1
|
|
;;
|
|
-m | --version_mode)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given version_mode[release|debug|memcheck|cov]"
|
|
exit 1
|
|
fi
|
|
VERSION_MODE="$2"
|
|
shift 2
|
|
;;
|
|
-c | --com)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given Component[CM]"
|
|
exit 1
|
|
fi
|
|
COMPONENT="$2"
|
|
shift 2
|
|
;;
|
|
-o | --out_path)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given binarylib directory values"
|
|
exit 1
|
|
fi
|
|
OUT_PATH="$2"
|
|
shift 2
|
|
;;
|
|
-n | --pkg_name)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given pkg prefix name values"
|
|
exit 1
|
|
fi
|
|
PKG="yes"
|
|
PKG_PREFIX_NAME="$2"
|
|
shift 2
|
|
;;
|
|
-3rd | --3rd_binarylib_dir)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given binarylib directory values"
|
|
exit 1
|
|
fi
|
|
THIRD="$2"
|
|
shift 2
|
|
;;
|
|
--gcc)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given gcc version values"
|
|
exit 1
|
|
fi
|
|
GCC="$2"
|
|
shift 2
|
|
;;
|
|
-dcc)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given DCC path values"
|
|
exit 1
|
|
fi
|
|
DCC="$2"
|
|
shift 2
|
|
;;
|
|
--pkg)
|
|
PKG="yes"
|
|
shift
|
|
;;
|
|
--noetcd)
|
|
ETCD="OFF"
|
|
shift
|
|
;;
|
|
--nohotpatch)
|
|
HOTPATCH="OFF"
|
|
shift
|
|
;;
|
|
--single)
|
|
MULTIPLE_NODES="OFF"
|
|
shift
|
|
;;
|
|
--clean)
|
|
rm -rf ${PROJECT_ROOT_PATH}/library
|
|
OPEN_SOURCE_MODE="all"
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Internal Error: option processing error: $1" 1>&2
|
|
echo "./build_make.sh --help or ./build_make.sh -h"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
pre_build
|
|
update_dcc_dependency
|
|
build_cm
|
|
after_build
|
|
|
|
echo "ALL SUCCESS!!!!"
|
|
}
|
|
|
|
main $@
|