Он собирает следующие ПЗУ:
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9
sha1: 3f319ae697533a255a1003d09202379d78d5a2e0
sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec
Этот репозиторий не включает в себя все ресурсы, необходимые для компиляции ПЗУ. Для извлечения ресурсов требуется предыдущая копия игры.
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
git clone https://github.com/n64decomp/sm64.git
baserom.<VERSION>.z64
в папку проекта для извлечения ресурсов, где VERSION
может быть jp
, us
, eu
, sh
или cn
.make
для сборки. Укажите версию с помощью make VERSION=<VERSION>
. Добавьте -j4
, чтобы улучшить скорость сборки (зависит от оборудования).Убедитесь, что длина пути репозитория не превышает 255 символов. Длинные имена путей приводят к ошибкам сборки.
Установите WSL и дистрибутив по вашему выбору, следуя Руководству по установке подсистемы Windows для Linux для Windows 10. Мы рекомендуем дистрибутивы Debian или Ubuntu 18.04 Linux под WSL. Примечание. WSL1 в настоящее время не поддерживает Ubuntu 20.04.
Затем клонируйте репозиторий SM64 из оболочки Linux: 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 должны иметь пакеты, эквивалентные двум другим, перечисленным выше. Возможно, вам придется использовать другую версию GNU binutils. Ниже перечислены полностью совместимые дистрибутивы binutils с поддержкой в make-файле и примеры дистрибутивов, которые их предлагают:
mips64-elf-
(Арка AUR)mips-linux-gnu-
(Ubuntu и другие дистрибутивы на основе Debian)mips64-linux-gnu-
(RHEL/CentOS/Fedora)Вы также можете использовать Docker для установки образа с минимальными зависимостями.
Для каждой версии (jp/us/eu/sh/cn), для которой вы хотите создать ПЗУ, поместите существующее ПЗУ в ./baserom.<VERSION>.z64
для извлечения ресурсов.
Запустите make
для сборки ПЗУ (по умолчанию 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
(сравнивать хеш ПЗУ), 0
(не сравнивать хеш ПЗУ)NON_MATCHING
: используйте функционально эквивалентные реализации C для несоответствий. Также будет избегать случаев неопределенного поведения.CROSS
: префикс инструмента кросс-компилятора (пример: mips64-elf-
).В macOS вы можете использовать Homebrew или Docker.
Установите Homebrew и следующие зависимости:
brew update
brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
Для каждой версии (jp/us/eu/sh/cn), для которой вы хотите создать ПЗУ, поместите существующее ПЗУ в ./baserom.<VERSION>.z64
для извлечения ресурсов.
Используйте GNU make от Homebrew, поскольку версия, включенная в macOS, слишком старая.
gmake VERSION=jp -j4 # build (J) version instead with 4 jobs
После установки и запуска Docker создайте образ докера. Это нужно сделать только один раз.
docker build -t sm64 .
Для сборки смонтируйте локальную файловую систему в контейнер Docker и создайте ПЗУ с помощью docker run sm64 make
.
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