144 lines
4.6 KiB
Nix
144 lines
4.6 KiB
Nix
{
|
|
description = "Wii game decompilation dev environment";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
decomp-toolkit = pkgs.stdenv.mkDerivation rec {
|
|
pname = "decomp-toolkit";
|
|
version = "1.8.4";
|
|
src = pkgs.fetchurl {
|
|
url = "https://github.com/encounter/decomp-toolkit/releases/download/v${version}/dtk-linux-x86_64";
|
|
sha256 = "086k0cxspfhjmii51k1w8n2mxdnc9k0fc26ks75f1g818jcv31kw";
|
|
};
|
|
dontUnpack = true;
|
|
nativeBuildInputs = [ pkgs.autoPatchelfHook ];
|
|
buildInputs = [ pkgs.stdenv.cc.cc.lib ];
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp $src $out/bin/dtk
|
|
chmod +x $out/bin/dtk
|
|
'';
|
|
};
|
|
|
|
objdiff = pkgs.stdenv.mkDerivation rec {
|
|
pname = "objdiff";
|
|
version = "3.8.1";
|
|
src = pkgs.fetchurl {
|
|
url = "https://github.com/encounter/objdiff/releases/download/v${version}/objdiff-linux-x86_64";
|
|
sha256 = "1wf0y42w04v0cl3bpwc23wdvyylkqhv3jxbw4iwl8wlkbvrrqlkf";
|
|
};
|
|
dontUnpack = true;
|
|
nativeBuildInputs = [ pkgs.autoPatchelfHook ];
|
|
buildInputs = [
|
|
pkgs.stdenv.cc.cc.lib
|
|
pkgs.fontconfig
|
|
pkgs.libGL
|
|
pkgs.libxcb
|
|
pkgs.libx11
|
|
pkgs.libxkbcommon
|
|
pkgs.wayland
|
|
];
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp $src $out/bin/objdiff
|
|
chmod +x $out/bin/objdiff
|
|
'';
|
|
};
|
|
|
|
wibo = pkgs.stdenv.mkDerivation rec {
|
|
pname = "wibo";
|
|
version = "1.0.3";
|
|
src = pkgs.fetchurl {
|
|
url = "https://github.com/decompals/wibo/releases/download/${version}/wibo-x86_64";
|
|
sha256 = "f99iCxUXRClrm7kzGNjEAJ09PpjiNxim7an77Ezvuyo=";
|
|
};
|
|
dontUnpack = true;
|
|
nativeBuildInputs = [ pkgs.autoPatchelfHook ];
|
|
buildInputs = [ pkgs.stdenv.cc.cc.lib ];
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp $src $out/bin/wibo
|
|
chmod +x $out/bin/wibo
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
devShells.default = pkgs.mkShell {
|
|
name = "steamboat-willie-decomp";
|
|
|
|
packages = [
|
|
# Decomp project tools
|
|
decomp-toolkit
|
|
objdiff
|
|
wibo
|
|
] ++ (with pkgs; [
|
|
# Reverse engineering
|
|
ghidra
|
|
radare2
|
|
|
|
# Wii/GC disc tools
|
|
wiimms-iso-tools
|
|
|
|
# Build tools
|
|
ninja
|
|
cmake
|
|
gnumake
|
|
pkg-config
|
|
|
|
# Utilities
|
|
git
|
|
python3
|
|
wget
|
|
curl
|
|
jq
|
|
patchelf
|
|
unzip
|
|
]);
|
|
|
|
shellHook = ''
|
|
echo "=== Steamboat Willie Decomp Dev Shell ==="
|
|
echo ""
|
|
echo "Tools available:"
|
|
echo " dtk - decomp-toolkit v1.8.4"
|
|
echo " objdiff - objdiff v3.8.1"
|
|
echo " wibo - Win32 wrapper v1.0.3 (runs CodeWarrior exes)"
|
|
echo " ghidra - reverse engineering IDE"
|
|
echo " radare2 - CLI disassembler"
|
|
echo " wit - Wiimms ISO Tools"
|
|
echo ""
|
|
|
|
# Point DEVKITPPC at a devkitPro install if one exists.
|
|
if [ -d "/opt/devkitpro/devkitPPC" ]; then
|
|
export DEVKITPRO=/opt/devkitpro
|
|
export DEVKITPPC=/opt/devkitpro/devkitPPC
|
|
echo "DEVKITPPC found: $DEVKITPPC"
|
|
else
|
|
echo "Note: devkitPPC is not installed."
|
|
echo " - For Metrowerks CodeWarrior games (most GC + many Wii),"
|
|
echo " devkitPPC is NOT required. dtk + wibo handle everything."
|
|
echo " - For GCC-compiled games (needing powerpc-eabi-gcc), install"
|
|
echo " devkitPro first:"
|
|
echo " wget https://apt.devkitpro.org/install-devkitpro-pacman"
|
|
echo " sudo ./install-devkitpro-pacman"
|
|
echo " sudo dkp-pacman -S devkitPPC"
|
|
fi
|
|
echo ""
|
|
echo "Quick start:"
|
|
echo " wit EXTRACT game.iso -o ./disc/"
|
|
echo " dtk disc info game.iso"
|
|
echo " dtk dol config sys/main.dol -o config.yml"
|
|
echo " python configure.py"
|
|
echo " ninja"
|
|
'';
|
|
};
|
|
}
|
|
);
|
|
} |