167 lines
3.9 KiB
Bash
Executable File
167 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 快速编译所有架构脚本
|
||
# 用途: 一键编译 x86_64, arm64, arm 三个架构
|
||
|
||
set -e
|
||
|
||
# 定义颜色
|
||
readonly RED='\033[0;31m'
|
||
readonly GREEN='\033[0;32m'
|
||
readonly YELLOW='\033[1;33m'
|
||
readonly BLUE='\033[0;34m'
|
||
readonly NC='\033[0m'
|
||
|
||
# 日志函数
|
||
log_info() {
|
||
echo -e "${GREEN}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${BLUE}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
# 显示帮助信息
|
||
show_help() {
|
||
cat << EOF
|
||
${BLUE}快速编译所有架构脚本${NC}
|
||
|
||
用法: $0 [选项]
|
||
|
||
选项:
|
||
-h, --help 显示此帮助信息
|
||
--hook 启用 HOOK=1
|
||
--no-config-check 启用 NO_CONFIG_CHECK=1
|
||
--debug 启用 DEBUG=1
|
||
--no-clean 跳过清理步骤
|
||
--arch <archs> 指定编译架构 (默认: x86_64 arm64 arm)
|
||
可以用逗号或空格分隔,例如: --arch "x86_64,arm64"
|
||
|
||
示例:
|
||
$0 # 编译所有架构
|
||
$0 --hook --no-config-check # 编译所有架构并启用 HOOK 和 NO_CONFIG_CHECK
|
||
$0 --debug --arch "x86_64,arm64" # 仅编译 x86_64 和 arm64,启用调试
|
||
$0 --hook --no-config-check --debug # 编译所有架构,启用所有选项
|
||
|
||
EOF
|
||
}
|
||
|
||
# 解析参数
|
||
HOOK=""
|
||
NO_CONFIG_CHECK=""
|
||
DEBUG=""
|
||
DO_CLEAN=true
|
||
ARCHS=("x86_64" "arm64" "arm")
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
-h|--help)
|
||
show_help
|
||
exit 0
|
||
;;
|
||
--hook)
|
||
HOOK="HOOK=1"
|
||
shift
|
||
;;
|
||
--no-config-check)
|
||
NO_CONFIG_CHECK="NO_CONFIG_CHECK=1"
|
||
shift
|
||
;;
|
||
--debug)
|
||
DEBUG="DEBUG=1"
|
||
shift
|
||
;;
|
||
--no-clean)
|
||
DO_CLEAN=false
|
||
shift
|
||
;;
|
||
--arch)
|
||
if [[ -n "$2" && "$2" != --* ]]; then
|
||
# 支持逗号或空格分隔
|
||
IFS=', ' read -r -a ARCHS <<< "$2"
|
||
shift 2
|
||
else
|
||
log_error "--arch 需要参数"
|
||
exit 1
|
||
fi
|
||
;;
|
||
*)
|
||
log_error "未知参数: $1"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# 构建 make 参数
|
||
MAKE_FLAGS="$HOOK $NO_CONFIG_CHECK $DEBUG"
|
||
|
||
FAILED_ARCHS=()
|
||
SUCCESS_ARCHS=()
|
||
|
||
echo ""
|
||
log_info "=========================================="
|
||
log_info "开始编译所有架构"
|
||
log_info "架构列表: ${ARCHS[*]}"
|
||
log_info "编译参数: $MAKE_FLAGS"
|
||
log_info "=========================================="
|
||
echo ""
|
||
|
||
# 清理之前的编译产物
|
||
if [ "$DO_CLEAN" = true ]; then
|
||
log_info "清理之前的编译产物..."
|
||
make clean
|
||
echo ""
|
||
fi
|
||
|
||
# 遍历编译每个架构
|
||
for arch in "${ARCHS[@]}"; do
|
||
log_info "----------------------------------------"
|
||
log_info "正在编译架构: $arch"
|
||
log_info "----------------------------------------"
|
||
|
||
if make $MAKE_FLAGS ARCH=$arch; then
|
||
log_success "架构 $arch 编译成功"
|
||
SUCCESS_ARCHS+=("$arch")
|
||
else
|
||
log_error "架构 $arch 编译失败"
|
||
FAILED_ARCHS+=("$arch")
|
||
fi
|
||
|
||
echo ""
|
||
done
|
||
|
||
# 显示编译结果
|
||
log_info "=========================================="
|
||
log_info "编译完成"
|
||
log_info "=========================================="
|
||
echo ""
|
||
|
||
if [ ${#SUCCESS_ARCHS[@]} -gt 0 ]; then
|
||
log_success "成功编译的架构: ${SUCCESS_ARCHS[*]}"
|
||
fi
|
||
|
||
if [ ${#FAILED_ARCHS[@]} -gt 0 ]; then
|
||
log_error "失败编译的架构: ${FAILED_ARCHS[*]}"
|
||
fi
|
||
|
||
echo ""
|
||
log_info "编译产物:"
|
||
ls -lh build/*.so 2>/dev/null || log_error "没有找到编译产物"
|
||
echo ""
|
||
|
||
# 如果有失败的架构,返回错误码
|
||
if [ ${#FAILED_ARCHS[@]} -gt 0 ]; then
|
||
exit 1
|
||
fi
|
||
|
||
log_success "所有架构编译完成!"
|
||
echo ""
|
||
log_info "本次编译使用的参数:"
|
||
log_info " 架构: ${ARCHS[*]}"
|
||
log_info " 编译选项: ${MAKE_FLAGS:-无}"
|