新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何为Madeira构建LLVM iOS工具链:耗时数小时的编译完整指南

发布时间:2026/10/2 10:35:32来源:尧图网络
如何为Madeira构建LLVM iOS工具链:耗时数小时的编译完整指南
如何为Madeira构建LLVM iOS工具链耗时数小时的编译完整指南【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/MadeiraMadeira是一个在越狱限制下的 iPhone 上运行 x86-64 Windows PC 游戏的开源项目技术栈为 FEX-Emu Wine DXMT。其中 DXMT 负责把 DirectX 11 指令翻译成 Apple Metal而它内置的airconv 着色器编译器依赖 LLVM 15 的静态库——这意味着你必须亲手编译一套LLVM iOS 交叉工具链这也是整个构建流程中最耗时的一环通常需要数小时。本文手把手带你看懂每一步。为什么 Madeira 需要一套自建 LLVM iOS 工具链在开始编译前先理解这套工具链的用途你就不容易迷路着色器翻译DXMT 的airconv模块把 DXBC 着色器编译为 Apple AIR基于 LLVM IR再输出 Metal 库它直接链接 LLVM 15 的core、bitreader、bitwriter等库。iOS 目标平台这套 LLVM 不是装在你的 Mac 上给 Mac 用的而是交叉编译产物——目标三元组为arm64-apple-ios17.0最终随libdxmt_combined.a一起链接进 Madeira.app。PE 侧另有工具链Windows 侧的 PE DLLd3d11.dll、winemetal.dll 等用的是现成的 llvm-mingw不需要你编译真正要熬几个小时的是 iOS 侧这套。⏳ 心理准备iOS 目标的 LLVM 全量静态库编译在 Apple Silicon 上通常也需要数小时中途请勿休眠。相关设计文档可先阅读 ARCHITECTURE_ANALYSIS.md了解 DXMT 在整体架构中的位置。编译前置准备环境与源码1. 准备 macOS 开发机macOS Xcode需能访问iphoneosSDK即xcrun --sdk iphoneos --show-sdk-path可用CMake、Ninja、Python 3Metal Toolchain 组件xcodebuild -downloadComponent MetalToolchain2. 克隆 Madeira 仓库含子模块git clone --recurse-submodules https://gitcode.com/GitHub_Trending/mad/Madeira cd Madeira注意FEX、wine、research/dxmt是指向定制分支的子模块必须递归初始化。3. 获取 LLVM 源码官方构建记录把 LLVM 钉在上游 commit8dfdcc7b7[libc] Fix memory leaks when throwing inside std::vector constructor对应 LLVM 15.0.7源码放在toolchains/llvm-project/构建输出分别放在目录用途toolchains/llvm-host-build/Mac 宿主版 LLVM提供llvm-tblgenairconv 测试也用它toolchains/llvm-ios-build/iOS 交叉版 LLVM 静态库本文主角这些目录均为 git 忽略内容需要你自己构建。完整说明见 docs/BUILDING.md 的 Inputs that are not in the repository 一节。第一步构建宿主版 llvm-tblgen30 分钟级LLVM 构建有个经典的两阶段问题编译 LLVM 自身需要llvm-tblgen而交叉构建时 iOS 版 tablegen 没法在 Mac 上运行。所以先做一遍精简的宿主构建只为拿到 tablegencmake -S toolchains/llvm-project/llvm -B toolchains/llvm-host-build \ -DCMAKE_BUILD_TYPERelease \ -DLLVM_TARGETS_TO_BUILDARM \ -DLLVM_BUILD_TOOLSOff ninja -C toolchains/llvm-host-build llvm-tblgendocs/BUILDING.md 中记录了该宿主构建目录llvm-host-build的存在与用途。另外research/madeira-d3d12/tests/offline/README.md 提到离线着色器测试也链接这份宿主构建用ninja补齐 airconv 需要的 34 个归档所以这份构建值得保留完整。第二步配置 iOS 交叉构建核心步骤这是整条工具链的心脏。官方从现存的 CMakeCache 中读回的配置参数如下即被验证过的配方cmake -S toolchains/llvm-project/llvm -B toolchains/llvm-ios-build \ -DCMAKE_SYSTEM_NAMEiOS \ -DCMAKE_OSX_ARCHITECTURESarm64 \ -DCMAKE_OSX_SYSROOTiphoneos \ -DCMAKE_BUILD_TYPERelease \ -DLLVM_HOST_TRIPLEarm64-apple-ios17.0 \ -DLLVM_DEFAULT_TARGET_TRIPLEarm64-apple-ios17.0 \ -DLLVM_TARGET_ARCHhost \ -DLLVM_TARGETS_TO_BUILD \ -DLLVM_ENABLE_PROJECTS \ -DLLVM_BUILD_TOOLSOff \ -DLLVM_INCLUDE_TESTSOff \ -DLLVM_ENABLE_ZLIBOff逐条解释关键参数的含义-DCMAKE_SYSTEM_NAMEiOS告诉 CMake 这是 iOS 交叉编译-DLLVM_HOST_TRIPLEarm64-apple-ios17.0目标最低部署 iOS 17-DLLVM_TARGETS_TO_BUILD留空-DLLVM_TARGET_ARCHhost不编译任何后端——因为 airconv 只需要 LLVM 前端/IR 基础设施bitcode reader/writer、IR 变换不需要生成机器码这是省时间的大头-DLLVM_BUILD_TOOLSOff、-DLLVM_INCLUDE_TESTSOff、-DLLVM_ENABLE_ZLIBOff进一步裁剪减少无用编译量。build/dxmt-ios/README.md 也印证了同样的思路iOS 阶段使用-DCMAKE_SYSTEM_NAMEiOS、-DCMAKE_OSX_SYSROOTiphoneos、LLVM_BUILD_UTILSOff和空目标列表。必做的一个 CMake 补丁Apple 的链接器不认识 GCC 风格的--gc-sections。你需要给llvm/cmake/modules/AddLLVM.cmake打一个一行小补丁把MATCHES Darwin改为MATCHES Darwin|iOS这样在 iOS 平台上会改用 Apple ld 支持的-dead_strip。这个坑在 build/dxmt-ios/README.md 的 Prerequisites 一节有明确记录。第三步启动数小时编译ninja -C toolchains/llvm-ios-build全程保持 Mac 不休眠caffeinate -s或系统设置里调长进度可关注lib/libLLVMCore.a、libLLVMBitReader.a等归档的生成完成后目录中应有include/头文件和lib/一堆.a静态库这正是消费方脚本要的两个路径LLVM_SRC$REPO_ROOT/toolchains/llvm-project/llvm # 头文件 LLVM_BUILD$REPO_ROOT/toolchains/llvm-ios-build # 静态库见 build/dxmt-ios/build.sh 第 12-13 行。第四步验证——把它链进 libdxmt_combined.a工具链是否成功的判据只有一个DXMT 的 iOS 侧能正常编译并合成归档。./build/dxmt-ios/build.sh该脚本会用xcrun -sdk iphoneos clang编译 DXMT 的 winemetal unix 侧、airconvC20-I$LLVM_BUILD/include -I$LLVM_SRC/include引入你刚构建的 LLVM 头文件和 DXBCParser归档出libdxmt_unix.a并原地刷新libdxmt_combined.a——这个combined归档 DXMT 目标文件 llvm-ios-build/lib 下的全部 LLVM 静态库复制到app/Madeira/libdxmt_combined.a供 Xcode 链接。合并归档的命令在 build/dxmt-ios/README.md 中xcrun -sdk iphoneos libtool -static -o libdxmt_combined.a \ obj/*.o ../../toolchains/llvm-ios-build/lib/*.a若build.sh全部显示OK且日志出现 Staged: .../app/Madeira/libdxmt_combined.a恭喜数小时的编译正式落地 常见问题排查避坑清单现象原因与解法CMake 配置报 target 相关错误检查-DLLVM_TARGETS_TO_BUILD是否为空带等号、无值链接阶段报--gc-sections不被识别忘了打AddLLVM.cmake的Darwin\|iOS一行补丁airconv 编译时找不到llvm/Bitcode/Reader/BitcodeReader.hLLVM_SRC指向了错误路径应为toolchains/llvm-project/llvm编译数小时后ninja被系统杀死内存不足Mac 上关闭其他大型应用或用caffeinate防止休眠只重跑了 dxmt-ios 但 App 行为没变必须同步刷新libdxmt_combined.a脚本已自动处理但手动操作时容易漏 小技巧build/dxmt-ios/build.sh支持MADEIRA_ONLY目标名环境变量只重编单个目标文件——因为madeira_ir_unix里带__DATE__时间戳缓存键全量重编会导致设备上着色器全部重编译。许可说明LLVM 采用 Apache 2.0含 LLVM 例外条款其许可证文本已随仓库归档在 app/Madeira/licenses/LLVM-Apache-2.0-with-exception.txt。总结三步走完数小时编译宿主构建Release 版llvm-tblgen约半小时iOS 交叉构建空目标列表 iOS 17 三元组 一行 CMake 补丁ninja挂机数小时验证落地跑build/dxmt-ios/build.sh把 LLVM 静态库合并进libdxmt_combined.a。全部权威参数与状态哪些步骤已在干净克隆上复验、哪些标记 UNVERIFIED以 docs/BUILDING.md 为准DXMT 侧细节看 build/dxmt-ios/README.md。祝一次通过【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SpringBoot实战:古诗词鉴赏交流平台的设计与实现 2026/10/2 10:35:29

SpringBoot实战:古诗词鉴赏交流平台的设计与实现

1. 为什么我把毕业设计押在"古诗词鉴赏与交流平台"上1.1 选题的三个困境每年毕业设计选题的时候,我身边几乎都是同一批哀嚎:不想做那种烂大街的"学生管理系统",但算法方向又怕数学底子撑不住,前后端分离的电商…

阅读更多 →
SpringBoot+Vue旅游分享与商品交易平台:设计与实现全解析 2026/10/2 10:35:28

SpringBoot+Vue旅游分享与商品交易平台:设计与实现全解析

每年三四月份,我总会收到一大波“计算机毕业设计”相关的私信,其中“旅游信息交流网站”出现的频率特别高。大家觉得旅游类项目有画面感,页面好看,功能也能凑出来,但真正做起来才发现:分享、评论、点赞、下…

阅读更多 →
基于Fabric的农产品溯源平台:从架构选型到链码部署全解析 2026/10/2 10:35:28

基于Fabric的农产品溯源平台:从架构选型到链码部署全解析

简介:这套基于Fabric的农产品溯源平台项目,覆盖区块链网络、小程序端、PC管理端与基础数据后台四大模块,适合区块链开发者、毕业设计选题或农产品溯源场景的技术验证。项目前端采用Vue.js、Element UI与mpvue,后端集成SpringBoot、…

阅读更多 →
STM32+蓝牙颜色传感器物联网项目:从硬件选型到波长反馈上云全解析 2026/10/2 10:35:28

STM32+蓝牙颜色传感器物联网项目:从硬件选型到波长反馈上云全解析

前阵子一个学弟发来毕设题目截图,标题是“基于单片机stm32蓝牙颜色与波长反馈物联网嵌入式项目系统”,问我这个题到底该怎么做。我一看就明白,这不单是一个STM32最小系统,而是把传感器采集、无线透传、上位机/云端联动串在一起的综…

阅读更多 →
加密恶意流量检测实战:基于机器学习的完整实现方案 2026/10/2 10:35:28

加密恶意流量检测实战:基于机器学习的完整实现方案

简介:这是一套面向毕业设计场景的加密恶意流量检测项目,基于机器学习技术,解决加密流量中恶意行为难以识别的问题,包含完整Python源码与配套文档,适合计算机相关专业学生用于毕设、课程设计或期末大作业。压缩包共217个…

阅读更多 →
div和span的本质区别:从HTML语义、CSS渲染到JS交互全解析 2026/10/2 10:35:15

div和span的本质区别:从HTML语义、CSS渲染到JS交互全解析

1. 为什么这个问题每天被问上百遍,却仍有90%的人答不全?“span和div的区别是什么?”——这行字我见过太多次:前端新人在面试前夜的焦虑笔记里、刚转行的设计师在自学群里的求助消息中、甚至老手在CodePen调试布局时突然卡壳的cons…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉