#!/bin/bash # build_netmgrd.sh — meow_netmgrd 交叉编译(mipsel 静态)+ 宿主编译可选。 # # 目标:R3 Pro II / MeowOS(mipsel-linux-muslsf,静态)。netmgrd 仅 POSIX + Linux 基接口 # (复用 meow_ipc.h 帧格式 + m_net_* 负载,无 launcher 依赖),单文件满足「固件内、不入卡」。 # 单一二进制双形态:/usr/bin/meow_netmgrd(svcd 空参=守护)+ /usr/bin/meow_net(CLI,同一份 # 文件两次安装,argv[0] basename 分形态;fw_content.conf 两行同 src)。 # # 用法: # ./build_netmgrd.sh # 交叉编译 → patch_v2/meow_netmgrd/meow_netmgrd(mipsel 静态) # ./build_netmgrd.sh host # 宿主编译 → patch_v2/meow_netmgrd/meow_netmgrd_host # OUT=/path/to/out ./build_netmgrd.sh # 产物另存(M49 起:仓库里不提交二进制,验证产物放仓库外) set -e cd "$(dirname "$0")" # 仓库根按本脚本位置推导(/patch_v2/meow_netmgrd/),MEOW_ROOT 可覆盖。 # 旧版硬编码 $HOME/Project/R3ProII —— 换 checkout 路径/用 worktree 时直接编不动。 ROOT="${MEOW_ROOT:-$(cd ../.. && pwd)}" # 交叉编译器:ZIGCC env 优先,其次 /.tools/,最后 $HOME/.tools/(.tools 常只在主 checkout 里) CC="${ZIGCC:-$ROOT/.tools/zig-mipsel-cc}" [ -x "$CC" ] || CC="$HOME/.tools/zig-mipsel-cc" I_HDR="$ROOT/patch_v2/meow_launcherd" # meow_ipc.h(帧/MSG_NET_*/m_net_*) OUT="${OUT:-.}" [ -d "$OUT" ] || mkdir -p "$OUT" if [ "$1" = "host" ]; then HOST_CC="${CC_HOST:-cc}" # -Wno-format-truncation:宿主 glibc 对固定缓冲 snprintf 的「安全截断」误报(musl 交叉不报)。 "$HOST_CC" -Os -Wall -Wextra -U_FORTIFY_SOURCE -Wno-format-truncation -I"$I_HDR" \ meow_netmgrd.c -o "$OUT/meow_netmgrd_host" echo "== host build ==" ls -la "$OUT/meow_netmgrd_host" file "$OUT/meow_netmgrd_host" exit 0 fi # meow_time32.c:独立 o32 time32 取时/睡眠(netmgrd 不链 meow_ui.a);修 DNS TTL 基准 # 与 nanosleep 退避。守护/CLI 同一二进制,一次构建两处安装。(M43 的 time32 接入,必须保留: # 少了它 mono_now()/轮询退避会踩 mipsel o32 的 time64/time32 结构错位。) "$CC" -Os -Wall -Wextra -static -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \ meow_netmgrd.c ../sdk/meow_time32.c -o "$OUT/meow_netmgrd" echo "== meow_netmgrd (mipsel static) ==" ls -la "$OUT/meow_netmgrd" md5sum "$OUT/meow_netmgrd" file "$OUT/meow_netmgrd"