237 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| TOPDIR=`readlink -f \`dirname $0\``
 | |
| BUILD_SH=$TOPDIR/build.sh
 | |
| 
 | |
| DEP_DIR=${TOPDIR}/deps/3rd/usr/local/oceanbase/deps/devel
 | |
| TOOLS_DIR=${TOPDIR}/deps/3rd/usr/local/oceanbase/devtools
 | |
| CMAKE_COMMAND="${TOOLS_DIR}/bin/cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1"
 | |
| 
 | |
| CPU_CORES=`grep -c ^processor /proc/cpuinfo`
 | |
| KERNEL_RELEASE=`grep -Po 'release [0-9]{1}' /etc/issue 2>/dev/null`
 | |
| 
 | |
| ALL_ARGS=("$@")
 | |
| BUILD_ARGS=()
 | |
| MAKE_ARGS=(-j $CPU_CORES)
 | |
| NEED_MAKE=false
 | |
| NEED_INIT=false
 | |
| LLD_OPTION=ON
 | |
| ASAN_OPTION=ON
 | |
| STATIC_LINK_LGPL_DEPS_OPTION=ON
 | |
| 
 | |
| echo "$0 ${ALL_ARGS[@]}"
 | |
| 
 | |
| function echo_log() {
 | |
|   echo -e "[build.sh] $@"
 | |
| }
 | |
| 
 | |
| function echo_err() {
 | |
|   echo -e "[build.sh][ERROR] $@" 1>&2
 | |
| }
 | |
| 
 | |
| function usage
 | |
| {
 | |
|     echo -e "Usage:"
 | |
|     echo -e "\t./build.sh -h"
 | |
|     echo -e "\t./build.sh init"
 | |
|     echo -e "\t./build.sh clean"
 | |
|     echo -e "\t./build.sh [BuildType] [--init] [--make [MakeOptions]]"
 | |
| 
 | |
|     echo -e "\nOPTIONS:"
 | |
|     echo -e "\tBuildType => debug(default), release, errsim, dissearray, rpm"
 | |
|     echo -e "\tMakeOptions => Options to make command, default: -j N"
 | |
| 
 | |
|     echo -e "\nExamples:"
 | |
|     echo -e "\t# Build by debug mode and make with -j24."
 | |
|     echo -e "\t./build.sh debug --make -j24"
 | |
| 
 | |
|     echo -e "\n\t# Init and build with release mode but not compile."
 | |
|     echo -e "\t./build.sh release --init"
 | |
| 
 | |
|     echo -e "\n\t# Build with rpm mode and make with default arguments."
 | |
|     echo -e "\t./build.sh rpm --make"
 | |
| }
 | |
| 
 | |
| # parse arguments
 | |
| function parse_args
 | |
| {
 | |
|     for i in "${ALL_ARGS[@]}"; do
 | |
|         if [[ "$i" == "--init" ]]
 | |
|         then
 | |
|             NEED_INIT=true
 | |
|         elif [[ "$i" == "--make" ]]
 | |
|         then
 | |
|             NEED_MAKE=make
 | |
|         elif [[ $NEED_MAKE == false ]]
 | |
|         then
 | |
|             BUILD_ARGS+=("$i")
 | |
|         else
 | |
|             MAKE_ARGS+=("$i")
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     if [[ "$KERNEL_RELEASE" == "release 6" ]]; then
 | |
|         echo_log '[NOTICE] lld is disabled in kernel release 6'
 | |
|         LLD_OPTION="OFF"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # try call command make, if use give --make in command line.
 | |
| function try_make
 | |
| {
 | |
|     if [[ $NEED_MAKE != false ]]
 | |
|     then
 | |
|         $NEED_MAKE "${MAKE_ARGS[@]}"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # try call init if --init given.
 | |
| function try_init
 | |
| {
 | |
|     if [[ $NEED_INIT == true ]]
 | |
|     then
 | |
|         do_init || exit $?
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # create build directory and cd it.
 | |
| function prepare_build_dir
 | |
| {
 | |
|     TYPE=$1
 | |
|     mkdir -p $TOPDIR/build_$TYPE && cd $TOPDIR/build_$TYPE
 | |
| }
 | |
| 
 | |
| # dep_create
 | |
| function do_init
 | |
| {
 | |
|     time1_ms=$(echo $[$(date +%s%N)/1000000])
 | |
|     (cd $TOPDIR/deps/init && bash dep_create.sh)
 | |
|     if [ $? -ne 0 ]; then
 | |
|       exit $?
 | |
|     fi
 | |
|     time2_ms=$(echo $[$(date +%s%N)/1000000])
 | |
| 
 | |
|     cost_time_ms=$(($time2_ms - $time1_ms))
 | |
|     cost_time_s=`expr $cost_time_ms / 1000`
 | |
|     let min=cost_time_s/60
 | |
|     let sec=cost_time_s%60
 | |
|     echo_log "use dep_create.sh to create deps cost time: ${min}m${sec}s"
 | |
| 
 | |
| }
 | |
| 
 | |
| # make build directory && cmake && make (if need)
 | |
| function do_build
 | |
| {
 | |
|     if [ ! -f ${TOOLS_DIR}/bin/cmake ]; then
 | |
|       echo_log "[NOTICE] Your workspace has not initialized dependencies, please append '--init' args to initialize dependencies"
 | |
|       exit 1
 | |
|     fi
 | |
| 
 | |
|     TYPE=$1; shift
 | |
|     prepare_build_dir $TYPE || return
 | |
|     ${CMAKE_COMMAND} ${TOPDIR} "$@"
 | |
|     if [ $? -ne 0 ]; then
 | |
|       echo_err "Failed to generate Makefile"
 | |
|       exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # clean build directories
 | |
| function do_clean
 | |
| {
 | |
|     echo_log "cleaning..."
 | |
|     find . -maxdepth 1 -type d -name 'build_*' | xargs rm -rf
 | |
| }
 | |
| 
 | |
| # build - configurate project and prepare to compile, by calling make
 | |
| function build
 | |
| {
 | |
| 
 | |
|     set -- "${BUILD_ARGS[@]}"
 | |
|     case "x$1" in
 | |
|       xrelease)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xrelease_no_unity)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_USE_LLD=$LLD_OPTION -DOB_ENABLE_UNITY=OFF
 | |
|         ;;
 | |
|       xrelease_asan)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_USE_LLD=$LLD_OPTION -DOB_USE_ASAN=$ASAN_OPTION
 | |
|         ;;
 | |
|       xdebug)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xdebug_no_unity)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION -DOB_ENABLE_UNITY=OFF
 | |
|         ;;
 | |
|       xdebug_asan)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION -DOB_USE_ASAN=$ASAN_OPTION
 | |
|         ;;
 | |
|       xerrsim_asan)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_ERRSIM=ON -DOB_USE_LLD=$LLD_OPTION -DOB_USE_ASAN=$ASAN_OPTION
 | |
|         ;;
 | |
|       xerrsim_debug)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_ERRSIM=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xerrsim)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_ERRSIM=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xdissearray)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_DIS_SEARRAY=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xtrans_module_test)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DTRANS_MODULE_TEST=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xenable_latch_diagnose)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_LATCH_DIAGNOSE=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xenable_memory_diagnosis)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_DEBUG_LOG=ON -DENABLE_MEMORY_DIAGNOSIS=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xenable_obj_leak_check)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_DEBUG_LOG=ON -DENABLE_OBJ_LEAK_CHECK=ON -DOB_USE_LLD=$LLD_OPTION
 | |
|         ;;
 | |
|       xrpm)
 | |
|         STATIC_LINK_LGPL_DEPS_OPTION=OFF
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_USE_LLD=$LLD_OPTION -DENABLE_FATAL_ERROR_HANG=OFF -DENABLE_AUTO_FDO=ON -DOB_STATIC_LINK_LGPL_DEPS=$STATIC_LINK_LGPL_DEPS_OPTION
 | |
|         ;;
 | |
|       xenable_smart_var_check)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION -DENABLE_SMART_VAR_CHECK=ON -DOB_ENABLE_AVX2=ON
 | |
|         ;;
 | |
|       xcoverage)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION -DWITH_COVERAGE=ON
 | |
|         ;;
 | |
|       xsanity)
 | |
|         do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOB_USE_LLD=$LLD_OPTION -DENABLE_SANITY=ON
 | |
|         ;;
 | |
|       *)
 | |
|         BUILD_ARGS=(debug "${BUILD_ARGS[@]}")
 | |
|         build
 | |
|         ;;
 | |
|     esac
 | |
| }
 | |
| 
 | |
| function main
 | |
| {
 | |
|     case "$1" in
 | |
|         -h)
 | |
|             usage
 | |
|             ;;
 | |
|         init)
 | |
|             parse_args
 | |
|             do_init
 | |
|             ;;
 | |
|         clean)
 | |
|             do_clean
 | |
|             ;;
 | |
|         *)
 | |
|             parse_args
 | |
|             try_init
 | |
|             build
 | |
|             try_make
 | |
|             ;;
 | |
|     esac
 | |
| }
 | |
| 
 | |
| main "$@"
 | 
