209 lines
7.0 KiB
Bash
Executable File
209 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# RK3588 Media Server 编译脚本
|
||
# 一键编译 Media Server 和 Agent
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
# 项目目录
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
BUILD_DIR="$PROJECT_DIR/build"
|
||
|
||
# 编译选项(可通过环境变量覆盖)
|
||
BUILD_TYPE="${BUILD_TYPE:-Release}"
|
||
BUILD_TESTS="${BUILD_TESTS:-OFF}"
|
||
BUILD_SAMPLES="${BUILD_SAMPLES:-ON}"
|
||
ENABLE_FFMPEG="${ENABLE_FFMPEG:-ON}"
|
||
ENABLE_MPP="${ENABLE_MPP:-ON}"
|
||
ENABLE_RGA="${ENABLE_RGA:-ON}"
|
||
ENABLE_ZLMEDIAKIT="${ENABLE_ZLMEDIAKIT:-ON}"
|
||
ENABLE_RKNN="${ENABLE_RKNN:-ON}"
|
||
|
||
show_help() {
|
||
echo "RK3588 Media Server 编译脚本"
|
||
echo ""
|
||
echo "用法: ./scripts/build.sh [选项]"
|
||
echo ""
|
||
echo "选项:"
|
||
echo " -h, --help 显示帮助信息"
|
||
echo " -c, --clean 清理构建目录"
|
||
echo " -j N 并行编译任务数(默认: $(nproc))"
|
||
echo " -a, --agent-only 仅编译 Agent"
|
||
echo " -m, --media-only 仅编译 Media Server"
|
||
echo " -d, --debug Debug 模式编译"
|
||
echo ""
|
||
echo "环境变量:"
|
||
echo " BUILD_TYPE 编译类型 (Release/Debug, 默认: Release)"
|
||
echo " BUILD_TESTS 编译测试 (ON/OFF, 默认: OFF)"
|
||
echo " BUILD_SAMPLES 编译示例 (ON/OFF, 默认: ON)"
|
||
echo " ENABLE_FFMPEG 启用 FFmpeg (ON/OFF, 默认: ON)"
|
||
echo " ENABLE_MPP 启用 MPP (ON/OFF, 默认: ON)"
|
||
echo " ENABLE_RGA 启用 RGA (ON/OFF, 默认: ON)"
|
||
echo " ENABLE_ZLMEDIAKIT 启用 ZLMediaKit (ON/OFF, 默认: ON)"
|
||
echo " ENABLE_RKNN 启用 RKNN (ON/OFF, 默认: ON)"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " ./scripts/build.sh # 完整编译"
|
||
echo " ./scripts/build.sh -c # 清理后编译"
|
||
echo " ./scripts/build.sh -j4 # 使用4线程编译"
|
||
echo " ./scripts/build.sh -m # 仅编译 Media Server"
|
||
echo " BUILD_TYPE=Debug ./scripts/build.sh # Debug 模式"
|
||
}
|
||
|
||
# 解析参数
|
||
CLEAN=0
|
||
JOBS=$(nproc)
|
||
BUILD_AGENT=1
|
||
BUILD_MEDIA=1
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
-h|--help)
|
||
show_help
|
||
exit 0
|
||
;;
|
||
-c|--clean)
|
||
CLEAN=1
|
||
shift
|
||
;;
|
||
-j)
|
||
if [[ -n "$2" && "$2" != -* ]]; then
|
||
JOBS="$2"
|
||
shift 2
|
||
else
|
||
echo -e "${RED}错误: -j 选项需要指定线程数${NC}"
|
||
exit 1
|
||
fi
|
||
;;
|
||
-j[0-9]*)
|
||
# 支持 -j4 这种格式
|
||
JOBS="${1#-j}"
|
||
shift
|
||
;;
|
||
-a|--agent-only)
|
||
BUILD_MEDIA=0
|
||
shift
|
||
;;
|
||
-m|--media-only)
|
||
BUILD_AGENT=0
|
||
shift
|
||
;;
|
||
-d|--debug)
|
||
BUILD_TYPE="Debug"
|
||
shift
|
||
;;
|
||
*)
|
||
echo -e "${RED}未知选项: $1${NC}"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||
echo -e "${BLUE}║ RK3588 Media Server 编译脚本 ║${NC}"
|
||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||
echo ""
|
||
|
||
cd "$PROJECT_DIR"
|
||
|
||
# 清理构建目录
|
||
if [ $CLEAN -eq 1 ]; then
|
||
echo -e "${YELLOW}[清理构建目录]${NC}"
|
||
rm -rf "$BUILD_DIR"
|
||
echo -e "${GREEN}✓${NC} 构建目录已清理"
|
||
echo ""
|
||
fi
|
||
|
||
# 编译 Media Server
|
||
if [ $BUILD_MEDIA -eq 1 ]; then
|
||
echo -e "${BLUE}[编译 Media Server]${NC}"
|
||
echo "编译选项:"
|
||
echo " BUILD_TYPE: $BUILD_TYPE"
|
||
echo " BUILD_TESTS: $BUILD_TESTS"
|
||
echo " BUILD_SAMPLES: $BUILD_SAMPLES"
|
||
echo " ENABLE_FFMPEG: $ENABLE_FFMPEG"
|
||
echo " ENABLE_MPP: $ENABLE_MPP"
|
||
echo " ENABLE_RGA: $ENABLE_RGA"
|
||
echo " ENABLE_ZLMEDIAKIT: $ENABLE_ZLMEDIAKIT"
|
||
echo " ENABLE_RKNN: $ENABLE_RKNN"
|
||
echo ""
|
||
|
||
# 配置 ZLMediaKit 路径
|
||
ZLMK_LIB_PATH="$PROJECT_DIR/third_party/rknpu2/examples/3rdparty/zlmediakit/aarch64/libmk_api.so"
|
||
ZLMK_INCLUDE_DIR="$PROJECT_DIR/third_party/rknpu2/examples/3rdparty/zlmediakit/include"
|
||
|
||
# 检查 ZLMediaKit 库是否存在
|
||
if [ ! -f "$ZLMK_LIB_PATH" ]; then
|
||
echo -e "${YELLOW}警告: ZLMediaKit 库未找到,禁用 ZLMediaKit 支持${NC}"
|
||
ENABLE_ZLMEDIAKIT="OFF"
|
||
fi
|
||
|
||
# 配置 CMake
|
||
echo -e "${CYAN}[配置 CMake]${NC}"
|
||
cmake -S . -B "$BUILD_DIR" \
|
||
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
||
-DBUILD_TESTS="$BUILD_TESTS" \
|
||
-DBUILD_SAMPLES="$BUILD_SAMPLES" \
|
||
-DRK3588_ENABLE_FFMPEG="$ENABLE_FFMPEG" \
|
||
-DRK3588_ENABLE_MPP="$ENABLE_MPP" \
|
||
-DRK3588_ENABLE_RGA="$ENABLE_RGA" \
|
||
-DRK3588_ENABLE_ZLMEDIAKIT="$ENABLE_ZLMEDIAKIT" \
|
||
-DRK3588_ENABLE_RKNN="$ENABLE_RKNN" \
|
||
-DRK_ZLMK_API_LIB_PATH="$ZLMK_LIB_PATH" \
|
||
-DRK_ZLMEDIAKIT_INCLUDE_DIR="$ZLMK_INCLUDE_DIR"
|
||
|
||
# 编译
|
||
echo -e "${CYAN}[编译中... 使用 $JOBS 线程]${NC}"
|
||
cmake --build "$BUILD_DIR" -j"$JOBS"
|
||
|
||
echo -e "${GREEN}✓${NC} Media Server 编译完成"
|
||
echo " 输出: $BUILD_DIR/media-server"
|
||
ls -lh "$BUILD_DIR/media-server"
|
||
echo ""
|
||
fi
|
||
|
||
# 编译 Agent
|
||
if [ $BUILD_AGENT -eq 1 ]; then
|
||
echo -e "${BLUE}[编译 Agent]${NC}"
|
||
|
||
AGENT_DIR="$PROJECT_DIR/agent"
|
||
if [ ! -d "$AGENT_DIR" ]; then
|
||
echo -e "${YELLOW}警告: Agent 目录不存在,跳过编译${NC}"
|
||
elif [ ! -f "$AGENT_DIR/go.mod" ]; then
|
||
echo -e "${YELLOW}警告: Agent 不是 Go 项目,跳过编译${NC}"
|
||
else
|
||
cd "$AGENT_DIR"
|
||
|
||
# 检查 go 是否安装
|
||
if ! command -v go &> /dev/null; then
|
||
echo -e "${RED}错误: Go 未安装,无法编译 Agent${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 编译 Agent
|
||
echo -e "${CYAN}[编译 Agent]${NC}"
|
||
go build -o rk3588-agent_linux_arm64 ./cmd/rk3588-agent
|
||
|
||
echo -e "${GREEN}✓${NC} Agent 编译完成"
|
||
echo " 输出: $AGENT_DIR/rk3588-agent_linux_arm64"
|
||
ls -lh "$AGENT_DIR/rk3588-agent_linux_arm64"
|
||
fi
|
||
echo ""
|
||
fi
|
||
|
||
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||
echo -e "${GREEN}║ 编译完成! ║${NC}"
|
||
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||
echo ""
|
||
echo "下一步:"
|
||
echo " 部署服务: sudo ./scripts/deploy.sh install"
|
||
echo " 查看状态: sudo ./scripts/deploy.sh status"
|