Merge branch 'feat/sdk-cross-build-bring-up'
This commit is contained in:
commit
e56c837f4f
1 file changed
+93
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
# build_sdk_host.sh — 在 Termux / 本机(非容器)跑通 build_sdk.sh 的环境适配层。
|
||||
#
|
||||
# build_sdk.sh 硬编码 ROOT="$HOME/Project/R3ProII"(从该路径取 .tools/zig-mipsel-cc 与
|
||||
# patch_v2/meow_launcherd/meow_font.a),并默认 AR=/usr/bin/ar、mktemp 落 /tmp。
|
||||
# Termux 上三者都不成立:工具链在 ~/.tools,meow_font.a 在仓库内,ar 在 $PREFIX/bin,
|
||||
# /tmp 不可写。本脚本不改 build_sdk.sh,而是临时布局一个同构 $HOME(.tools 与
|
||||
# patch_v2/meow_launcherd 用符号链接指向真实位置),再导出 AR/TMPDIR 后原样执行。
|
||||
#
|
||||
# 依赖(均不入库):
|
||||
# ~/.tools/zig-mipsel-cc zig 包装(--target=mipsel-linux-musleabi)
|
||||
# patch_v2/meow_launcherd/meow_font.a 字库静态库(*.a 被 gitignore,由 launcher 构建产出)
|
||||
# FreeType 2.14.3 源码:设 SDK_FREETYPE_SRC=<本地源目录> 直接用本地源;
|
||||
# 不设且 vendor/freetype-src 不存在时由 build_sdk.sh 走 savannah 下载。
|
||||
#
|
||||
# 用法:
|
||||
# bash patch_v2/sdk/build_sdk_host.sh # 构建 meow_ui.a
|
||||
# bash patch_v2/sdk/build_sdk_host.sh --verify # 构建后校验成员清单与 MIPS32r2
|
||||
#
|
||||
# 本机(OnePlus 15 / Termux, zig 0.17.0)2026-11-04 实测:31 个 OBJS + meow_font.o +
|
||||
# 43 个 freetype 对象 = 75 成员,全 MIPS32 rel2 / o32;meow_ui.a 5.4MB,冷构建约 55s;
|
||||
# hello_app 按文档链路(meow_ui.a + libz.a + -lpthread)链接成功且未拉入 freetype 成员。
|
||||
set -e
|
||||
|
||||
SDK_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SDK_DIR/../.." && pwd)"
|
||||
ZIGCC="${ZIGCC:-$HOME/.tools/zig-mipsel-cc}"
|
||||
LAUNCHER_DIR="${LAUNCHER_DIR:-$REPO_ROOT/patch_v2/meow_launcherd}"
|
||||
WORK="${SDK_HOST_WORK:-$HOME/.cache/meow-sdk-build}"
|
||||
|
||||
usage() {
|
||||
sed -n '2,22p' "$0" | sed 's/^# \{0,1\}//'
|
||||
}
|
||||
|
||||
MODE=build
|
||||
case "${1:-}" in
|
||||
"") ;;
|
||||
--verify) MODE=verify ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "未知参数: $1(只支持 --verify)" >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
[ -x "$ZIGCC" ] || { echo "缺少交叉编译器: $ZIGCC(可用 ZIGCC=... 覆盖)" >&2; exit 1; }
|
||||
[ -f "$LAUNCHER_DIR/meow_font.a" ] || {
|
||||
echo "缺少 $LAUNCHER_DIR/meow_font.a(*.a 被 gitignore,需先构建 launcher 或从备份取回)" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
AR_BIN="${AR:-$(command -v ar || true)}"
|
||||
[ -n "$AR_BIN" ] || { echo "找不到 ar(可 export AR=<path>)" >&2; exit 1; }
|
||||
|
||||
# 同构 $HOME:$ROOT/.tools/zig-mipsel-cc、$ROOT/patch_v2/meow_launcherd(含 meow_font.a)
|
||||
HOMELAYOUT="$WORK/home"
|
||||
mkdir -p "$HOMELAYOUT/Project/R3ProII/.tools" "$HOMELAYOUT/Project/R3ProII/patch_v2" "$WORK/tmp"
|
||||
ln -sfn "$ZIGCC" "$HOMELAYOUT/Project/R3ProII/.tools/zig-mipsel-cc"
|
||||
ln -sfn "$LAUNCHER_DIR" "$HOMELAYOUT/Project/R3ProII/patch_v2/meow_launcherd"
|
||||
|
||||
# Termux 的 /tmp 不可写;ar 是 $PREFIX/bin/ar 而非 /usr/bin/ar
|
||||
export TMPDIR="$WORK/tmp"
|
||||
export AR="$AR_BIN"
|
||||
export HOME="$HOMELAYOUT"
|
||||
|
||||
echo "== build_sdk.sh(ROOT=$HOMELAYOUT/Project/R3ProII, AR=$AR, TMPDIR=$TMPDIR)=="
|
||||
( cd "$SDK_DIR" && bash build_sdk.sh )
|
||||
|
||||
[ "$MODE" = verify ] || exit 0
|
||||
|
||||
# ---- 校验:成员清单 = 本次编译的 *.o(OBJS + meow_font.o)+ freetype 对象,且全 MIPS32r2 ----
|
||||
cd "$SDK_DIR"
|
||||
FT_LIB="vendor/freetype-build/libfreetype.a"
|
||||
[ -f "$FT_LIB" ] || { echo "缺少 $FT_LIB(FreeType 构建未完成)" >&2; exit 1; }
|
||||
|
||||
ACTUAL="$TMPDIR/verify-actual.txt"
|
||||
EXPECTED="$TMPDIR/verify-expected.txt"
|
||||
"$AR" t meow_ui.a | sort > "$ACTUAL"
|
||||
{ for f in *.o; do echo "$f"; done; "$AR" t "$FT_LIB"; } | sort > "$EXPECTED"
|
||||
if ! diff -u "$EXPECTED" "$ACTUAL"; then
|
||||
echo "成员清单不匹配(左=期望,右=meow_ui.a)" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "== 成员清单一致:$(wc -l < "$ACTUAL") 个(OBJS $(ls *.o | grep -vc meow_font) + meow_font.o + freetype $(ar t "$FT_LIB" | wc -l))=="
|
||||
|
||||
OBJ_DIR="$TMPDIR/verify-obj"
|
||||
rm -rf "$OBJ_DIR"; mkdir -p "$OBJ_DIR"
|
||||
( cd "$OBJ_DIR" && "$AR" x "$SDK_DIR/meow_ui.a" )
|
||||
BAD="$(file "$OBJ_DIR"/*.o | grep -v 'MIPS, MIPS32 rel2' || true)"
|
||||
if [ -n "$BAD" ]; then
|
||||
echo "以下对象不是 MIPS32r2:" >&2
|
||||
echo "$BAD" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "== 架构校验通过:$(ls "$OBJ_DIR"/*.o | wc -l) 个对象全为 ELF32 MIPS32 rel2(o32)=="
|
||||
ls -la meow_ui.a
|
||||
Reference in new issue
Block a user