10.1_demo/build.sh

215 lines
7.8 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
set -e
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
TOOLCHAIN_DIR="$ROOT_DIR/../arm-molv2-linux-uclibcgnueabi"
SYSROOT="$TOOLCHAIN_DIR/arm-molv2-linux-uclibcgnueabi/sysroot"
CROSS="$TOOLCHAIN_DIR/bin/arm-molv2-linux-uclibcgnueabi"
VERSION="1.0.84"
#协议版本 3.2系统03.3系统为 1
PROTOCOL_VERSION=0
DISP_COUNT=1 # 显示器数量
TAG_TYPE="70" # 价签类型
# 根据DISP_COUNT设置APP_ID
if [[ "$DISP_COUNT" == "1" ]]; then
APP_ID="com.eplayer.linux_single.00.$TAG_TYPE"
FIRMWARE_ID="com.eplayer.firmware.linux_single.00.$TAG_TYPE"
else
APP_ID="com.eplayer.linux_dual.00.$TAG_TYPE"
FIRMWARE_ID="com.eplayer.firmware.linux_dual.00.$TAG_TYPE"
fi
# 默认 Release如需 Debug 直接 ./build.sh Debug
BUILD_TYPE="${1:-Release}"
BUILD_DIR="$ROOT_DIR/build-arm-$BUILD_TYPE"
TOOLCHAIN_FILE="$ROOT_DIR/toolchain-arm.cmake"
# -----------------------------------------------------------------------------
# 1. 环境检测
# -----------------------------------------------------------------------------
if [[ ! -d "$TOOLCHAIN_DIR/bin" ]]; then
echo "[ERR] 交叉工具链目录不存在:$TOOLCHAIN_DIR" >&2
exit 1
fi
if [[ ! -d "$SYSROOT" ]]; then
echo "[ERR] sysroot 目录不存在:$SYSROOT" >&2
exit 1
fi
echo "[INF] 使用工具链:$TOOLCHAIN_DIR"
echo "[INF] 使用 sysroot$SYSROOT"
echo "[INF] 构建类型:$BUILD_TYPE"
echo "------------------------------------------------------------"
# -----------------------------------------------------------------------------
# 2. PATH / pkg-config 环境
# -----------------------------------------------------------------------------
export PATH="$TOOLCHAIN_DIR/bin:$PATH"
# 让 pkgconfig 查找目标库
export PKG_CONFIG_DIR=
export PKG_CONFIG_LIBDIR="$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/share/pkgconfig"
export PKG_CONFIG_SYSROOT_DIR="$SYSROOT"
# -----------------------------------------------------------------------------
# 3. 自动生成 toolchain 文件(若不存在)
# -----------------------------------------------------------------------------
if [[ ! -f "$TOOLCHAIN_FILE" ]]; then
cat >"$TOOLCHAIN_FILE" <<EOF
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CROSS ${CROSS_PREFIX})
set(CMAKE_C_COMPILER \${CROSS}-gcc)
set(CMAKE_CXX_COMPILER \${CROSS}-g++)
set(CMAKE_SYSROOT \$ENV{SYSROOT})
set(CMAKE_FIND_ROOT_PATH \${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# 如需静态单文件可执行,取消下一行注释
# set(CMAKE_EXE_LINKER_FLAGS "\${CMAKE_EXE_LINKER_FLAGS} -static")
set(CMAKE_SKIP_RPATH TRUE)
EOF
echo "[INF] 已生成 toolchain 文件:$TOOLCHAIN_FILE"
fi
# -----------------------------------------------------------------------------
# 4. 配置 & 构建
# -----------------------------------------------------------------------------
echo "[INF] 配置阶段CMake..."
if [[ "$BUILD_TYPE" == "Debug" ]]; then
APP_VERSION=$VERSION PROTOCOL_VERSION=$PROTOCOL_VERSION DISP_COUNT=$DISP_COUNT TAG_TYPE=$TAG_TYPE APP_ID=$APP_ID FIRMWARE_ID=$FIRMWARE_ID cmake -S "$ROOT_DIR" -B "$BUILD_DIR" \
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DCMAKE_C_FLAGS="-g -ggdb" \
-DCMAKE_CXX_FLAGS="-g -ggdb"
else
APP_VERSION=$VERSION PROTOCOL_VERSION=$PROTOCOL_VERSION DISP_COUNT=$DISP_COUNT TAG_TYPE=$TAG_TYPE APP_ID=$APP_ID FIRMWARE_ID=$FIRMWARE_ID cmake -S "$ROOT_DIR" -B "$BUILD_DIR" \
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
-DCMAKE_BUILD_TYPE="$BUILD_TYPE"
fi
echo "[INF] 编译阶段make/Ninja..."
cmake --build "$BUILD_DIR" -j"$(nproc)"
# -----------------------------------------------------------------------------
# 5. 结果提示
# -----------------------------------------------------------------------------
BIN_PATH="$ROOT_DIR/bin/e_player"
if [[ -f "$BIN_PATH" ]]; then
echo "------------------------------------------------------------"
echo "[OK] 构建完成!可执行文件位置:"
echo " $BIN_PATH"
file "$BIN_PATH"
# 只有 Debug 构建才发布到设备
if [[ "$BUILD_TYPE" == "Debug" ]]; then
echo "发布到开发板:"
# 检查 adb 是否可用
if ! command -v adb &> /dev/null; then
echo "[ERROR] adb 命令未找到,请安装 Android SDK 或配置 PATH"
exit 1
fi
# 检查设备是否连接
if ! adb devices | grep -v "List of devices" | grep -q "device"; then
echo "[ERROR] 未找到已连接的 ADB 设备"
exit 1
fi
# 清理旧文件并推送新文件
echo "正在删除旧版本..."
if [[ "$DISP_COUNT" -eq 1 ]]; then
adb shell rm -rf /data/bin/eplayer_single
echo "正在上传新版本..."
adb push "$BIN_PATH" /data/bin/eplayer_single
# 设置可执行权限
adb shell chmod +x /data/bin/eplayer_single
else
adb shell rm -rf /data/bin/eplayer_dual
echo "正在上传新版本..."
adb push "$BIN_PATH" /data/bin/eplayer_dual
# 设置可执行权限
adb shell chmod +x /data/bin/eplayer_dual
fi
echo "上传完成"
else
echo "[INFO] Release 构建,准备打包发布版本..."
# 创建临时目录用于打包
TEMP_DIR=$(mktemp -d)
if [[ ! "$TEMP_DIR" || ! -d "$TEMP_DIR" ]]; then
echo "[ERROR] 无法创建临时目录"
exit 1
fi
# 复制文件到临时目录
cp "$BIN_PATH" "$TEMP_DIR/e_player"
# 创建版本文件
echo "Version: $VERSION" > "$TEMP_DIR/version.txt"
echo "DeviceType: $TAG_TYPE" >> "$TEMP_DIR/version.txt"
echo "APPID: $APP_ID" >> "$TEMP_DIR/version.txt"
echo "PROTOCOL_VERSION: $PROTOCOL_VERSION" >> "$TEMP_DIR/version.txt"
echo "BuildDate: $(date '+%Y-%m-%d %H:%M:%S')" >> "$TEMP_DIR/version.txt"
# 打包文件
# 如果DISP_COUNT=1 则文件名为e_player-single-$VERSION.tar
# 如果DISP_COUNT=2 则文件名为e_player-dual-$VERSION.tar
if [[ "$DISP_COUNT" -eq 1 ]]; then
#命名规则e_player-{single或dual}-{00(设备型号)}-{TAG_TYPE}-{VERSION}.tar
RELEASE_FILE="$ROOT_DIR/release/e_player-single-00-$TAG_TYPE-$VERSION.tar"
# 删除旧版本的发布包文件
#echo "正在删除旧版本发布包..."
#rm -rf "$ROOT_DIR/release/e_player-single-*"
#rm -f "$ROOT_DIR/release/e_player-single-*.tar" "$ROOT_DIR/release/e_player-single-*.tar.md5"
else
RELEASE_FILE="$ROOT_DIR/release/e_player-dual-00-$TAG_TYPE-$VERSION.tar"
# 删除旧版本的发布包文件
#echo "正在删除旧版本发布包..."
#rm -f "$ROOT_DIR/release/e_player-dual-*.tar" "$ROOT_DIR/release/e_player-dual-*.tar.md5"
fi
#RELEASE_FILE="$ROOT_DIR/release/e_player-$VERSION.tar"
mkdir -p "$ROOT_DIR/release"
echo "正在创建发布包: $RELEASE_FILE"
tar -cvf "$RELEASE_FILE" -C "$TEMP_DIR" .
# 计算MD5校验值
md5sum "$RELEASE_FILE" > "$RELEASE_FILE.md5"
# 清理临时目录
rm -rf "$TEMP_DIR"
echo "发布包创建完成:"
echo " - 主文件: $RELEASE_FILE"
echo " - 校验文件: $RELEASE_FILE.md5"
fi
else
echo "[WARN] 构建流程结束,但未在预期路径找到可执行文件。"
fi
#拷贝 / 打包 / OTA
#
#./build.sh # Release
#./build.sh Debug # Debug
#scp build-arm/bin/e_player root@TARGET_IP:/usr/bin/
#ssh root@TARGET_IP 'chmod +x /usr/bin/e_player && sync'
#
#