#!/usr/bin/env bash set -e OS=$(uname -s) NINJA_CMD="" NINJA_BASE="ninja" cpu_number=`nproc` NINJA_MAX_JOBS=0 if [[ $OS =~ "NT" ]]; then echo "BUILD in NT ..." NINJA_BASE="Ninja" fi READLINK=readlink if [ $OS = "Darwin" ];then READLINK=greadlink fi PROJECT_DIR=$(dirname "${BASH_SOURCE[0]}")/../../.. function cd_real_build_dir() { REAL_DIR=$($READLINK -f $1) echo "may alias dir: $1" echo "cd real build dir: ${REAL_DIR}" cd ${REAL_DIR} } function build_flatc() { BUILD_DIR=$1/build_dir/host_flatc/build INSTALL_DIR=$BUILD_DIR/../install REMOVE_OLD_BUILD=$2 if [ $REMOVE_OLD_BUILD = "true" ]; then echo "remove old build/install dir" rm -rf $INSTALL_DIR rm -rf $BUILD_DIR else echo "strip remove old build" fi mkdir -p $BUILD_DIR mkdir -p $INSTALL_DIR cd_real_build_dir $BUILD_DIR cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \ -DFLATBUFFERS_BUILD_TESTS=OFF \ -DFLATBUFFERS_BUILD_FLATHASH=OFF \ -DFLATBUFFERS_BUILD_FLATLIB=OFF \ -DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \ ${PROJECT_DIR}/third_party/flatbuffers ${NINJA_BASE} all ${NINJA_BASE} install/strip } function try_remove_old_build() { REMOVE_OLD_BUILD=$1 echo $REMOVE_OLD_BUILD BUILD_DIR=$2 INSTALL_DIR=$3 if [ $REMOVE_OLD_BUILD = "true" ]; then echo "remove old build/install dir" rm -rf ${INSTALL_DIR} rm -rf ${BUILD_DIR} else echo "strip remove old build" fi } function config_ninja_target_cmd() { if [ $# -eq 5 ]; then _NINJA_VERBOSE=$1 _BUILD_DEVELOP=$2 _NINJA_TARGET=$3 _NINJA_DRY_RUN=$4 _NINJA_MAX_JOBS=$5 else echo "err call config_ninja_target_cmd" exit -1 fi if [ -z "${_NINJA_TARGET}" ]; then NINJA_CMD="${NINJA_BASE} all -j ${_NINJA_MAX_JOBS}" else NINJA_CMD="${NINJA_BASE} ${_NINJA_TARGET} -j ${_NINJA_MAX_JOBS}" fi if [ ${_NINJA_DRY_RUN} = "ON" ]; then if [[ "${NINJA_CMD}" =~ "&" ]]; then echo "code issue happened!!! base cmd can not include & before ninja explain" echo "now cmd: ${NINJA_CMD}" exit -1 fi NINJA_CMD="${NINJA_CMD} -d explain -n" else if [ ${_NINJA_VERBOSE} = "ON" ]; then if [[ "${NINJA_CMD}" =~ "&" ]]; then echo "code issue happened!!! base cmd can not include & before ninja explain" echo "now cmd: ${NINJA_CMD}" exit -1 fi NINJA_CMD="${NINJA_CMD} -d explain -v" fi if [ ${_BUILD_DEVELOP} = "ON" ]; then echo "add develop target" NINJA_CMD="${NINJA_CMD} && ${NINJA_BASE} develop" fi fi echo "build ${NINJA_BASE} target command: ${NINJA_CMD}" } function show_cmakelist_options() { cd ${PROJECT_DIR} grep "option(" lite/CMakeLists.txt CMakeLists.txt --color cd - > /dev/null } function config_ninja_default_max_jobs() { # plus 2 is ninja default behavior, you can run ninja -h to verify # but at Windows env, default max jobs will take 100% cpu, which may lead # to some Windows OS issue sometimes, eg, OpenSSH server lost respond or vcvarsall.bat # setenv failed etc(especially enable CUDA). I have no idea about this Windows OS issue. # as a workaround: config default NINJA_MAX_JOBS to cpu_number - 1 if [[ $OS =~ "NT" ]]; then ((NINJA_MAX_JOBS = ${cpu_number} - 1)) if [[ ${NINJA_MAX_JOBS} -le 0 ]]; then NINJA_MAX_JOBS=1 fi else ((NINJA_MAX_JOBS = ${cpu_number} + 2)) fi echo "config default NINJA_MAX_JOBS to ${NINJA_MAX_JOBS} [cpu number is:${cpu_number}]" }