다음 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
라는 Super Mario 64 ROM을 프로젝트 폴더에 배치합니다. 여기서 VERSION
jp
, us
, eu
, sh
또는 cn
일 수 있습니다.make
실행하여 빌드합니다. make VERSION=<VERSION>
을 통해 버전을 지정합니다. 빌드 속도를 향상하려면 -j4
추가하세요(하드웨어에 따라 다름).저장소 경로 길이가 255자를 초과하지 않는지 확인하세요. 경로 이름이 길면 빌드 오류가 발생합니다.
Windows 10용 Linux용 Windows 하위 시스템 설치 가이드에 따라 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 배포판에는 위에 나열된 다른 두 가지와 동일한 패키지가 있어야 합니다. 다른 버전의 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.gg/DuYH3Fh