build(ncm): 宿主交叉适配层 + 全量测试补跑(M8)
- 新增 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 前后恒定)
This commit is contained in:
1 parent
2c69070cc4
commit
7d4906828d
5 files changed
+226
-10
No files matched your search
Executable
+149
@@ -0,0 +1,149 @@
|
||||
#!/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
|
||||
Reference in new issue
Block a user