Skip to content

feat(dfss): 支持 macOS 兼容(x86_64 + arm64) - #164

Merged
zfsopv merged 5 commits into
mainfrom
agent/sophon-tools-agent/01a05022
Aug 30, 2026
Merged

feat(dfss): 支持 macOS 兼容(x86_64 + arm64)#164
zfsopv merged 5 commits into
mainfrom
agent/sophon-tools-agent/01a05022

Conversation

@zfsopv

@zfsopv zfsopv commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

概述

为 dfss 子项目(source/pdfss_cpp)增加 macOS 兼容,覆盖 Intel Mac (x86_64)Apple Silicon (arm64) 两种架构。

由于 Linux 上交叉编译 darwin 需要 macOS SDK(受许可限制无法在构建镜像内预置),采取 Mac 本机原生编译 方案:脚本新增 darwin 构建目标,在 Mac 上按当前芯片产出对应架构二进制,与现有 linux_*/win_* 体系并列。

改动清单

文件 改动
src/main.cpp ① 修复 <filesystem> 头包含条件(!defined(__clang__) 导致 macOS clang 下漏 include、无法编译);② getExecutablePath() 新增 __APPLE__ 分支(_NSGetExecutablePath,Linux 的 /proc/self/exe 在 macOS 不存在)
src/Makefile Darwin 下 strip 改用 Apple/llvm 兼容的 -x(GNU --strip-debug --strip-unneeded 不被 macOS strip 支持)
linux_release.sh 新增 darwin 分支:-Wl,-force_load 静态链接 zlib/mbedtls/libssh2,产物 dfss-cpp-darwin-$(uname -m);非 macOS 主机直接报错拦截;readlink -f 兼容
libs/build_libs.sh 新增 darwin 分支:zlib/mbedtls/cmake + libssh2/configure 构建静态库(与 host 分支一致的参数);sysctl 取核数(macOS 无 nproc);免 sudo(避免交互式密码卡住);readlink -f 兼容
dfss_pip/dfss/__main__.py get_architecture() 识别 darwin-x86_64 / darwin-arm64 并选择对应二进制
release.sh / readme.md 统一构建接口支持 darwin;文档补充 macOS 构建说明、支持架构、编译器版本

构建方式(在 Mac 上)

./linux_release.sh darwin lib        # 按当前 Mac 芯片生成 dfss-cpp-darwin-<x86_64|arm64>

验证情况

  • ✅ Linux host 回归构建通过(gcc 9.4.0 / ubuntu20.04 镜像,与仓库约定一致),二进制可运行(--list 正常)
  • main.cpp 在 clang 下 fs-only 编译通过;以 -D__APPLE__ + stub mach-o/dyld.h 模拟 macOS 分支编译通过
  • get_architecture() 9 个用例单测通过(含 darwin 两种架构与既有平台回归)
  • ✅ 所有脚本 bash -n 语法检查通过
  • ✅ 独立代码审查(交叉平台构建审查)通过,阻塞点已修复:build_libs.sh 的 build_target 清理区分 Darwin(原无条件 sudo rm 会让 macOS 构建触发交互式 sudo);并采纳 realpath 解析可执行路径、-mmacosx-version-min=10.15、免交互 sudo 三项建议
  • ⚠️ 本环境无 macOS 真机/SDK,未做 macOS 真机构建与运行验证——需在 Mac 上执行一次 ./linux_release.sh darwin lib 做最终确认

已知限制

  • macOS 的 pthread_cancel 不生效(SDK 有声明可编译,但 libpthread 不真正终止线程),多服务器测速时会等待各线程自然超时而非立即取消,兜底选快逻辑仍正确,仅耗时略增
  • macOS 上系统库(libSystem 等)只能动态链接属正常现象;zlib/mbedtls/libssh2 为静态链接
  • 最低支持 macOS 10.15(std::filesystem 依赖)

zfsopv and others added 5 commits August 30, 2026 08:58
- linux_release.sh/build_libs.sh 新增 darwin 构建目标,Mac 本机按当前芯片
  生成 dfss-cpp-darwin-{x86_64,arm64},依赖 zlib/mbedtls/libssh2 静态编译
- Makefile 兼容 Darwin strip(-x)、main.cpp 修复 clang 下 filesystem 包含
  并为 macOS 提供 _NSGetExecutablePath 获取可执行路径
- dfss pip 包架构识别支持 darwin-x86_64/darwin-arm64 二进制选择
- readme/release.sh 同步 darwin 支持说明

适用于 Intel Mac (x86_64) 与 Apple Silicon (arm64),需 Mac 本机构建
(darwin 交叉编译需要 macOS SDK,非 macOS 主机拦截并报错)

Co-Authored-By: Claude <noreply@anthropic.com>
- build_libs.sh 的 build_target 清理区分 Darwin(免 sudo,避免交互式密码挂死)
- getExecutablePath macOS 分支补 realpath(),符号链接行为与 Linux 一致
- darwin 构建显式 -mmacosx-version-min=10.15(std::filesystem/clock_gettime 依赖)

Co-Authored-By: Claude <noreply@anthropic.com>
GitHub Actions 官方 macOS 托管 runner(macos-15-intel x86_64 + macos-15 arm64)
上构建 darwin 目标并冒烟运行 --no_json --list,产物上传 artifact
CI 从仓库根调用 bash source/pdfss_cpp/linux_release.sh darwin lib 时,
pushd libs/pushd src 等相对路径基于调用者目录解析失败;现基于脚本所在
目录 cd,对既有"在脚本目录运行"流程行为不变
独立行赋值只作用于 shell 变量,make 收不到链接参数,导致 macOS 链接
缺 force_load 静态库与 -lpthread 而报 symbol(s) not found
@zfsopv
zfsopv merged commit 619471f into main Aug 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant