Files
MeowOS-For-R3P2/patch_v2/ncm_app/build_ncm_sims.sh
T
AskaEth 2ca386973b test(ncm): M9 分类/登录门宿主单测(83 断言)+ 传输层归一 4 例 + REPORT §41
- bench/session_gate_sim.c(新):真实 core + ncm_http_request 桩,覆盖
  A 错误分类矩阵(-4/-5/-6/-17/裸 mbedtls vs -13/其它)、B HTTP 状态矩阵
  (401/403 vs 5xx/429 vs 3xx/4xx)、C 登录门 + 启动决策(无网→离线、无会话→扫码)、
  D 真实 ncm_api 状态/业务码映射(含 -460→SVC、301/302→AUTH)、
  E 真实 ncm_login_status_check/refresh 映射、F 会话密钥稳定性(换 MAC 仍可解、
  旧 MAC 密文可解且自动迁移)。83 PASS / 0 FAIL,0 真实请求。
- bench/http_truncate_sim.c:追加 4 例传输层归一(握手 fatal alert→NET、握手超时→TIMEOUT、
  读 fatal alert→NET、CA 失败→TLS),原 8 例截断守卫零回归(12 PASS)。
- build_ncm_sims.sh:window/search/plpage/apicache/cookie_refresh 链入 ncm_session.o
  (appstate/api/login 新依赖),新增 session_gate_sim 构建与运行。
- test_ncm_core.c:采用 M8 分支的 $TMPDIR 适配(Termux /tmp 不可写;合并时以 M8 为准)。
- 相关 sim 头注释同步链接命令(ncm_apicache.o/ncm_session.o)。
- REPORT §41:判定点调用链与行号、根因证据、实现、验证矩阵与诚实出入
  (mipsel/真机未跑;app.c 宿主不可编译的既有原因;403/-460 取舍)。

验证:test_ncm_core_host 139 PASS/0 FAIL;session_gate_sim 83 PASS;
http_truncate_sim 12 PASS;window/search/apicache/cookie_refresh sim 通过;
核心 12 TU + 应用 13 TU(-Wall -Wextra)0 warning。
2026-11-05 11:45:44 +08:00

165 lines
10 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
# bench/... 各 sim 的宿主编译+运行(命令取自各 sim 文件头注释;agent 308 内存瘦身回归用)。
# 在 ncm_app 目录下运行。
set -e
cd "$(dirname "$0")"
CC=gcc
INC="-DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd"
VINC="-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include -Ivendor/mbedtls/include"
# 部分 sim 的 include 路径写法用 vendor/(window/search),有的用 ../vendor/(bench 内部相对),
# 统一用绝对相对路径(项目根 pub)。这里按各 sim 头部原样拼接。
run_sim () { echo "===== $1 ====="; ./$1; echo "[$1 exit=$?]"; }
echo "==> build stream_sim"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c bench/stream_sim.c -o /tmp/ss.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/stream_src.c -o /tmp/ss_src.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/decoder.c -o /tmp/ss_dec.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c app/play/audio_out.c -o /tmp/ss_ao.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_cache.c -o /tmp/ss_cache.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_common.c -o /tmp/ss_common.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_http.c -o /tmp/ss_http.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include \
-c core/ncm_json.c -o /tmp/ss_json.o
gcc -O2 -c -Ivendor/minimp3 app/play/minimp3_impl.c -o /tmp/ss_mp3.o
gcc -O2 -c -Ivendor/dr_flac app/play/dr_flac_impl.c -o /tmp/ss_flac.o
gcc -O2 -o stream_sim /tmp/ss.o /tmp/ss_src.o /tmp/ss_dec.o /tmp/ss_ao.o /tmp/ss_cache.o /tmp/ss_mp3.o /tmp/ss_flac.o -lpthread -lm
run_sim stream_sim
echo "==> build player_flow_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/player_flow_sim.c -o /tmp/pf.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -Ivendor/minimp3 -Ivendor/dr_flac -Ivendor/mbedtls/include -c app/play/player_manager.c -o /tmp/pf_pm.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -c app/play/stream_src.c -o /tmp/pf_ss.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -c app/play/mem_watch.c -o /tmp/pf_mw.o # player_manager 引用(边播边监控取证,agent 32bit OOM)
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore \
-c ../sdk/meow_cachegov.c -o /tmp/pf_cg.o # player_manager 引 meow_cachegov_*(page-cache 治理 A)
gcc -O2 -Wl,--gc-sections -o player_flow_sim /tmp/pf.o /tmp/pf_pm.o /tmp/pf_ss.o /tmp/pf_mw.o /tmp/pf_cg.o -lpthread -lm
run_sim player_flow_sim
echo "==> build mem_watch_sim(边播边监控阈值/滞回/调度器,宿主桩驱动;agent 32bit OOM。"
echo " mem_release_sim 无累积断言在 bench/ 头注释手动构建:需预生成 24bit flac 素材)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-c bench/mem_watch_sim.c -o /tmp/mw.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -I../sdk -c app/play/mem_watch.c -o /tmp/mw_mod.o
gcc -O2 -o mem_watch_sim /tmp/mw.o /tmp/mw_mod.o -lpthread -lm
run_sim mem_watch_sim
echo "==> build window_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/window_sim.c -o /tmp/ws.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -c app/logic/appstate.c -o /tmp/ws_app.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -Ivendor/mbedtls/include -c app/logic/songmeta.c -o /tmp/ws_meta.o
gcc -O2 -Wl,--gc-sections -o window_sim /tmp/ws.o /tmp/ws_app.o /tmp/ws_meta.o \
out/core-host/ncm_apicache.o out/core-host/ncm_session.o -lpthread # appstate.c 调 ncm_apicache_*/ncm_gate_decide
run_sim window_sim
echo "==> build plpage_sim(歌单页懒加载分页 + 加载后列表刷新;真实 playlist.c 全链路 + 宿主 SDK,0 网络。"
echo " 依赖 out/host/sdk_*.o:若缺请先跑 build_ncm_host.sh)"
PPINC="-DMEOW_UI_HOST_TEST -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn -Ivendor/mbedtls/include -Ivendor/minimp3 -Ivendor/dr_flac"
for f in bench/plpage_sim.c app/ui/playlist.c app/logic/appstate.c app/logic/songmeta.c app/ui/chrome.c app/ui/ncm_colors.c; do
b=$(basename "$f" .c)
gcc -O2 -Wall -Wextra -ffunction-sections -fdata-sections $PPINC -c "$f" -o /tmp/pp_$b.o
done
gcc -O2 -Wl,--gc-sections -Wl,--wrap=meow_ui_paint_full -o plpage_sim \
/tmp/pp_plpage_sim.o /tmp/pp_playlist.o /tmp/pp_appstate.o /tmp/pp_songmeta.o /tmp/pp_chrome.o /tmp/pp_ncm_colors.o \
out/core-host/ncm_session.o \
out/host/sdk_*.o -lz -lpthread -lm
run_sim plpage_sim
echo "==> build search_sim"
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd -Icore -Ivendor/jsmn \
-c bench/search_sim.c -o /tmp/sh.o
gcc -O2 -ffunction-sections -DJSMN_HEADER -I. -I../sdk -I../meow_launcherd \
-Icore -Ivendor/jsmn -c app/logic/appstate.c -o /tmp/sh_app.o
gcc -O2 -Wl,--gc-sections -o search_sim /tmp/sh.o /tmp/sh_app.o \
out/core-host/ncm_apicache.o out/core-host/ncm_session.o -lpthread # appstate.c 调 ncm_apicache_*/ncm_gate_decide
run_sim search_sim
echo "==> build cache_evict_sim"
gcc -O2 -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include -c bench/cache_evict_sim.c -o /tmp/ce.o
gcc -O2 -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include -c core/ncm_cache.c -o /tmp/ce_cache.o
gcc -O2 -o cache_evict_sim /tmp/ce.o /tmp/ce_cache.o -lpthread
run_sim cache_evict_sim
echo "==> build apicache_sim (风控加固 §1 接口级响应缓存;0 真实网络——ncm_http 计数桩)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/apicache_sim.c -o /tmp/ac.o
# 真实 core(api/req/crypto/json/common/apicache)+ 网络层计数桩(apicache_sim 已含 ncm_http_request 桩,
# 故不链 ncm_http.o)+ jsmn + 宿主 mbedtls;核心对象从 out/core-host/*.o 取(含 ncm_apicache.o)。
gcc -O2 -o apicache_sim /tmp/ac.o \
$(ls out/core-host/ncm_api.o out/core-host/ncm_req.o out/core-host/ncm_crypto.o \
out/core-host/ncm_json.o out/core-host/ncm_common.o out/core-host/ncm_apicache.o \
out/core-host/ncm_session.o) \
out/core-host/jsmn_impl.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim apicache_sim
echo "==> build cookie_refresh_sim (§NEW 续期端点语义;0 真实网络——ncm_http 计数桩)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/cookie_refresh_sim.c -o /tmp/crs.o
gcc -O2 -o cookie_refresh_sim /tmp/crs.o \
$(ls out/core-host/ncm_login.o out/core-host/ncm_req.o out/core-host/ncm_crypto.o \
out/core-host/ncm_json.o out/core-host/ncm_common.o out/core-host/ncm_store.o \
out/core-host/ncm_session.o out/core-host/v_qrcodegen.o) \
out/core-host/jsmn_impl.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim cookie_refresh_sim
echo "==> build session_gate_sim(M9 离线会话保持/登录门:分类矩阵 + HTTP 状态/业务码映射 + 会话密钥稳定性;0 真实网络)"
mkdir -p out/chk
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/jsmn -Ivendor/mbedtls/include \
-c bench/session_gate_sim.c -o out/chk/sg.o
gcc -O2 -o session_gate_sim out/chk/sg.o \
$(ls out/core-host/ncm_api.o out/core-host/ncm_login.o out/core-host/ncm_req.o \
out/core-host/ncm_crypto.o out/core-host/ncm_json.o out/core-host/ncm_common.o \
out/core-host/ncm_store.o out/core-host/ncm_apicache.o out/core-host/ncm_session.o) \
out/core-host/jsmn_impl.o out/core-host/v_qrcodegen.o \
-Lout/mbedtls/host -lmbedtls -lmbedx509 -lmbedcrypto -lpthread -lm
run_sim session_gate_sim
echo "==> build account_cookie_sim (§NEW 临期续期决策;真实 account.c + 外围桩,0 真实网络)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Iapp -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/mbedtls/include \
-c app/logic/account.c -o /tmp/acs_account.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Iapp -Icore -I../sdk -I../meow_launcherd \
-Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/mbedtls/include \
-c bench/account_cookie_sim.c -o /tmp/acs.o
gcc -O2 -o account_cookie_sim /tmp/acs.o /tmp/acs_account.o -lpthread -lm
run_sim account_cookie_sim
echo "==> build http_truncate_sim (ncm_http 截断守卫宿主测试;mock mbedtls 传输层,0 真实网络)"
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-c bench/http_truncate_sim.c -o /tmp/t.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-ffunction-sections -c core/ncm_http.c -o /tmp/t_http.o
gcc -O2 -Wall -Wextra -DJSMN_HEADER -I. -Icore -Ivendor/mbedtls/include \
-ffunction-sections -c core/ncm_common.c -o /tmp/t_common.o
gcc -Wl,--gc-sections -o http_truncate_sim /tmp/t.o /tmp/t_http.o /tmp/t_common.o
run_sim http_truncate_sim
echo "===== all sims done ====="