次の ROM をビルドします。
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9
sha1: 3f319ae697533a255a1003d09202379d78d5a2e0
sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec
このリポジトリには、ROM のコンパイルに必要なすべてのアセットが含まれているわけではありません。アセットを抽出するには、ゲームの事前コピーが必要です。
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
git clone https://github.com/n64decomp/sm64.git
baserom.<VERSION>.z64
というjp
VERSION
us
、 eu
、 sh
、またはcn
です。make
実行してビルドします。 make VERSION=<VERSION>
でバージョンを指定します。 -j4
追加すると、ビルド速度が向上します (ハードウェアに依存します)。リポジトリのパスの長さが 255 文字を超えないようにしてください。パス名が長いとビルド エラーが発生します。
Windows 10 用 Windows Subsystem for Linux インストール ガイドに従って、WSL と選択したディストリビューションをインストールします。WSL では、Debian または Ubuntu 18.04 Linux ディストリビューションのいずれかを推奨します。注: WSL1 は現在、Ubuntu 20.04 をサポートしていません。
次に、Linux シェル内から SM64 リポジトリのクローンを作成します: git clone https://github.com/n64decomp/sm64.git
次に、以下の Linux インストール セクションの指示に従ってください。
動作するビルドをセットアップするには 3 つの手順があります。
ビルド システムには次のパッケージ要件があります。
一般的な Linux ディストリビューションの依存関係のインストール手順を以下に示します。
ビルドの依存関係をインストールするには:
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
ビルドの依存関係をインストールするには:
sudo pacman -S base-devel python
次の AUR パッケージをインストールします。
最新の Linux ディストリビューションのほとんどには、上記の他の 2 つと同等のパッケージが含まれているはずです。別のバージョンの GNU binutils を使用する必要がある場合があります。以下にリストされているのは、makefile でサポートされている完全互換性のある binutils ディストリビューションと、それらを提供するディストリビューションの例です。
mips64-elf-
(アーチ AUR)mips-linux-gnu-
(Ubuntu およびその他の Debian ベースのディストリビューション)mips64-linux-gnu-
(RHEL/CentOS/Fedora)Docker を使用して、依存関係を最小限に抑えたイメージのインストールを処理することもできます。
ROM をビルドするバージョン (jp/us/eu/sh/cn) ごとに、アセット抽出用に既存の ROM を./baserom.<VERSION>.z64
に配置します。
make
実行して ROM をビルドします (デフォルトはVERSION=us
)。他の例:
make VERSION=jp -j4 # build (J) version instead with 4 jobs
make VERSION=eu COMPARE=0 # build (EU) version but do not compare ROM hashes
結果として得られるアーティファクトは、 build
ディレクトリにあります。
構成可能な変数の完全なリストを以下に示します。デフォルトはリストの最初に表示されます。
VERSION
: jp
、 us
、 eu
、 sh
、 cn
GRUCODE
: f3d_old
、 f3d_new
、 f3dex
、 f3dex2
、 f3dzex
COMPARE
: 1
(ROM ハッシュを比較する)、 0
(ROM ハッシュを比較しない)NON_MATCHING
: 一致しない場合は、機能的に同等の C 実装を使用します。また、未定義の動作のインスタンスも回避します。CROSS
: クロスコンパイラ ツールの接頭辞 (例: mips64-elf-
)。macOS では、Homebrew または Docker を使用できます。
Homebrew と次の依存関係をインストールします。
brew update
brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
ROM をビルドするバージョン (jp/us/eu/sh/cn) ごとに、アセット抽出用に既存の ROM を./baserom.<VERSION>.z64
に配置します。
macOS に含まれているバージョンが古すぎるため、Homebrew の GNU make を使用してください。
gmake VERSION=jp -j4 # build (J) version instead with 4 jobs
Dockerをインストールして起動したら、Dockerイメージを作成します。これは一度だけ行う必要があります。
docker build -t sm64 .
ビルドするには、ローカル ファイルシステムを Docker コンテナにマウントし、 docker run sm64 make
を使用して ROM をビルドします。
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 sm64 make VERSION=us -j4
Linux ホストの場合、Docker は出力ファイルを所有するユーザーを指示する必要があります。
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 --user $UID:$GID sm64 make VERSION=us -j4
結果として得られるアーティファクトは、 build
ディレクトリにあります。
sm64
├── actors: object behaviors, geo layout, and display lists
├── asm: handwritten assembly code, rom header
│ └── non_matchings: asm for non-matching sections
├── assets: animation and demo data
│ ├── anims: animation data
│ └── demos: demo data
├── bin: C files for ordering display lists and textures
├── build: output directory
├── data: behavior scripts, misc. data
├── doxygen: documentation infrastructure
├── enhancements: example source modifications
├── include: header files
├── levels: level scripts, geo layout, and display lists
├── lib: SDK library code
├── rsp: audio and Fast3D RSP assembly code
├── sound: sequences, sound samples, and sound banks
├── src: C source code for game
│ ├── audio: audio code
│ ├── buffers: stacks, heaps, and task buffers
│ ├── engine: script processing engines and utils
│ ├── game: behaviors and rest of game source
│ ├── goddard: Mario intro screen
│ └── menu: title screen and file, act, and debug level selection menus
├── text: dialog, level names, act names
├── textures: skybox and generic texture data
└── tools: build tools
プルリクエストは大歓迎です。大きな変更の場合は、まず問題を開いて、変更したい内容について話し合ってください。
コードに対してclang-format
実行して、プロジェクトのコーディング標準を満たしていることを確認します。
公式Discord: discord.gg/DuYH3Fh