Knarkzel
2 years ago
7 changed files with 161 additions and 188 deletions
@ -1,28 +1,18 @@ |
|||||||
# devkitnix |
# devkitnix |
||||||
|
|
||||||
Collection of devkitPro toolchains using Nix. |
Collection of devkitPro packages for Nix using flakes. |
||||||
To install a toolchain, use following: |
To build a toolchain like devkitPPC, use following: |
||||||
|
|
||||||
``` |
``` |
||||||
git clone https://github.com/zig-homebrew/devkitnix |
nix build github:zig-homebrew/devkitnix#devkitPPC |
||||||
cd devkitnix |
|
||||||
nix-build <toolchain>.nix |
|
||||||
``` |
``` |
||||||
|
|
||||||
## devkitARM |
## Toolchains |
||||||
|
|
||||||
- Game Boy Advance |
``` |
||||||
- Nintendo DS |
└───packages |
||||||
- Nintendo 3DS |
└───x86_64-linux |
||||||
- GP32 |
├───devkitA64: package 'devkitA64' |
||||||
- GP2X |
├───devkitARM: package 'devkitARM' |
||||||
|
└───devkitPPC: package 'devkitPPC' |
||||||
## devkitPPC |
``` |
||||||
|
|
||||||
- GameCube |
|
||||||
- Wii |
|
||||||
- Wii U |
|
||||||
|
|
||||||
## devkitA64 |
|
||||||
|
|
||||||
- Nintendo Switch |
|
||||||
|
@ -1,27 +0,0 @@ |
|||||||
let |
|
||||||
pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/e3583ad6e533a9d8dd78f90bfa93812d390ea187.tar.gz") {}; |
|
||||||
image = pkgs.dockerTools.pullImage { |
|
||||||
imageName = "devkitpro/devkita64"; |
|
||||||
imageDigest = "sha256:70db4c954eea43be5f1bc64c8882154126c99f47927ecb1e6b27fa18004fc961"; |
|
||||||
sha256 = "a05LU5jF5KxQdqWJv+4b3EBRlVCZjBGx69WpFL57wP4="; |
|
||||||
finalImageName = "devkitpro/devkita64"; |
|
||||||
finalImageTag = "20221113"; |
|
||||||
}; |
|
||||||
in { |
|
||||||
devkitA64 = pkgs.stdenv.mkDerivation { |
|
||||||
name = "devkitA64"; |
|
||||||
src = import ./extract-docker.nix pkgs image; |
|
||||||
nativeBuildInputs = [ pkgs.autoPatchelfHook ]; |
|
||||||
buildInputs = [ |
|
||||||
pkgs.stdenv.cc.cc |
|
||||||
pkgs.ncurses6 |
|
||||||
pkgs.zsnes |
|
||||||
]; |
|
||||||
buildPhase = "true"; |
|
||||||
installPhase = '' |
|
||||||
mkdir -p $out |
|
||||||
cp -r $src/{devkitA64,libnx,portlibs,tools} $out |
|
||||||
rm -rf $out/pacman |
|
||||||
''; |
|
||||||
}; |
|
||||||
} |
|
@ -1,27 +0,0 @@ |
|||||||
let |
|
||||||
pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/e3583ad6e533a9d8dd78f90bfa93812d390ea187.tar.gz") {}; |
|
||||||
image = pkgs.dockerTools.pullImage { |
|
||||||
imageName = "devkitpro/devkitarm"; |
|
||||||
imageDigest = "sha256:695d1eb865ca4b908b1f5c4de777b9eef0f927680f0c0654b07721f1df908606"; |
|
||||||
sha256 = "U2Xkt4IYUeU00w/FzlvySzG5lFL2R7kN8sjxL0EEKD4="; |
|
||||||
finalImageName = "devkitpro/devkitarm"; |
|
||||||
finalImageTag = "20221115"; |
|
||||||
}; |
|
||||||
in { |
|
||||||
devkitARM = pkgs.stdenv.mkDerivation { |
|
||||||
name = "devkitARM"; |
|
||||||
src = import ./extract-docker.nix pkgs image; |
|
||||||
nativeBuildInputs = [ pkgs.autoPatchelfHook ]; |
|
||||||
buildInputs = [ |
|
||||||
pkgs.stdenv.cc.cc |
|
||||||
pkgs.ncurses6 |
|
||||||
pkgs.zsnes |
|
||||||
]; |
|
||||||
buildPhase = "true"; |
|
||||||
installPhase = '' |
|
||||||
mkdir -p $out |
|
||||||
cp -r $src/{devkitARM,libgba,libnds,libctru,libmirko,liborcus,portlibs,tools} $out |
|
||||||
rm -rf $out/pacman |
|
||||||
''; |
|
||||||
}; |
|
||||||
} |
|
@ -1,28 +0,0 @@ |
|||||||
let |
|
||||||
pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/e3583ad6e533a9d8dd78f90bfa93812d390ea187.tar.gz") {}; |
|
||||||
image = pkgs.dockerTools.pullImage { |
|
||||||
imageName = "devkitpro/devkitppc"; |
|
||||||
imageDigest = "sha256:d88e21c1a7b5f8070ba7a15aa892e395f118ded9803b0f8223a3d29ba279fff3"; |
|
||||||
sha256 = "nVtz/9mbYveKbvTMj/39EzND7qiLkjBHfqSOgT6SBUY="; |
|
||||||
finalImageName = "devkitpro/devkitppc"; |
|
||||||
finalImageTag = "20220821"; |
|
||||||
}; |
|
||||||
in { |
|
||||||
devkitPPC = pkgs.stdenv.mkDerivation { |
|
||||||
name = "devkitPPC"; |
|
||||||
src = import ./extract-docker.nix pkgs image; |
|
||||||
nativeBuildInputs = [ pkgs.autoPatchelfHook ]; |
|
||||||
buildInputs = [ |
|
||||||
pkgs.stdenv.cc.cc |
|
||||||
pkgs.ncurses5 |
|
||||||
pkgs.expat |
|
||||||
pkgs.xz |
|
||||||
]; |
|
||||||
buildPhase = "true"; |
|
||||||
installPhase = '' |
|
||||||
mkdir -p $out |
|
||||||
cp -r $src/{devkitPPC,libogc,portlibs,tools,wut} $out |
|
||||||
rm -rf $out/pacman |
|
||||||
''; |
|
||||||
}; |
|
||||||
} |
|
@ -1,47 +0,0 @@ |
|||||||
pkgs: image: |
|
||||||
let |
|
||||||
directory = "/opt/devkitpro"; |
|
||||||
in |
|
||||||
pkgs.vmTools.runInLinuxVM ( |
|
||||||
pkgs.runCommand "docker-preload-image" { |
|
||||||
memSize = 12 * 1024; |
|
||||||
buildInputs = [ |
|
||||||
pkgs.curl |
|
||||||
pkgs.kmod |
|
||||||
pkgs.docker |
|
||||||
pkgs.e2fsprogs |
|
||||||
pkgs.utillinux |
|
||||||
]; |
|
||||||
} |
|
||||||
'' |
|
||||||
modprobe overlay |
|
||||||
|
|
||||||
# from https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount |
|
||||||
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup |
|
||||||
cd /sys/fs/cgroup |
|
||||||
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do |
|
||||||
mkdir -p $sys |
|
||||||
if ! mountpoint -q $sys; then |
|
||||||
if ! mount -n -t cgroup -o $sys cgroup $sys; then |
|
||||||
rmdir $sys || true |
|
||||||
fi |
|
||||||
fi |
|
||||||
done |
|
||||||
|
|
||||||
dockerd -H tcp://127.0.0.1:5555 -H unix:///var/run/docker.sock & |
|
||||||
|
|
||||||
until $(curl --output /dev/null --silent --connect-timeout 2 http://127.0.0.1:5555); do |
|
||||||
printf '.' |
|
||||||
sleep 1 |
|
||||||
done |
|
||||||
|
|
||||||
echo load image |
|
||||||
docker load -i ${image} |
|
||||||
|
|
||||||
echo run image |
|
||||||
docker run ${image.destNameTag} tar -C '${toString directory}' -c . | tar -xv --no-same-owner -C $out || true |
|
||||||
|
|
||||||
echo end |
|
||||||
kill %1 |
|
||||||
'' |
|
||||||
) |
|
@ -0,0 +1,27 @@ |
|||||||
|
{ |
||||||
|
"nodes": { |
||||||
|
"nixpkgs": { |
||||||
|
"locked": { |
||||||
|
"lastModified": 1668595291, |
||||||
|
"narHash": "sha256-j8cyfbtT5sAYPYwbERgTDzfD48ZernL0/V668eGpXAM=", |
||||||
|
"owner": "NixOS", |
||||||
|
"repo": "nixpkgs", |
||||||
|
"rev": "6474d93e007e4d165bcf48e7f87de2175c93d10b", |
||||||
|
"type": "github" |
||||||
|
}, |
||||||
|
"original": { |
||||||
|
"owner": "NixOS", |
||||||
|
"ref": "nixos-22.05", |
||||||
|
"repo": "nixpkgs", |
||||||
|
"type": "github" |
||||||
|
} |
||||||
|
}, |
||||||
|
"root": { |
||||||
|
"inputs": { |
||||||
|
"nixpkgs": "nixpkgs" |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
"root": "root", |
||||||
|
"version": 7 |
||||||
|
} |
@ -1,46 +1,131 @@ |
|||||||
{ |
{ |
||||||
inputs = { |
inputs = { |
||||||
nixpkgs = { |
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05"; |
||||||
url = "github:NixOS/nixpkgs/nixos-22.05"; |
|
||||||
}; |
|
||||||
flake-utils = { |
|
||||||
url = "github:numtide/flake-utils"; |
|
||||||
inputs.nixpkgs.follows = "nixpkgs"; |
|
||||||
}; |
|
||||||
}; |
}; |
||||||
|
|
||||||
outputs = { |
outputs = { |
||||||
self, |
self, |
||||||
nixpkgs, |
nixpkgs, |
||||||
flake-utils, |
}: let |
||||||
... |
pkgs = import nixpkgs {system = "x86_64-linux";}; |
||||||
}: |
imageA64 = pkgs.dockerTools.pullImage { |
||||||
flake-utils.lib.eachDefaultSystem (system: let |
imageName = "devkitpro/devkita64"; |
||||||
pkgs = import nixpkgs {}; |
imageDigest = "sha256:70db4c954eea43be5f1bc64c8882154126c99f47927ecb1e6b27fa18004fc961"; |
||||||
image = pkgs.dockerTools.pullImage { |
sha256 = "a05LU5jF5KxQdqWJv+4b3EBRlVCZjBGx69WpFL57wP4="; |
||||||
imageName = "devkitpro/devkitppc"; |
finalImageName = "devkitpro/devkita64"; |
||||||
imageDigest = "sha256:d88e21c1a7b5f8070ba7a15aa892e395f118ded9803b0f8223a3d29ba279fff3"; |
finalImageTag = "20221113"; |
||||||
sha256 = "nVtz/9mbYveKbvTMj/39EzND7qiLkjBHfqSOgT6SBUY="; |
}; |
||||||
finalImageName = "devkitpro/devkitppc"; |
imageARM = pkgs.dockerTools.pullImage { |
||||||
finalImageTag = "20220821"; |
imageName = "devkitpro/devkitarm"; |
||||||
}; |
imageDigest = "sha256:695d1eb865ca4b908b1f5c4de777b9eef0f927680f0c0654b07721f1df908606"; |
||||||
in { |
sha256 = "U2Xkt4IYUeU00w/FzlvySzG5lFL2R7kN8sjxL0EEKD4="; |
||||||
devkitPPC = pkgs.stdenv.mkDerivation { |
finalImageName = "devkitpro/devkitarm"; |
||||||
name = "devkitPPC"; |
finalImageTag = "20221115"; |
||||||
src = import ./extract-docker.nix pkgs image; |
}; |
||||||
nativeBuildInputs = [ pkgs.autoPatchelfHook ]; |
imagePPC = pkgs.dockerTools.pullImage { |
||||||
buildInputs = [ |
imageName = "devkitpro/devkitppc"; |
||||||
pkgs.stdenv.cc.cc |
imageDigest = "sha256:d88e21c1a7b5f8070ba7a15aa892e395f118ded9803b0f8223a3d29ba279fff3"; |
||||||
pkgs.ncurses5 |
sha256 = "nVtz/9mbYveKbvTMj/39EzND7qiLkjBHfqSOgT6SBUY="; |
||||||
pkgs.expat |
finalImageName = "devkitpro/devkitppc"; |
||||||
pkgs.xz |
finalImageTag = "20220821"; |
||||||
]; |
}; |
||||||
buildPhase = "true"; |
extractDocker = image: |
||||||
installPhase = '' |
pkgs.vmTools.runInLinuxVM ( |
||||||
mkdir -p $out |
pkgs.runCommand "docker-preload-image" { |
||||||
cp -r $src/{devkitPPC,libogc,portlibs,tools,wut} $out |
memSize = 10 * 1024; |
||||||
rm -rf $out/pacman |
buildInputs = [ |
||||||
''; |
pkgs.curl |
||||||
}; |
pkgs.kmod |
||||||
}); |
pkgs.docker |
||||||
|
pkgs.e2fsprogs |
||||||
|
pkgs.utillinux |
||||||
|
]; |
||||||
|
} |
||||||
|
'' |
||||||
|
modprobe overlay |
||||||
|
|
||||||
|
# from https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount |
||||||
|
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup |
||||||
|
cd /sys/fs/cgroup |
||||||
|
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do |
||||||
|
mkdir -p $sys |
||||||
|
if ! mountpoint -q $sys; then |
||||||
|
if ! mount -n -t cgroup -o $sys cgroup $sys; then |
||||||
|
rmdir $sys || true |
||||||
|
fi |
||||||
|
fi |
||||||
|
done |
||||||
|
|
||||||
|
dockerd -H tcp://127.0.0.1:5555 -H unix:///var/run/docker.sock & |
||||||
|
|
||||||
|
until $(curl --output /dev/null --silent --connect-timeout 2 http://127.0.0.1:5555); do |
||||||
|
printf '.' |
||||||
|
sleep 1 |
||||||
|
done |
||||||
|
|
||||||
|
echo load image |
||||||
|
docker load -i ${image} |
||||||
|
|
||||||
|
echo run image |
||||||
|
docker run ${image.destNameTag} tar -C /opt/devkitpro -c . | tar -xv --no-same-owner -C $out || true |
||||||
|
|
||||||
|
echo end |
||||||
|
kill %1 |
||||||
|
'' |
||||||
|
); |
||||||
|
in { |
||||||
|
packages.x86_64-linux.devkitA64 = pkgs.stdenv.mkDerivation { |
||||||
|
name = "devkitA64"; |
||||||
|
src = extractDocker imageA64; |
||||||
|
nativeBuildInputs = [ |
||||||
|
pkgs.autoPatchelfHook |
||||||
|
]; |
||||||
|
buildInputs = [ |
||||||
|
pkgs.stdenv.cc.cc |
||||||
|
pkgs.ncurses6 |
||||||
|
pkgs.zsnes |
||||||
|
]; |
||||||
|
buildPhase = "true"; |
||||||
|
installPhase = '' |
||||||
|
mkdir -p $out |
||||||
|
cp -r $src/{devkitA64,libnx,portlibs,tools} $out |
||||||
|
rm -rf $out/pacman |
||||||
|
''; |
||||||
|
}; |
||||||
|
|
||||||
|
packages.x86_64-linux.devkitARM = pkgs.stdenv.mkDerivation { |
||||||
|
name = "devkitARM"; |
||||||
|
src = extractDocker imageARM; |
||||||
|
nativeBuildInputs = [pkgs.autoPatchelfHook]; |
||||||
|
buildInputs = [ |
||||||
|
pkgs.stdenv.cc.cc |
||||||
|
pkgs.ncurses6 |
||||||
|
pkgs.zsnes |
||||||
|
]; |
||||||
|
buildPhase = "true"; |
||||||
|
installPhase = '' |
||||||
|
mkdir -p $out |
||||||
|
cp -r $src/{devkitARM,libgba,libnds,libctru,libmirko,liborcus,portlibs,tools} $out |
||||||
|
rm -rf $out/pacman |
||||||
|
''; |
||||||
|
}; |
||||||
|
|
||||||
|
packages.x86_64-linux.devkitPPC = pkgs.stdenv.mkDerivation { |
||||||
|
name = "devkitPPC"; |
||||||
|
src = extractDocker imagePPC; |
||||||
|
nativeBuildInputs = [pkgs.autoPatchelfHook]; |
||||||
|
buildInputs = [ |
||||||
|
pkgs.stdenv.cc.cc |
||||||
|
pkgs.ncurses5 |
||||||
|
pkgs.expat |
||||||
|
pkgs.xz |
||||||
|
]; |
||||||
|
buildPhase = "true"; |
||||||
|
installPhase = '' |
||||||
|
mkdir -p $out |
||||||
|
cp -r $src/{devkitPPC,libogc,portlibs,tools,wut} $out |
||||||
|
rm -rf $out/pacman |
||||||
|
''; |
||||||
|
}; |
||||||
|
}; |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue