A GameCube & Wii decompilation toolkit
Go to file
Luke Street 9f4cc2f542 Add `elf split`; rework asm generation
`elf split` allows splitting an ELF
directly into relocatable object files
2022-12-24 03:10:12 -05:00
.github/workflows Version 0.2.1 2022-12-14 13:20:22 -05:00
assets Version 0.2.0 2022-12-10 01:51:42 -05:00
src Add `elf split`; rework asm generation 2022-12-24 03:10:12 -05:00
.gitignore Add -o option to shasum 2022-11-27 23:43:46 -05:00
Cargo.lock Version 0.2.2 2022-12-14 20:39:59 -05:00
Cargo.toml Version 0.2.2 2022-12-14 20:39:59 -05:00
LICENSE-APACHE Initial commit 2022-11-27 17:02:32 -05:00
LICENSE-MIT Initial commit 2022-11-27 17:02:32 -05:00
README.md Update README.md 2022-12-14 21:21:04 -05:00
build.rs Version 0.2.1 2022-12-14 13:20:22 -05:00
deny.toml Initial commit 2022-11-27 17:02:32 -05:00
rustfmt.toml Initial commit 2022-11-27 17:02:32 -05:00

README.md

decomp-toolkit Build Status

GameCube/Wii decompilation project tools.

This provides various commands that assist with creating a build system that works across all major platforms without dealing with platform-specific C compilers, UNIX compatibility layers like msys2, or other idiosyncrasies.

Commands

ar create

Create a static library (.a) from the input objects.

$ dtk ar create out.a input_1.o input_2.o
# or
$ echo input_1.o >> rspfile
$ echo input_2.o >> rspfile
$ dtk ar create out.a @rspfile

demangle

Demangles CodeWarrior C++ symbols. A thin wrapper for cwdemangle.

$ dtk demangle 'BuildLight__9CGuiLightCFv'
CGuiLight::BuildLight() const

elf disasm

Disassemble an unstripped CodeWarrior ELF file into fully-split & fully-shiftable assembly files.

$ dtk disasm input.elf out

elf fixup

Fixes issues with GNU assembler-built objects to ensure compatibility with mwldeppc.

  • Strips empty sections
  • Generates section symbols for all allocatable sections
  • Where possible, replaces section-relative relocations with direct relocations.
  • Adds an (asm) suffix to the file symbol. (For matching progress calculation)
# input and output can be the same
$ dtk elf fixup file.o file.o

elf2dol

Creates a DOL file from the provided ELF file.

$ dtk elf2dol input.elf output.dol

map

Processes CodeWarrior map files and provides information about symbols and TUs.

$ dtk map entries Game.MAP 'Unit.o'
# Outputs all symbols that are referenced by Unit.o
# This is useful for finding deduplicated weak functions,
# which only show on first use in the link map.

$ dtk map symbol Game.MAP 'Function__5ClassFv'
# Outputs reference information for Function__5ClassFv
# CodeWarrior link maps can get very deeply nested,
# so this is useful for emitting direct references
# in a readable format.

shasum

Calculate and verify SHA-1 hashes.

$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff  baserom.dol

$ dtk shasum -c baserom.sha1 
baserom.dol: OK