execve_hook/build_all.sh

167 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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:-}"