215 lines
7.8 KiB
Bash
Executable File
215 lines
7.8 KiB
Bash
Executable File
#!/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系统:0,3.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"
|
||
|
||
# 让 pkg‑config 查找目标库
|
||
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'
|
||
#
|
||
#
|