safesight/edge/scripts/build.sh
tian 29d9ef5d0d refactor: 项目结构梳理 - 设备端/管理端对称布局
仓库结构:
  edge/     设备端(原根目录设备端代码整体移入)
  control/  管理端(清理后)
  docs/     文档(PRD 移入 design/)
  README.md 根导航(新增)

清理:
- control/.brainstorm 临时草稿删除
- control 根级重复文档(API表/PRD_04)并入 docs/design/
- control/plan.md -> docs/implementation/control-plan.md
- control/safesightd-linux-arm64 二进制取消版本控制(.gitignore)
- edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore)
- Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突)

更新:
- 根 README.md 导航、docs/README.md 文档索引
- deployment.md/检查表路径加 edge/ 前缀
- .gitignore 重写(edge/control 分区规则)
2026-08-02 11:39:54 +08:00

219 lines
7.9 KiB
Bash
Executable File
Raw Permalink 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
# 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主版本号来自 VERSION 文件,构建号自动生成)
echo -e "${CYAN}[配置 CMake]${NC}"
RK_GIT_SHA="$(git rev-parse --short HEAD 2>/dev/null || echo "nogit")"
RK_PROJECT_VERSION="$(cat "$PROJECT_DIR/VERSION" 2>/dev/null || echo "1.0.0")"
RK_BUILD_ID="$(date +%Y%m%d.%H%M%S)"
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" \
-DRK_GIT_SHA="${RK_GIT_SHA}" \
-DRK_PROJECT_VERSION="${RK_PROJECT_VERSION}" \
-DRK_BUILD_ID="${RK_BUILD_ID}"
# 编译
echo -e "${CYAN}[编译中... 使用 $JOBS 线程]${NC}"
cmake --build "$BUILD_DIR" -j"$JOBS"
echo -e "${GREEN}${NC} Media Server 编译完成"
echo " 输出: $BUILD_DIR/safesight-edge-server"
ls -lh "$BUILD_DIR/safesight-edge-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主版本号来自 VERSION 文件,构建号自动生成)
echo -e "${CYAN}[编译 Agent]${NC}"
AGENT_VERSION="$(cat "$PROJECT_DIR/VERSION" 2>/dev/null || echo "1.0.0")"
AGENT_GIT_SHA="$(git rev-parse --short HEAD 2>/dev/null || echo "nogit")"
AGENT_BUILD_ID="$(date +%Y%m%d.%H%M%S)"
go build -trimpath -ldflags "-s -w -X main.Version=${AGENT_VERSION} -X main.BuildID=${AGENT_BUILD_ID} -X main.BuildType=release -X main.GitSHA=${AGENT_GIT_SHA}" -o safesight-edge-agent ./cmd/safesight-agent
echo " 版本: V${AGENT_VERSION} (build ${AGENT_BUILD_ID}, git ${AGENT_GIT_SHA})"
echo -e "${GREEN}${NC} Agent 编译完成"
echo " 输出: $AGENT_DIR/safesight-edge-agent"
ls -lh "$AGENT_DIR/safesight-edge-agent"
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"