# Dependencies
Everything the build needs is on this page: what each item is, what it is for, where to get it and how to install it. The versions listed are the ones we actually build with; newer versions usually work, and if something breaks, go back to the listed version first.
中文:[DEPENDENCIES.zh-CN.md](DEPENDENCIES.zh-CN.md)
## What you bring yourself
| What | Used for | Notes |
|---|---|---|
| An Apple silicon Mac | Building, and running the host tools | Needs macOS and the Xcode version below |
| Your own game files | The game program and all game data | This repository contains no game files. You need the program files (ExeFS) and the update data (RomFS) of the Switch release 1.0.34.0 (corresponding to PC version 3.3.94012), dumped from a copy you bought and own. See [GAME_FILES.md](GAME_FILES.md) |
| An Apple developer account | Signing the app and installing it on your own device | A paid account gives you everything. A free account (personal team) cannot sign iCloud, sustained execution or the increased memory limit: building with `DM_FREE_ACCOUNT=1` removes them; what you lose is iCloud save sync, and the game runs as usual. Apps signed with a free account must be reinstalled every 7 days. With a free account: before building, connect the phone by cable and unlock it, and set `DM_IOS_UDID` in the local configuration (the build targets this phone, which is what makes Apple generate a provisioning profile for a free team); after installing, before the first launch, trust your developer account on the phone under Settings → General → VPN & Device Management. This mode has been signed with an actual free account, installed and played (on a 12 GB device); 6 GB / 8 GB devices have not been verified |
## Build tools
| Tool | Version | Used for | Official site | Install |
|---|---|---|---|---|
| Xcode (with the Metal compiler) | 26.6 | Building the app and compiling shaders into Metal libraries | | App Store or the developer site |
| Homebrew | — | Installing the command-line tools below | | The one-line command on its home page |
| XcodeGen | 2.45.4 | Generating the Xcode project from `project.yml` | | `brew install xcodegen` |
| .NET SDK | 10.0 | Building the shader translation tool | | `brew install dotnet` |
| SPIRV-Cross | 1.4.357 | Turning translated SPIR-V into Metal Shading Language | | `brew install spirv-cross` |
| Python 3 | 3.14 | Running the generation and verification scripts | | Ships with macOS, or `brew install python` |
## Python packages
| Package | Version | Used for | Link |
|---|---|---|---|
| Pillow | 12.1.1 | Generating interface art from the game files | |
| numpy | 2.4.4 | Same | |
| lz4 | 4.4.5 | Unpacking the program files | |
| capstone | 5.0.9 | Disassembly, for rewriting the program and for verification | |
| unicorn | 2.1.4 | Checking, site by site, that rewritten code behaves the same | |
All at once: `python3 -m pip install pillow numpy lz4 capstone unicorn` (`./setup.sh` creates an isolated environment and installs them for you)
## Optional
| Tool | Used for | Official site |
|---|---|---|
| astcenc | Converting textures for older devices without BC texture support (A16 and earlier); built from source — how to build it and the whole procedure are in [LEGACY_DEVICES.md](LEGACY_DEVICES.md). We use v5.2.0 | |
| hactool | Needed by `dm/tools/extract_game.sh` to extract files from your game package; not needed if your game files are already prepared some other way. We tested with upstream commit `1d64a83` | |
## Extra tools for on-device and verification scripts
Not needed to build the app or run the Mac smoke test; only for on-device smoke tests, UI regression and the scripts under `dm/verify/`.
| Tool | Used for | Install |
|---|---|---|
| timeout | Wall-clock limits for runs and builds (used by several scripts) | `brew install coreutils` |
| iproxy, ideviceinfo | Forwarding the log port over USB and reading battery level in on-device smoke tests | `brew install libimobiledevice` |
| llvm-objdump, llvm-objcopy | Disassembly and section extraction in the rewrite-equivalence checks | `brew install llvm` |
## Third-party code in this repository
These are already in the repository; nothing to download. Each keeps its license in its own directory.
| Path | What | License | Upstream |
|---|---|---|---|
| `dm/third_party/bcdec` | BC texture decompression | MIT or Unlicense (your choice) | |
| `dm/third_party/flip` | Image difference metric | BSD 3-Clause | |
| `dm/third_party/libdeflate` | Decompression | MIT | |
| `dm/third_party/ryujinx` | The shader translator from Ryujinx 1.3.2 (three projects, unmodified), which translates the original Switch shaders to SPIR-V | MIT | |
| `dm/gfx/nvn/include/nvn.h` | Graphics interface declarations | MIT | Author named in the file header |
| Layout size algorithm in `dm/gfx/nvn/nvn_tex.c` | Ported from deko3d | zlib | |
| The 7 rewrites in `dm/tools/patch_nso.py` that let the game run offline | Taken from a community offline fix (LFS Mod Offline Fix) | Unknown | We have no reliable record of where it was first published or by whom; if you know, please open an issue, see [DERIVED.md](DERIVED.md) |