Braxton-Bevis/bmk4
GitHub: Braxton-Bevis/bmk4
将《使命召唤4》引擎(KisakCOD)从 Win32/D3D9/x86 平台移植到 arm64-apple-ios 的开源工程实验,通过 DXVK 和 Metal 实现原生渲染。
Stars: 1 | Forks: 0
# BMK4
**B**raxton · **M**etal · **K**isak · **4** — 将《使命召唤4》引入 Apple silicon 平台。
这是一项 Bevis Metalworks 项目,由 LWSS 基于 [KisakCOD](https://github.com/SwagSoftware/KisakCOD) 打造。
### 将从零开始的《使命召唤4》引擎反编译项目移植到 `arm64-apple-ios`
[](https://github.com/Braxton-Bevis/bmk4/actions/workflows/ios-stub.yml)
[](https://github.com/Braxton-Bevis/bmk4/actions/workflows/ios-compile-probe.yml)
[](https://github.com/Braxton-Bevis/bmk4/actions/workflows/build-kisarcod-win.yaml)
[](LICENSE)
*以上两张屏幕截图均由 CI 从启动的 iOS 模拟器中自动捕获——本仓库中的每一项声明均经过机器验证。*
## 这是什么?
一场工程实验:**[KisakCOD](https://github.com/SwagSoftware/KisakCOD)(一个 GPL-3.0 协议、基于 Win32/x86-32/DirectX 9 的《使命召唤4》多人模式引擎重实现)能在多大程度上被推向在 iPhone 上原生运行?**
我们无法从任何 macOS/Linux/ARM 分支起步。该引擎全面依赖于 Windows API、32 位 x86 结构体布局以及 D3D9 渲染器。本仓库诚实地记录了这次平台升级的过程,通过每一个里程碑进行展示,并且每一次编译和启动都在 GitHub Actions 的 macOS runner(Xcode 16.4,iOS 18.5 SDK)上得到了验证——整个实验都是在一台 Windows 笔记本上驱动的,**完全没有使用本地编译器**。
## 当前状态概览
| 目标 | 状态 |
|---|---|
| iOS 应用外壳:Metal 图层、经模拟器验证的启动、未签名的 arm64 `.ipa` 构件 | ✅ 完成 |
| MetalFX 空间超分(50/75% → 原生),受运行时和 SDK 控制 | ✅ 位于 stub 中 |
| 控制器支持:屏幕 `GCVirtualController` + 物理手柄 | ✅ 位于 stub 中 |
| 应用内图形设置菜单(MetalFX、渲染缩放、帧率上限) | ✅ 位于 stub 中 |
| 构建重定向:`cmake -DKISAK_PLATFORM=ios` + CI 中的逐文件编译普查 | ✅ 完成 |
| Windows 到 iOS 的依赖映射(每个 API 系列 → 具体替代方案) | ✅ [DEPENDENCY_MAP.md](DEPENDENCY_MAP.md) |
| 文件系统沙盒化(`fs_basepath` → 应用包,`fs_homepath` → `Documents/`) | ✅ 已落地 |
| 正在为 `arm64-apple-ios` 编译的引擎翻译单元 | ✅ **23/23 普查翻译单元** — 包含游戏逻辑、脚本 VM、多线程、FS (POSIX)、网络 (BSD 套接字)、声音 (Miles stub) 以及渲染器初始化 |
| iOS SDK 上的 DXVK 原生头文件吸收了 D3D9 头文件层 | ✅ 已验证 |
| 作为 iOS 库构建的 DXVK d3d9(渲染器运行时) | ✅ **`libdxvk_d3d9.a` (arm64)** — 5 处补丁 + SDL2-iOS WSI,[构建脚本](scripts/platform/ios/build-dxvk-ios.sh);运行时启动对比 MoltenVK 是下一个前沿领域 |
| 引擎在设备上链接/运行 | 🟡 **首批引擎代码已在 iOS 上执行** — 数学/位打包/字符串翻译单元已链接至 stub 中,并在模拟器**以及 iPad Pro (M5)** 上进行了验证,同时开启了 MetalFX 空间超分,运行在 120 fps |
| win32 构建不受上述任何内容影响 | ✅ 完整的引擎构建成功(Debug + Release) |
## 实验过程
经过八轮 CI **编译普查** — 在每次修复浪潮后,针对真实的 iOS SDK 编译具有代表性的引擎文件,并逐字记录失败情况:
| 轮次 | 修改内容 | 结果 |
|---|---|---|
| 1 | 原始引擎对比 iOS SDK | 0/13 编译通过 — 发现了六个不同的错误层级 |
| 2 | `
*以上两张屏幕截图均由 CI 从启动的 iOS 模拟器中自动捕获——本仓库中的每一项声明均经过机器验证。*
(D3D9 calls)"] end RB -->|"d3d9.h (proven on iOS SDK)"| DXVK["DXVK d3d9
(native build — next frontier)"] DXVK --> VK["Vulkan"] --> MVK["MoltenVK"] --> MTL["Metal"] MTL --> CAML["CAMetalLayer
(the stub app's layer, working today)"] subgraph iOS ["iOS platform layer"] FS["fs_homepath → Documents/
fs_basepath → app bundle"] GC["GCVirtualController / GCController"] FX["MetalFX spatial upscaler"] end ``` 渲染器遵循**转换**策略(如 C&C Generals iOS 移植版所用):保留引擎的 D3D9 调用,并在 API 边界对其进行转换。作为备选方案,替代性的原生 Metal 重写范围已在 [DEPENDENCY_MAP.md §8](DEPENDENCY_MAP.md) 中界定。 ### 四大已衡量壁垒 1. **32 位布局假设** — 249 个结构体大小断言;fastfile 反序列化流将区块数据直接流入假定指针为 4 字节的结构体中。这是最大的单项成本。 2. **Win32 平台层** — 约 6,900 行代码的窗口/输入/套接字/线程粘合剂;每一个系列都有对应的 POSIX/UIKit 替代方案。 3. **仅限 x86 的二进制 DLL** — Miles Sound、Bink Video、Steam。需要 AVAudioEngine / AVFoundation / 空操作垫片。 4. **73 个内联 x86 `__asm` 代码块** — 需机械式重写为 C/NEON。 ## 仓库导览 | 路径 | 内容说明 | |---|---| | [`ios/`](ios/) | iOS 应用外壳:包含 MetalFX、控制器支持、图形设置菜单、引擎冒烟测试桥接及签名操作手册的 XcodeGen 规范 + Swift/Metal stub([ios/README.md](ios/README.md)) | | [`src/ios/`](src/ios/) | 引擎侧的 iOS 平台层:沙盒路径、平台入口(`sys_ios_main.mm`)、MSVC-CRT/Win32 兼容性头文件、Miles stub | | [`scripts/platform/ios/`](scripts/platform/ios/) | `KISAK_PLATFORM=ios` 工具链标志、DXVK 头文件连接、**`build-dxvk-ios.sh`**(渲染器库)、**`build-engine-lib.sh`**(引擎归档文件)、DXVK iOS 补丁 | | [`scripts/ios/`](scripts/ios/) | 编译普查目标(随着移植推进,文件逐步加入) | | [`.github/workflows/`](.github/workflows/) | iOS stub 构建 + 模拟器启动证明 · 引擎编译普查 · Windows 回归测试构建 | | [PORT_JOURNAL.md](PORT_JOURNAL.md) | 实验日志 — 每次尝试、确切错误、下一个假设 | | [DEPENDENCY_MAP.md](DEPENDENCY_MAP.md) | 每个 Win32/D3D9/x86 依赖 → 其 iOS 替代方案,附带工作量评级 | | [FRONTIER_REPORT.md](FRONTIER_REPORT.md) | 最远的里程碑、硬性阻碍、人类接下来的工作 | | [docs/UPSTREAM_README.md](docs/UPSTREAM_README.md) | 原始 KisakCOD 自述文件(Windows 构建说明) | ## 快速开始 ### 在你的 iPhone 上运行 stub(Mac) ``` git clone https://github.com/Braxton-Bevis/bmk4 brew install xcodegen cd kisakcod-ios-port/ios && xcodegen generate && open KisakStub.xcodeproj ``` 使用你(免费)的 Apple ID 启用自动签名,插上手机,然后运行。详情及免 Mac 的 Sideloadly 路径:**[ios/README.md](ios/README.md)**。 ### 复现引擎编译普查(Mac) ``` cmake -B build-ios -DKISAK_PLATFORM=ios -DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=15.0 ``` 或者只需在 `src/` 目录下推送更改 — 普查工作流会自动为你运行,并将逐文件错误表作为构件发布。 ### 构建渲染器库 + 引擎归档文件(Mac) ``` # DXVK d3d9 作为 arm64-apple-ios 静态库 (SDL2-iOS WSI, 约 10 分钟) ./scripts/platform/ios/build-dxvk-ios.sh dxvk-ios-work # 将每个通过 census 测试的 engine TU 加入 ios/libs/
标签:Bash脚本, DirectX 9, DXVK, iOS, Metal, 使命召唤4, 游戏引擎, 跨平台移植, 预握手