Files
MeowOS-For-R3P2/patch_v2/ncm_app/build_ncm_host.sh
T
AskaEth 10690bc348 fix(ncm §31): 修两处 UI 数据竞态——返回首页行空白(staging发布) + 进第二个歌单显示上一歌单(换歌单清窗)
A. 返回首页各行 2~3s 空白:appstate_load_playlists 就地 memset(g_st.playlists[])
   与 home_src2 无锁逐行绑定竞态,刷新期间 playlist_count 保留旧值 → UI 读清零行。
   照搬 s_build[] staging 范式:网络落 s_pls[] → 成功后锁内原子发布(拷回+更新count),
   失败保留旧快照(断网离线浏览)。绝不就地清零 UI 可见数组。

B. 进第二个歌单显示上一歌单:playlist_open/refresh 同步路径不调 appstate_playlist_reset,
   pl_apply(1) 绑到上一歌单残留窗口(track_ids_count/songs)。
   新增窗口归属(歌单 id 唯一标识, 对搜索歌单同样成立): worker 首屏发布后
   appstate_playlist_window_set;refresh 目标≠归属(窗口is) → 同步 reset 再 pl_apply。
   同歌单手动刷新(id 同)保留旧内容(stale-while-revalidate)。

宿主回归:playlist_race_sim(新 F 并发读无清零态/G 开A→开B 不串)、window/search/
cache_evict/player_flow/stream_sim、test_ncm_core 宿主+mipsel 全 PASS;
build_ncm.sh -Wall -Wextra 0 warning;0 真实请求;未部署。
2026-09-02 03:03:48 +08:00

54 lines
2.8 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
# build_ncm_host.sh — 宿主编译 dev.player.ncm 真实页面(离屏 480x720),用于 MEOW_UI_DUMP 截图自查。
# 思路:gcc 编 SDK 源码(-DMEOW_UI_HOST_TEST, meow_font 打桩 meow_ui_global/render) + 应用源码 +
# 宿主核心库对象(out/core-host/*.o) + 宿主 mbedtls libs。
# 运行:NCM_PAGE=home MEOW_UI_DUMP=/tmp/home.ppm ./ncm_host
cd "$(dirname "$0")"
ROOT="$HOME/Project/R3ProII"
OUT="$PWD/out"
mkdir -p "$OUT/host"
CC_HOST=${CC_HOST:-gcc}
SDK_DIR="$ROOT/patch_v2/sdk"
MBED="$OUT/mbedtls/host"
INC="-I. -I../sdk -I../meow_launcherd -Icore \
-I$SDK_DIR -I$ROOT/patch_v2/meow_launcherd \
-Ivendor/mbedtls/include -Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/minimp3 -Ivendor/dr_flac"
echo "==> host SDK objects"
SDK_SRC="meow_ui_gfx meow_ui_sys meow_ui_theme meow_ui_vol meow_ui_log meow_ui_widget \
meow_ui_input meow_ui_activity meow_ui_dialog meow_ui_ime meow_ui_draw meow_ui_view \
meow_ui_img meow_ui_config meow_ui_nav meow_ui_media meow_notify_ipc meow_pinyin \
meow_ui_audio meow_ui_anim meow_ui_box meow_ui_scroll meow_ui_str"
for f in $SDK_SRC; do
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -I"$SDK_DIR" -I"$ROOT/patch_v2/meow_launcherd" \
"$SDK_DIR/$f.c" -o "$OUT/host/sdk_$f.o" || { echo "sdk $f FAILED"; exit 1; }
done
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -I"$SDK_DIR" "$SDK_DIR/stb_image.c" -o "$OUT/host/sdk_stb_image.o" || exit 1
$CC_HOST -O2 -c -I"$SDK_DIR" -I"$ROOT/patch_v2/meow_launcherd" "$SDK_DIR/test_host_stub.c" -o "$OUT/host/sdk_stub.o" || exit 1
echo "==> host app sources (exclude app.c: has main + g_st; test provides them)"
APP_SRC="app/ui/login.c app/ui/home.c app/ui/playlist.c app/ui/player.c \
app/ui/settings.c app/ui/search.c app/ui/ncm_colors.c app/ui/chrome.c \
app/logic/appstate.c app/logic/lyric.c app/logic/songmeta.c \
app/logic/cover.c app/logic/account.c app/play/player_manager.c app/play/audio_out.c \
app/play/ipc_media.c app/play/decoder.c app/play/stream_src.c app/play/minimp3_impl.c"
for f in $APP_SRC; do
b=$(basename "$f" .c)
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -DJSMN_HEADER $INC "$f" -o "$OUT/host/$b.o" || { echo "app $f FAILED"; exit 1; }
done
# dr_flac 实现 TU:vendor 豁免告警(同 minimp3 口径),放 strict 循环外
$CC_HOST -O2 -c -Ivendor/dr_flac app/play/dr_flac_impl.c -o "$OUT/host/dr_flac_impl.o" || { echo "dr_flac_impl FAILED"; exit 1; }
$CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -DJSMN_HEADER $INC app/test/test_ncm_app.c -o "$OUT/host/app_test.o" || exit 1
echo "==> link ncm_host"
$CC_HOST -O2 -o ncm_host \
"$OUT/host"/*.o \
out/core-host/*.o \
-L"$MBED" -lmbedtls -lmbedx509 -lmbedcrypto \
-lz -lpthread -lm
ls -la ncm_host
file ncm_host
echo "run: NCM_PAGE=home MEOW_UI_DUMP=/tmp/home.ppm ./ncm_host"