Files

72 lines
3.7 KiB
Bash
Executable File
Raw Permalink 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.
#!/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\""