mirror of
https://github.com/n64decomp/mk64.git
synced 2024-11-26 22:50:47 +00:00
parent
2d3278d073
commit
e2c19fd4bc
54
.github/workflows/doxygen-and-linux-test.yml
vendored
Normal file
54
.github/workflows/doxygen-and-linux-test.yml
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
name: Doxygen GitHub Pages Deploy Action
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.LINUX_DEPLOY_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt install build-essential cmake pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
||||
- name: Install Doxygen
|
||||
run: |
|
||||
sudo apt-get install graphviz doxygen
|
||||
wget https://www.doxygen.nl/files/doxygen-1.10.0.linux.bin.tar.gz
|
||||
tar -xzf doxygen-*.linux.bin.tar.gz
|
||||
|
||||
- name: make badge
|
||||
run: |
|
||||
pip install pybadges
|
||||
python3 progress.py badge
|
||||
|
||||
- name: Generate Doxygen documentation
|
||||
run: |
|
||||
./doxygen-*/bin/doxygen Doxyfile
|
||||
|
||||
- name: Create .nojekyll (ensures pages with underscores work on gh pages)
|
||||
run: touch docs/html/.nojekyll
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: JamesIves/github-pages-deploy-action@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
folder: docs/html
|
36
.github/workflows/doxygen-gh-pages.yml
vendored
36
.github/workflows/doxygen-gh-pages.yml
vendored
@ -1,36 +0,0 @@
|
||||
name: Doxygen GitHub Pages Deploy Action
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: "true"
|
||||
|
||||
- name: Install Doxygen
|
||||
run: |
|
||||
sudo apt-get install graphviz doxygen -y
|
||||
wget https://www.doxygen.nl/files/doxygen-1.10.0.linux.bin.tar.gz
|
||||
tar -xzf doxygen-*.linux.bin.tar.gz
|
||||
|
||||
- name: Generate Doxygen documentation
|
||||
run: |
|
||||
./doxygen-*/bin/doxygen Doxyfile
|
||||
|
||||
- name: Create .nojekyll (ensures pages with underscores work on gh pages)
|
||||
run: touch docs/html/.nojekyll
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: JamesIves/github-pages-deploy-action@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
folder: docs/html
|
30
.github/workflows/linux-compile.yml
vendored
Normal file
30
.github/workflows/linux-compile.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
name: Linux Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.LINUX_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt install build-essential cmake pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
32
.github/workflows/macos-compile.yml
vendored
Normal file
32
.github/workflows/macos-compile.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: Macos Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: 0
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.MACOS_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew update
|
||||
brew install python3 capstone coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils cmake
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
31
.github/workflows/windows-compile.yml
vendored
Normal file
31
.github/workflows/windows-compile.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
name: Windows Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.WINDOWS_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
Invoke-WebRequest https://github.com/coco875/mk64-tools/releases/download/v0.0.6/mips-tools-chain-windows.zip -OutFile mips-tools-chain-windows.zip
|
||||
Expand-Archive mips-tools-chain-windows.zip -DestinationPath mips-tools-chain-windows
|
||||
Copy-Item -Path mips-tools-chain-windows/mingw64 -Destination tools -Recurse
|
||||
- name: Build
|
||||
run: |
|
||||
Copy-Item -Path complementary_file/* -Destination . -Recurse
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
python tools/windows_build.py
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -93,8 +93,12 @@ expected/*
|
||||
|
||||
# Doxygen
|
||||
docs/html/*
|
||||
docs/doxygen_syms.md
|
||||
|
||||
# windows build
|
||||
mingw64/
|
||||
.ash_history
|
||||
!tools/ido-recomp/*/*
|
||||
!tools/ido-recomp/*/*
|
||||
|
||||
# torch
|
||||
torch.hash.yml
|
||||
|
2
Doxyfile
2
Doxyfile
@ -947,7 +947,7 @@ INPUT = docs/ \
|
||||
src/ \
|
||||
include/ \
|
||||
courses/ \
|
||||
tools/doxygen_syms.md
|
||||
docs/doxygen_syms.md
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
5
Makefile
5
Makefile
@ -176,8 +176,7 @@ ifeq ($(DUMMY),FAIL)
|
||||
endif
|
||||
|
||||
ifeq ($(filter clean distclean print-%,$(MAKECMDGOALS)),)
|
||||
|
||||
# Make tools if out of date
|
||||
# Make tools if out of date
|
||||
DUMMY != make -C $(TOOLS_DIR)
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to build tools)
|
||||
@ -356,7 +355,7 @@ BIN2C := $(PYTHON) $(TOOLS_DIR)/bin2c.py
|
||||
EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
|
||||
ASSET_EXTRACT := $(PYTHON) $(TOOLS_DIR)/new_extract_assets.py
|
||||
LINKONLY_GENERATOR := $(PYTHON) $(TOOLS_DIR)/linkonly_generator.py
|
||||
TORCH := tools/torch/cmake-build-release/torch
|
||||
TORCH := $(TOOLS_DIR)/torch/cmake-build-release/torch
|
||||
EMULATOR = mupen64plus
|
||||
EMU_FLAGS = --noosd
|
||||
LOADER = loader64
|
||||
|
25
README.md
25
README.md
@ -1,4 +1,4 @@
|
||||
# Mario Kart 64
|
||||
# Mario Kart 64
|
||||
This work-in-progress decompilation of Mario Kart 64 pursues historical and educational elements within the game found via taking it apart and putting it back together. Inspiration to do so not only emanates from the game's hardware and technology but also its immensely positive effects on the cultures and families of nearly every nationality.
|
||||
|
||||
This repository does not contain assets. Compiling requires asset extraction from a prior copy of the game.
|
||||
@ -11,24 +11,26 @@ It supports and builds the following versions:
|
||||
| mk64.eu-1.0.z64 | EUR 1.0 | a729039453210b84f17019dda3f248d5888f7690 |
|
||||
| mk64.eu-final.z64 | EUR 1.1 | f6b5f519dd57ea59e9f013cc64816e9d273b2329 |
|
||||
|
||||
status: [![Linux Compile test](https://github.com/n64decomp/mk64/actions/workflows/linux-compile.yml/badge.svg)](https://github.com/n64decomp/mk64/actions/workflows/linux-compile.yml)
|
||||
|
||||
## Progress
|
||||
|
||||
Total progress consists of all code segments together.
|
||||
|
||||
Game code progress consists of `main`, `ending` and `racing`.
|
||||
|
||||
[![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=totalProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=gameProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
![Build Status](https://n64decomp.github.io/mk64/total_progress.svg)
|
||||
![Build Status](https://n64decomp.github.io/mk64/game_progress.svg)
|
||||
|
||||
[![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=bytesLeft)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=m2c)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=nonmatching)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
![Build Status](https://n64decomp.github.io/mk64/asm_funcs.svg)
|
||||
![Build Status](https://n64decomp.github.io/mk64/m2c_funcs.svg)
|
||||
![Build Status](https://n64decomp.github.io/mk64/nonmatching_funcs.svg)
|
||||
|
||||
- [![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=mainProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=endingProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=racingProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=audioProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [![Build Status](https://ci.valandil.ca/buildStatus/icon?job=mk64%2Fmaster&config=osProgress)](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- ![Build Status](https://n64decomp.github.io/mk64/seg_main_progress.svg)
|
||||
- ![Build Status](https://n64decomp.github.io/mk64/seg_ending_progress.svg)
|
||||
- ![Build Status](https://n64decomp.github.io/mk64/seg_racing_progress.svg)
|
||||
- ![Build Status](https://n64decomp.github.io/mk64/audio_progress.svg)
|
||||
- ![Build Status](https://n64decomp.github.io/mk64/libultra_progress.svg)
|
||||
|
||||
## Quick Start
|
||||
|
||||
@ -39,7 +41,6 @@ Extract assets
|
||||
```
|
||||
make assets -j
|
||||
```
|
||||
```
|
||||
make -j
|
||||
```
|
||||
|
||||
|
@ -30,11 +30,11 @@ Review the [n64decomp/sm64](https://github.com/n64decomp/sm64) readme for instru
|
||||
# Windows
|
||||
|
||||
- Clone the repo or download the zip.
|
||||
- Download and extract the toolchain from [here](https://github.com/coco875/mk64-tools/releases/download/v0.0.6/mips-tools-chain-windows.zip)
|
||||
- Download and extract the toolchain from [here](https://github.com/coco875/mk64-tools/releases/download/v0.0.7/mips-tools-chain-windows.zip)
|
||||
|
||||
### Setup
|
||||
- Place the `mingw64` folder from the toolchain into the tools folder like so: `mk64/tools/mingw64`.
|
||||
- Open a terminal (cmd or powershell) in the repo folder and run `"tools\mingw64\w64devkit.exe"` and after `make`
|
||||
- Open a terminal (cmd or powershell) in the repo folder and run `"tools\mingw64\w64devkit.exe"` and after `make assets && make -j`
|
||||
- Wait for the build to finish and Enjoy!
|
||||
|
||||
# macOS
|
||||
|
@ -92,4 +92,4 @@ p {
|
||||
|
||||
html.dark-mode .clipboard {
|
||||
fill: white;
|
||||
}
|
||||
}
|
@ -57,4 +57,4 @@ Complete resources for learning about mk64 decomp
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@endhtmlonly
|
||||
@endhtmlonly
|
52
progress.py
52
progress.py
@ -5,10 +5,11 @@ import json
|
||||
import csv
|
||||
import os
|
||||
import re
|
||||
from pybadges import badge
|
||||
|
||||
# Script arguments.
|
||||
parser = argparse.ArgumentParser(description="Computes current progress throughout the whole project.")
|
||||
parser.add_argument("format", nargs="?", default="text", choices=["text", "verbose", "totalBadge", "gameBadge", "mainBadge", "endingBadge", "racingBadge", "audioBadge", "osBadge", "bytesToDecompile", "globalAsmFuncs", "m2cFuncs", "nonmatchingFuncs"])
|
||||
parser.add_argument("format", nargs="?", default="text", choices=["text", "verbose", "totalBadge", "gameBadge", "mainBadge", "endingBadge", "racingBadge", "audioBadge", "osBadge", "bytesToDecompile", "globalAsmFuncs", "m2cFuncs", "nonmatchingFuncs", "badge"])
|
||||
parser.add_argument("-d", "--debug", dest='debug', action='store_true',
|
||||
help="Adds additional debug information, outputs files parsed and score for each file")
|
||||
parser.add_argument("-n", "--nonmatching", dest='nonmatching', action='store_true',
|
||||
@ -24,7 +25,7 @@ def GetNonMatchingFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(NON_MATCHING_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
functions += re.findall(NON_MATCHING_PRAGMA_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
@ -38,7 +39,7 @@ def CountMipsToCFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(MIPS_TO_C_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
return functions
|
||||
@ -51,7 +52,7 @@ def CountGlobalAsmFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(GLOBAL_ASM_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
return functions
|
||||
@ -65,7 +66,7 @@ def GetCFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
source_code = f.read()
|
||||
|
||||
# Parse regex pattern
|
||||
@ -523,5 +524,46 @@ elif args.format == 'verbose':
|
||||
print(str(segRacing) + "/" + str(seg_racing_size) + " bytes " + adjective + " in segRacing " + str(segRacingPct) + "%")
|
||||
print(str(audio) + "/" + str(audio_size) + " bytes " + adjective + " in audio " + str(audioPct) + "%")
|
||||
print(str(libultra) + "/" + str(libultra_size) + " bytes " + adjective + " in libultra " + str(libultraPct) + "%\n")
|
||||
|
||||
elif args.format == 'badge':
|
||||
adjective = "decompiled" if args.nonmatching else "matched"
|
||||
|
||||
badge_size_left = badge(left_text="Size left", right_text=str(remaining_size), right_color="blue")
|
||||
with open("docs/html/size_left.svg", "w") as f:
|
||||
f.write(badge_size_left)
|
||||
badge_total_size = badge(left_text="Total size", right_text=str(total_code_size), right_color="blue")
|
||||
with open("docs/html/total_size.svg", "w") as f:
|
||||
f.write(badge_total_size)
|
||||
badge_total_pct = badge(left_text="Total progress", right_text=str(round(totalPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/total_progress.svg", "w") as f:
|
||||
f.write(badge_total_pct)
|
||||
badge_game_pct = badge(left_text="Game progress", right_text=str(round(gamePct, 2))+"%", right_color="green")
|
||||
with open("docs/html/game_progress.svg", "w") as f:
|
||||
f.write(badge_game_pct)
|
||||
badge_asm_funcs = badge(left_text="ASM functions", right_text=str(TotalGlobalAsmFunctions), right_color="blue")
|
||||
with open("docs/html/asm_funcs.svg", "w") as f:
|
||||
f.write(badge_asm_funcs)
|
||||
badge_nonmatching_funcs = badge(left_text="NON_MATCHING functions", right_text=str(TotalNonMatchingFunctions), right_color="blue")
|
||||
with open("docs/html/nonmatching_funcs.svg", "w") as f:
|
||||
f.write(badge_nonmatching_funcs)
|
||||
badge_m2c_funcs = badge(left_text="MIPS_TO_C functions", right_text=str(TotalMipsToCFunctions), right_color="blue")
|
||||
with open("docs/html/m2c_funcs.svg", "w") as f:
|
||||
f.write(badge_m2c_funcs)
|
||||
badge_seg_main = badge(left_text="Main progress", right_text=str(round(segMainPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_main_progress.svg", "w") as f:
|
||||
f.write(badge_seg_main)
|
||||
badge_seg_ending = badge(left_text="Ending progress", right_text=str(round(segEndingPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_ending_progress.svg", "w") as f:
|
||||
f.write(badge_seg_ending)
|
||||
badge_seg_racing = badge(left_text="Racing progress", right_text=str(round(segRacingPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_racing_progress.svg", "w") as f:
|
||||
f.write(badge_seg_racing)
|
||||
badge_audio = badge(left_text="Audio progress", right_text=str(round(audioPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/audio_progress.svg", "w") as f:
|
||||
f.write(badge_audio)
|
||||
badge_libultra = badge(left_text="Libultra progress", right_text=str(round(libultraPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/libultra_progress.svg", "w") as f:
|
||||
f.write(badge_libultra)
|
||||
|
||||
else:
|
||||
print("Unknown format argument: " + args.format)
|
||||
|
2
tools/.gitignore
vendored
2
tools/.gitignore
vendored
@ -5,6 +5,6 @@
|
||||
/displaylist_packer
|
||||
/tkmk00
|
||||
/extract_data_for_mio
|
||||
/torch/build-cmake/*
|
||||
/torch/cmake-build-release/*
|
||||
__pycache__
|
||||
*.pyc
|
||||
|
@ -55,7 +55,7 @@ if __name__ == "__main__":
|
||||
doxygen_formatted_content = process_map_file(map_file_path)
|
||||
|
||||
# Specify the output file path
|
||||
output_file_path = "tools/doxygen_syms.md"
|
||||
output_file_path = "docs/doxygen_syms.md"
|
||||
|
||||
# Write the result to the output file
|
||||
with open(output_file_path, 'w') as output_file:
|
||||
|
19841
tools/doxygen_syms.md
19841
tools/doxygen_syms.md
File diff suppressed because it is too large
Load Diff
6
tools/windows_build.py
Normal file
6
tools/windows_build.py
Normal file
@ -0,0 +1,6 @@
|
||||
import subprocess
|
||||
|
||||
bp = subprocess.Popen("tools/mingw64/w64devkit.exe", stdin=subprocess.PIPE)
|
||||
bp.stdin.write(b"make assets && make -j && exit\n")
|
||||
bp.stdin.close()
|
||||
exit(bp.wait())
|
Loading…
Reference in New Issue
Block a user