- 新增 build_ncm_cross_host.sh:同构 HOME 复用容器脚本,串起 sdk/vendor/host-mbedtls/core/tests/ncm - libs_common.sh 工具链路径改为 MEOW_R3PROII_ROOT/$HOME 可覆盖,容器默认不变 - build_mbedtls.sh 递归清理 library/ 与 3rdparty/ 旧对象,修宿主/mipsel 混架构归档 - test_ncm_core.c 改用 $TMPDIR,Termux /tmp 不可写不再导致 store/cache/tag 用例失败 - REPORT §40:构建/测试/热更结果(ncm md5 1bbd2a55…,Music du 前后恒定)
150 lines
5.8 KiB
Bash
Executable File
150 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# build_ncm_cross_host.sh — 在 Termux/本机(非容器)跑通 ncm 的容器交叉链路。
|
||
#
|
||
# 原构建脚本假定容器布局:build_ncm.sh 用 $HOME/Project/R3ProII/.tools 与
|
||
# .tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf(libz.a);libs_common.sh 指向
|
||
# /home/Aska/...;build_sdk.sh 从 meow_launcherd 取 meow_font.a。本脚本不改这些脚本,
|
||
# 而是临时布局一个同构 $HOME(符号链接到本机真实工具链/仓库),再原样执行:
|
||
# 1) .tools/zig-mipsel-cc -> ~/.tools/zig-mipsel-cc
|
||
# 2) .tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf
|
||
# -> ~/.tools/mipsel-linux-musleabi-sysroot(含 lib/libz.a)
|
||
# 3) .tools/zig-env/bin/zig -> 包装器:`zig ar` 转系统 GNU ar(架构无关)
|
||
# 4) launcher 镜像目录:仓库 meow_launcherd 头文件 + 取回的 meow_font.a(*.a 不入库)
|
||
#
|
||
# 依赖(均不入库):
|
||
# ~/.tools/zig-mipsel-cc
|
||
# ~/.tools/mipsel-linux-musleabi-sysroot
|
||
# patch_v2/sdk/vendor/freetype-src FreeType 2.14.3 源
|
||
# patch_v2/ncm_app/vendor/{mbedtls,jsmn,minimp3,qrcodegen,dr_flac}
|
||
# meow_font.a:默认找 patch_v2/meow_launcherd/meow_font.a,否则 <WORK>/launcher/meow_font.a
|
||
#
|
||
# 用法:
|
||
# bash patch_v2/ncm_app/build_ncm_cross_host.sh [all|prep|sdk|vendor|host-mbedtls|core|tests|ncm]
|
||
# 缺省 all;各步日志写 <WORK>/logs/<step>.log(WORK 默认 ~/.cache/meow-ncm-build)。
|
||
set -e
|
||
|
||
SELF_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
REPO_ROOT="$(cd "$SELF_DIR/../.." && pwd)"
|
||
WORK="${NCM_CROSS_WORK:-$HOME/.cache/meow-ncm-build}"
|
||
LOGS="$WORK/logs"
|
||
HOMELAYOUT="$WORK/home"
|
||
PROJ="$HOMELAYOUT/Project/R3ProII"
|
||
TOOLS="${MEOW_TOOLS_DIR:-$HOME/.tools}"
|
||
SYSROOT="${MEOW_SYSROOT:-$TOOLS/mipsel-linux-musleabi-sysroot}"
|
||
FONT_A="${MEOW_FONT_A:-$REPO_ROOT/patch_v2/meow_launcherd/meow_font.a}"
|
||
|
||
usage() { sed -n '2,26p' "$0" | sed 's/^# \{0,1\}//'; }
|
||
|
||
prep() {
|
||
mkdir -p "$PROJ/.tools/mipsel-linux-muslsf-cross" "$PROJ/.tools/zig-env/bin" "$LOGS" "$WORK/tmp"
|
||
ln -sfn "$TOOLS/zig-mipsel-cc" "$PROJ/.tools/zig-mipsel-cc"
|
||
ln -sfn "$SYSROOT" "$PROJ/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf"
|
||
cat > "$PROJ/.tools/zig-env/bin/zig" <<'EOF'
|
||
#!/bin/sh
|
||
[ "$1" = ar ] && shift
|
||
exec ar "$@"
|
||
EOF
|
||
chmod +x "$PROJ/.tools/zig-env/bin/zig"
|
||
|
||
mkdir -p "$WORK/launcher-mirror"
|
||
for f in "$REPO_ROOT"/patch_v2/meow_launcherd/*; do
|
||
b="$(basename "$f")"
|
||
[ "$b" = meow_font.a ] && continue
|
||
ln -sfn "$f" "$WORK/launcher-mirror/$b"
|
||
done
|
||
if [ -f "$FONT_A" ]; then
|
||
ln -sfn "$FONT_A" "$WORK/launcher-mirror/meow_font.a"
|
||
elif [ -f "$WORK/launcher/meow_font.a" ]; then
|
||
ln -sfn "$WORK/launcher/meow_font.a" "$WORK/launcher-mirror/meow_font.a"
|
||
else
|
||
echo "缺少 meow_font.a(放 patch_v2/meow_launcherd/ 或 $WORK/launcher/,或设 MEOW_FONT_A)" >&2
|
||
exit 1
|
||
fi
|
||
|
||
[ -x "$PROJ/.tools/zig-mipsel-cc" ] || { echo "缺少交叉编译器: $TOOLS/zig-mipsel-cc" >&2; exit 1; }
|
||
[ -f "$PROJ/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf/lib/libz.a" ] || {
|
||
echo "缺少 sysroot libz.a: $SYSROOT/lib/libz.a" >&2; exit 1; }
|
||
echo "== prep OK:$HOMELAYOUT =="
|
||
}
|
||
|
||
# 各步共用:同构 HOME + 显式 CC/AR(libs_common.sh 支持覆盖)+ Termux 可写 TMPDIR
|
||
export HOME="$HOMELAYOUT"
|
||
export CC_MIPS="$PROJ/.tools/zig-mipsel-cc"
|
||
export AR_MIPS="$(command -v ar)"
|
||
export TMPDIR="$WORK/tmp"
|
||
|
||
run() {
|
||
local name="$1"; shift
|
||
echo "== [$name] $*"
|
||
set +e
|
||
( "$@" ) 2>&1 | tee "$LOGS/$name.log"
|
||
local rc=${PIPESTATUS[0]}
|
||
set -e
|
||
[ "$rc" -eq 0 ] || { echo "[FAIL] $name rc=$rc(日志 $LOGS/$name.log)" >&2; exit "$rc"; }
|
||
}
|
||
|
||
step_sdk() {
|
||
run sdk env LAUNCHER_DIR="$WORK/launcher-mirror" bash "$REPO_ROOT/patch_v2/sdk/build_sdk_host.sh" --verify
|
||
}
|
||
|
||
step_vendor() {
|
||
cd "$SELF_DIR"
|
||
run vendor bash ./build_mbedtls.sh
|
||
}
|
||
|
||
# 宿主 mbedtls:复用 vendor 步骤已裁剪并应用的 config,gcc 重编同一套库给宿主测试。
|
||
step_host_mbedtls() {
|
||
local MB="$SELF_DIR/vendor/mbedtls" BM="$SELF_DIR/out/mbedtls/host"
|
||
[ -f "$MB/include/mbedtls/mbedtls_config.h" ] || { echo "先跑 vendor 步骤(config 未就绪)" >&2; exit 1; }
|
||
# everest/ p256-m 的对象在 3rdparty/ 下(library/ 里只有 *.c 引子);只删 library/*.o 会留下
|
||
# 上一轮的 mipsel 对象,归档后与宿主对象混架构(ld: incompatible with aarch64linux)。
|
||
find "$MB/library" "$MB/3rdparty" -name '*.o' -delete
|
||
find "$MB/library" "$MB/3rdparty" -name '*.a' -delete
|
||
rm -rf "$BM"; mkdir -p "$BM"
|
||
run host-mbedtls make -C "$MB" lib CC=gcc AR=ar \
|
||
CFLAGS="-O2 -Wno-unused-parameter -fno-stack-protector"
|
||
for a in libmbedcrypto.a libmbedx509.a libmbedtls.a; do
|
||
[ -s "$MB/library/$a" ] && cp "$MB/library/$a" "$BM/$a"
|
||
done
|
||
ls -la "$BM"
|
||
}
|
||
|
||
step_core() {
|
||
cd "$SELF_DIR"
|
||
run core bash ./build_core.sh
|
||
local DATA="$WORK/ncm_test"
|
||
rm -rf "$DATA"; mkdir -p "$DATA"
|
||
run core-test ./test/test_ncm_core_host "$DATA"
|
||
}
|
||
|
||
step_tests() {
|
||
cd "$SELF_DIR"
|
||
run tag-build bash ./build_ncm_tag_host.sh
|
||
run tag-test ./test/test_ncm_tag_host
|
||
run cache-build bash ./build_ncm_cache_host.sh
|
||
run cache-test ./test/test_ncm_cache_host
|
||
}
|
||
|
||
step_ncm() {
|
||
cd "$SELF_DIR"
|
||
run ncm bash ./build_ncm.sh
|
||
# 只匹配编译器告警本身;build_ncm.sh 结尾的 "0 warning enforced" 总结不是告警。
|
||
if grep -i "warning:" "$LOGS/ncm.log"; then
|
||
echo "[FAIL] ncm 构建出现告警(要求 0 warning)" >&2
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
case "${1:-all}" in
|
||
prep) prep ;;
|
||
sdk) prep; step_sdk ;;
|
||
vendor) prep; step_vendor ;;
|
||
host-mbedtls) prep; step_host_mbedtls ;;
|
||
core) prep; step_core ;;
|
||
tests) prep; step_tests ;;
|
||
ncm) prep; step_ncm ;;
|
||
all) prep; step_sdk; step_vendor; step_host_mbedtls; step_core; step_tests; step_ncm ;;
|
||
-h|--help) usage ;;
|
||
*) echo "未知步骤: $1(all|prep|sdk|vendor|host-mbedtls|core|tests|ncm)" >&2; exit 2 ;;
|
||
esac
|