#!/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 指定编译架构 (默认: 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:-无}"