72 lines
3.7 KiB
Bash
Executable File
72 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# build.sh — 交叉编译 Apple mDNSResponder 的 POSIX 精简变体 SAResponder(mipsel-linux-muslsf,静态)
|
||
#
|
||
# 目标架构 : mipsel (MIPS32r2 little-endian), musl, 静态链接, 无 glibc 依赖
|
||
# 交叉编译器: zig (目标 mips-linux-musl / mipsel-linux-musleabi),由 ~/Project/R3ProII/.tools/zig-mipsel-cc 包装
|
||
# 产物 : bin/mdnsd = SAResponder (mDNSResponderPosix) —— 本脚本构建,无 UDS/IPC 的精简响应器
|
||
# bin/mdnsd.bin = 完整 mdnsd 守护进程(上一轮产物,作为对照保留,需重编译见文件尾注释)
|
||
# 用途 : MeowOS (R3 Pro II) 板载 mDNS 响应器,回应 .local 查询
|
||
#
|
||
# 用法 : ./build.sh # 默认构建 SAResponder → bin/mdnsd
|
||
#
|
||
# 可复现性 : 源码按固定 commit SHA 下载(codeload sha 方式),产物大小/校验值稳定。
|
||
set -euo pipefail
|
||
|
||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
BIN_DIR="$REPO_DIR/bin"
|
||
WORK="$REPO_DIR/.build"
|
||
|
||
# ---- 工具链(本机实际路径;zig-mipsel-cc 内部也用 $HOME/Project/R3ProII/.tools)----
|
||
ZIGCC="${ZIGCC:-$HOME/Project/R3ProII/.tools/zig-mipsel-cc}"
|
||
|
||
# ---- 固定源码版本:apple-oss-distributions/mDNSResponder 2881.0.25 ----
|
||
MDNS_SHA="${MDNS_SHA:-d4658af3f5f291311c6aee4210aa6d39bda82bbe}"
|
||
MDNS_VER="${MDNS_VER:-2881.0.25}"
|
||
TARBALL_URL="https://codeload.github.com/apple-oss-distributions/mDNSResponder/tar.gz/${MDNS_SHA}"
|
||
TARBALL="$WORK/mDNSResponder-${MDNS_VER}.tar.gz"
|
||
SRCDIR="$WORK/src"
|
||
|
||
mkdir -p "$BIN_DIR" "$WORK"
|
||
|
||
echo "==> [1/4] 获取源码 mDNSResponder-$MDNS_VER (commit ${MDNS_SHA:0:12})"
|
||
if [ ! -f "$TARBALL" ]; then
|
||
curl -fsSL --retry 4 --retry-all-errors -o "$TARBALL" "$TARBALL_URL"
|
||
fi
|
||
gzip -t "$TARBALL" >/dev/null 2>&1 || { echo "错误: 源码包校验失败"; exit 1; }
|
||
rm -rf "$SRCDIR"
|
||
mkdir -p "$SRCDIR"
|
||
tar xzf "$TARBALL" -C "$SRCDIR" --strip-components=1
|
||
|
||
echo "==> [2/4] 交叉编译 SAResponder (zig: mipsel-linux-musleabi, -Os -static, tls=no)"
|
||
cd "$SRCDIR/mDNSPosix"
|
||
# 说明:
|
||
# - os=linux : 选定 Linux 平台分支 (CFLAGS_OS)
|
||
# - tls=no : 关闭 TLS 支持,避免链接 mbedtls (嵌入式设备不需要)
|
||
# - CC/LD=$ZIGCC : 强制 zig 交叉编译器,不用宿主 gcc
|
||
# - CFLAGS="-Os -static" : -Os 体积优化 + 静态链接;-Wno-date-time 关掉 zig/clang
|
||
# 默认的 -Werror -Wdate-time (源码用了 __DATE__/__TIME__ 宏)
|
||
# - LINKOPTS="-s" : 链接时直接 strip 符号表 + 调试信息,产出部署版。
|
||
# 注意 SAResponder 的链接规则里没有 $(STRIP) $@ 这一行,
|
||
# 唯一的 strip 来源就是这个 -s(勿依赖 STRIP=true)
|
||
# - SAResponder 目标 : 无 UDS/IPC 的独立响应器,产物 build/prod/mDNSResponderPosix
|
||
make os=linux tls=no \
|
||
CC="$ZIGCC" CFLAGS="-Os -static -Wno-date-time" \
|
||
LD="$ZIGCC" LINKOPTS="-s" STRIP=true SAResponder
|
||
|
||
echo "==> [3/4] 放置产物 $BIN_DIR/mdnsd (SAResponder)"
|
||
install -m 755 build/prod/mDNSResponderPosix "$BIN_DIR/mdnsd"
|
||
|
||
echo "==> [4/4] 校验"
|
||
file "$BIN_DIR/mdnsd"
|
||
echo "--- 体积 (静态部署版, strip 后) ---"
|
||
ls -l "$BIN_DIR/mdnsd"
|
||
echo "字节数: $(stat -c %s "$BIN_DIR/mdnsd")"
|
||
echo "MD5 : $(md5sum "$BIN_DIR/mdnsd" | cut -d' ' -f1)"
|
||
echo "构建完成: $BIN_DIR/mdnsd"
|
||
echo
|
||
echo "提示: bin/mdnsd.bin 为上一轮的完整 mdnsd 守护进程(1,018,144 B, md5 fcb0a8ae5ad5696253a6ec56b3e585e6),"
|
||
echo " 仅作对照保留。如需重编译完整 mdnsd 放到 mdnsd.bin,改目标为 Daemon 即可:"
|
||
echo " make os=linux tls=no CC=\"\$ZIGCC\" CFLAGS=\"-Os -static -Wno-date-time\" LD=\"\$ZIGCC\" LINKOPTS=\"-s\" Daemon"
|
||
echo " install -m 755 build/prod/mdnsd \"$BIN_DIR/mdnsd.bin\""
|