139 lines
2.7 KiB
Bash
139 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
set -u
|
|
set -o pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BUILD_DIR="${SCRIPT_DIR}/buildarm/GrabBagPrj"
|
|
|
|
source "${SCRIPT_DIR}/project_registry.sh"
|
|
|
|
show_help() {
|
|
cat <<'EOF'
|
|
用法:
|
|
./buildArmPrj.sh [-r] [-q] [-h] [AppName]
|
|
|
|
选项:
|
|
-r 删除 buildarm 后重新编译
|
|
-q 强制重新执行 qmake
|
|
-h 显示帮助
|
|
|
|
参数:
|
|
AppName 可选的编译目标;不传则编译全部
|
|
|
|
可编译目标:
|
|
EOF
|
|
|
|
list_projects | sed 's/^/ - /'
|
|
}
|
|
|
|
CLEAN_BUILD=false
|
|
FORCE_QMAKE=false
|
|
TARGET_APP=""
|
|
|
|
while getopts "rqh" opt; do
|
|
case "$opt" in
|
|
r)
|
|
CLEAN_BUILD=true
|
|
;;
|
|
q)
|
|
FORCE_QMAKE=true
|
|
;;
|
|
h)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
if [ $# -gt 1 ]; then
|
|
show_help
|
|
exit 1
|
|
fi
|
|
|
|
if [ $# -eq 1 ]; then
|
|
TARGET_APP="$1"
|
|
if ! is_project "${TARGET_APP}"; then
|
|
echo "无效的编译目标: ${TARGET_APP}" >&2
|
|
echo >&2
|
|
show_help >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
START_TIME=$(date +%s)
|
|
|
|
if [ "${CLEAN_BUILD}" = true ]; then
|
|
echo "清理 ${SCRIPT_DIR}/buildarm"
|
|
rm -rf "${SCRIPT_DIR}/buildarm"
|
|
FORCE_QMAKE=true
|
|
fi
|
|
|
|
mkdir -p "${BUILD_DIR}"
|
|
cd "${BUILD_DIR}"
|
|
|
|
QMAKE_ARGS=(
|
|
-r
|
|
CONFIG+=release
|
|
"MOC_DIR=moc"
|
|
"UI_DIR=ui"
|
|
"RCC_DIR=rcc"
|
|
"OBJECTS_DIR=obj"
|
|
"QMAKE_CC=aarch64-linux-gnu-gcc"
|
|
"QMAKE_CXX=aarch64-linux-gnu-g++"
|
|
"QMAKE_LINK=aarch64-linux-gnu-g++"
|
|
)
|
|
|
|
if [ -n "${TARGET_APP}" ]; then
|
|
QMAKE_ARGS+=("TARGET_APP=${TARGET_APP}")
|
|
echo "编译目标: ${TARGET_APP}"
|
|
else
|
|
echo "编译全部目标"
|
|
fi
|
|
|
|
if [ "${FORCE_QMAKE}" = true ] || [ ! -f "${BUILD_DIR}/Makefile" ]; then
|
|
echo "执行 qmake"
|
|
if ! qmake "${QMAKE_ARGS[@]}" "${SCRIPT_DIR}/GrabBagPrj.pro"; then
|
|
echo "qmake 执行失败" >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "跳过 qmake"
|
|
fi
|
|
|
|
JOBS="${JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 8)}"
|
|
|
|
echo "=========================================="
|
|
|
|
echo "执行 make -j${JOBS}"
|
|
BUILD_RESULT=0
|
|
make -j"${JOBS}" || BUILD_RESULT=$?
|
|
|
|
END_TIME=$(date +%s)
|
|
ELAPSED=$((END_TIME - START_TIME))
|
|
MINUTES=$((ELAPSED / 60))
|
|
SECONDS=$((ELAPSED % 60))
|
|
|
|
if [ "${BUILD_RESULT}" -eq 0 ]; then
|
|
if [ -n "${TARGET_APP}" ]; then
|
|
echo "${TARGET_APP} 编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒"
|
|
else
|
|
echo "全部目标编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
if [ -n "${TARGET_APP}" ]; then
|
|
echo "${TARGET_APP} 编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2
|
|
else
|
|
echo "编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2
|
|
fi
|
|
|
|
exit "${BUILD_RESULT}"
|