- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘) - OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复 - ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640 - 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫) - 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
70 lines
3.4 KiB
Bash
Executable File
70 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
||
# build_sdk.sh — 构建 meow_ui.a(mipsel 静态库,含 meow_font.o 内联打包,
|
||
# 应用只需链 meow_ui.a + libz.a + -lpthread)。
|
||
#
|
||
# §10.1 矢量字:FreeType vendor 进 sdk/vendor/(gitignore),本脚本可复现「拉取 + 裁剪构建」:
|
||
# 禁 zlib/png/brotli/bzip2/harfbuzz(-DFT_DISABLE_*),静态 musl(zig-mipsel-cc);
|
||
# 产物 sdk/vendor/freetype-build/libfreetype.a,其 .o 编入 meow_ui.a —— 应用只链 meow_ui.a
|
||
# 即获得矢量字能力;不调 meow_ft_* 的 App 链接器不会拉取 freetype 成员(零增量)。
|
||
set -e
|
||
ROOT="$HOME/Project/R3ProII"
|
||
cd "$(dirname "$0")"
|
||
CC="$ROOT/.tools/zig-mipsel-cc"
|
||
AR="${AR:-/usr/bin/ar}" # 系统 GNU ar 即可归档 mipsel ELF 对象(架构无关)
|
||
|
||
# ---------- 0) FreeType vendor 拉取 + 裁剪构建(可复现) ----------
|
||
FT_VER="2.14.3"
|
||
FT_SRC="vendor/freetype-src"
|
||
FT_BUILD="vendor/freetype-build"
|
||
fetch_freetype() {
|
||
if [ -n "$SDK_FREETYPE_SRC" ] && [ -f "$SDK_FREETYPE_SRC/CMakeLists.txt" ]; then
|
||
rm -rf "$FT_SRC"; cp -r "$SDK_FREETYPE_SRC" "$FT_SRC"
|
||
elif [ ! -d "$FT_SRC" ]; then
|
||
mkdir -p vendor
|
||
( cd vendor && curl -fsSL -o ft.tar.xz \
|
||
"https://download.savannah.gnu.org/releases/freetype/freetype-$FT_VER.tar.xz" \
|
||
&& mkdir -p "$FT_SRC" && tar xf ft.tar.xz -C "$FT_SRC" --strip-components=1 && rm ft.tar.xz )
|
||
fi
|
||
[ -f "$FT_SRC/CMakeLists.txt" ] || { echo "freetype 源码不可用"; exit 1; }
|
||
}
|
||
fetch_freetype
|
||
if [ ! -f "$FT_BUILD/libfreetype.a" ] || [ -n "$FORCE_FT" ]; then
|
||
rm -rf "$FT_BUILD"
|
||
cmake -S "$FT_SRC" -B "$FT_BUILD" -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER="$CC" \
|
||
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF \
|
||
-DFT_DISABLE_ZLIB=TRUE -DFT_DISABLE_BZIP2=TRUE -DFT_DISABLE_PNG=TRUE -DFT_DISABLE_HARFBUZZ=TRUE -DFT_DISABLE_BROTLI=TRUE >/dev/null
|
||
cmake --build "$FT_BUILD" -j"$(nproc)" >/dev/null 2>&1
|
||
fi
|
||
FT_INCS="-I$FT_BUILD -I$FT_BUILD/include -I$FT_SRC/include"
|
||
|
||
rm -f meow_ui.a *.o
|
||
|
||
# -I../meow_launcherd:meow_notify_ipc.c 复用共享协议头 meow_ipc.h(同一份、杜绝两端漂移)
|
||
OBJS="meow_ui_gfx meow_ui_log meow_ui_notify meow_notify_ipc meow_ui_img meow_ui_widget meow_ui_input meow_ui_theme meow_ui_ime meow_pinyin meow_ui_sys meow_ui_vol meow_ui_activity meow_ui_global meow_ui_dialog meow_ui_config meow_ui_draw meow_ui_view meow_ui_nav meow_ui_media meow_ui_audio stb_image meow_ui_box meow_ui_anim meow_ui_scroll meow_lazygrid meow_select meow_ui_str meow_ui_ft meow_net_ipc meow_cachegov"
|
||
CFLAGS="-Os -static -I$ROOT/patch_v2/meow_launcherd"
|
||
for f in $OBJS; do
|
||
echo "== cc $f =="
|
||
"$CC" $CFLAGS $FT_INCS -c "$f.c" -o "$f.o"
|
||
done
|
||
|
||
# meow_font.o(复用 launcher 字库,打进 meow_ui.a → 应用只链一个库)
|
||
TMP="$(mktemp -d)"
|
||
( cd "$TMP" && "$AR" x "$ROOT/patch_v2/meow_launcherd/meow_font.a" && ls *.o )
|
||
cp "$TMP"/*.o meow_font.o 2>/dev/null || { echo "meow_font extract failed"; rm -rf "$TMP"; exit 1; }
|
||
rm -rf "$TMP"
|
||
|
||
rm -f meow_ui.a
|
||
for f in $OBJS; do "$AR" rcs meow_ui.a "$f.o"; done
|
||
"$AR" rcs meow_ui.a meow_font.o
|
||
|
||
# FreeType .o 编入 meow_ui.a(App 不调 meow_ft_* → 链接器不拉取,零增量)。
|
||
FT_LIB="$PWD/$FT_BUILD/libfreetype.a" # 绝对路径(待会 cd 进临时目录,相对路径会失效)
|
||
FT_O="$(mktemp -d)"
|
||
( cd "$FT_O" && "$AR" x "$FT_LIB" && ls *.o >/dev/null )
|
||
for o in "$FT_O"/*.o; do "$AR" rcs meow_ui.a "$o"; done
|
||
rm -rf "$FT_O"
|
||
|
||
echo "== meow_ui.a =="
|
||
ls -la meow_ui.a
|
||
"$AR" t meow_ui.a
|