Support Nix package manager (#1158)

* support nix package manager

* add glibc

* use /usr/bin/env python3 shebang
This commit is contained in:
Alex Bates 2024-01-23 12:08:13 +00:00 committed by GitHub
parent 1d0c818088
commit e6bf24bf95
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 109 additions and 4 deletions

View File

@ -6,7 +6,7 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.yaml]
[*.{yaml,nix}]
indent_size = 2
[{Makefile,*.mk}]

View File

@ -5,6 +5,7 @@ This repository supports:
- [Linux](#unix)
- [macOS](#unix)
- [Windows Subsystem for Linux 2](#wsl-2)
- [Nix](#nix)
If you encounter any issues setting up the repo, please feel free to [reach out to us on Discord](https://discord.gg/PgcMpQTzh5).
@ -59,6 +60,12 @@ Continue onto [building](#building)
If you have Visual Studio Code, you can type `code .` to open the repo within it.
`Ctrl + J` opens up a Linux terminal within VS Code.
## Nix
1. Install [Nix](https://nixos.org/download.html)
2. Clone the repository and `cd` into it
3. Enter a shell with `NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 NIX_BUILD_CORES=0 nix-shell`
4. Continue with [building](#building)
# Building

98
shell.nix Normal file
View File

@ -0,0 +1,98 @@
{ pkgsNative ? import <nixpkgs> {}
, pkgsCross ? import (builtins.fetchTarball {
# This commit uses binutils 2.39. We don't want binutils 2.40+ because of a performance regression in ld.
url = "https://github.com/NixOS/nixpkgs/archive/55070e598e0e03d1d116c49b9eff322ef07c6ac6.tar.gz";
}) {
crossSystem = { config = "mips-linux-gnu"; };
}
}:
let
gcc-papermario = builtins.fetchurl {
url =
"https://github.com/pmret/gcc-papermario/releases/download/master/linux.tar.gz";
sha256 = "1156cf0d6a88a64c20e2a10fc9445d99cb9a38518f432b1669528dfa82ebb45f";
};
binutils-papermario = builtins.fetchurl {
url =
"https://github.com/pmret/binutils-papermario/releases/download/master/linux.tar.gz";
sha256 = "c3cd88db47ac41f78b557042c7e7ad47ac9c04cee6f0d1069a489c1c9e8c103c";
};
mips-gcc-272 = builtins.fetchurl {
url =
"https://github.com/decompals/mips-gcc-2.7.2/releases/download/main/gcc-2.7.2-linux.tar.gz";
sha256 = "ff3e299c1d952c0a5cb39f7790a208d0c547cf93986eb5607f820c935cedc288";
};
mips-binutils-26 = builtins.fetchurl {
url =
"https://github.com/decompals/mips-binutils-2.6/releases/download/main/binutils-2.6-linux.tar.gz";
sha256 = "405a7ddb29a0b2eb472b167e8f15472223df1eff3093a5ff31d6e545d3a6c670";
};
egcs-binutils = builtins.fetchurl {
url =
"https://github.com/decompals/mips-binutils-egcs-2.9.5/releases/latest/download/mips-binutils-egcs-2.9.5-linux.tar.gz";
sha256 = "04pdjk5n7xw7y4xamc4nisq0vdipsxgpq3jmd7j48gfn0hx9kz21";
};
egcs-gcc = builtins.fetchurl {
url =
"https://github.com/decompals/mips-gcc-egcs-2.91.66/releases/latest/download/mips-gcc-egcs-2.91.66-linux.tar.gz";
sha256 = "03v1ci7j0hi53z639rwj60xwz0zzi82a9azi0yiw818r754faql0";
};
ido = builtins.fetchurl {
url =
"https://github.com/decompals/ido-static-recomp/releases/download/v0.2/ido-5.3-recomp-ubuntu-latest.tar.gz";
sha256 = "65b42b9673b6f439e45e5dafab1eca4fc006a68cda87bdb55681f027d9fb903c";
};
in pkgsCross.mkShell {
nativeBuildInputs = (with pkgsNative; [
ninja
zlib
libyaml
patchelf
glibc
python3
python3Packages.virtualenv
cargo
rustc
]);
buildInputs = (with pkgsCross; [
gcc
binutils
]);
shellHook = ''
# Install compilers
# TODO: use pkgs.stdenv.mkDerivation instead of extracting here
tar zx -C tools/build/cc/gcc -f ${gcc-papermario}
tar zx -C tools/build/cc/gcc -f ${binutils-papermario}
tar zx -C tools/build/cc/gcc2.7.2 -f ${mips-gcc-272}
tar zx -C tools/build/cc/gcc2.7.2 -f ${mips-binutils-26}
tar zx -C tools/build/cc/ido5.3 -f ${ido}
tar zx -C tools/build/cc/egcs -f ${egcs-binutils}
tar zx -C tools/build/cc/egcs -f ${egcs-gcc}
# Fix 'file not found' errors since we're using a newer glibc
for dir in $(find tools/build/cc -type d); do
for f in $(find $dir -type f); do
# Silence errors instead of thinking hard about this
${pkgsNative.patchelf}/bin/patchelf --set-interpreter "${pkgsNative.glibc}/lib/ld-linux-x86-64.so.2" $f 2>/dev/null
done
done
# Install pigment64
export PATH=$HOME/.cargo/bin:$PATH
cargo install pigment64
# Install python packages
virtualenv venv
source venv/bin/activate
pip install -r ${./requirements.txt}
pip install -r ${./requirements_extra.txt}
'';
}

View File

@ -1,4 +1,4 @@
#! /usr/bin/python3
#! /usr/bin/env python3
import argparse
from sys import path

View File

@ -362,7 +362,7 @@ def does_iconv_work() -> bool:
stdin = "エリア _".encode("utf-8")
def run(command, stdin):
sub = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, input=stdin)
sub = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, input=stdin, cwd=ROOT)
return sub.stdout
expected_stdout = run(["tools/build/iconv.py", "UTF-8", "CP932"], stdin)

View File

@ -1,4 +1,4 @@
#!/usr/bin/python3
#!/usr/bin/env python3
import argparse
import sys