#!/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 结构错位。) # 注意:`-o meow_netmgrd` 保持字面量(不带目录前缀)——sdk/test_time32_abi.sh 的构建门禁正是 # 按 `-o <产物名>` 定位编译行来断言 time32 接入;写成 `-o "$OUT/..."` 会让门禁报「未找到」。 # 编译在临时目录里做(产物名仍是字面量),编完再落到 OUT:这样设了 OUT 也**不会**覆盖/删除 # 仓库里那份被跟踪的 patch_v2/meow_netmgrd/meow_netmgrd(M49 曾因 mv 把它删掉过一次)。 HERE="$(pwd)" BUILD_DIR="$(mktemp -d "${TMPDIR:-/tmp}/netmgrd-build.XXXXXX")" ( cd "$BUILD_DIR" && "$CC" -Os -Wall -Wextra -static -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \ "$HERE/meow_netmgrd.c" "$HERE/../sdk/meow_time32.c" -o meow_netmgrd ) mv -f "$BUILD_DIR/meow_netmgrd" "$OUT/meow_netmgrd" rmdir "$BUILD_DIR" 2>/dev/null || true echo "== meow_netmgrd (mipsel static) ==" ls -la "$OUT/meow_netmgrd" md5sum "$OUT/meow_netmgrd" file "$OUT/meow_netmgrd"