mirror of
https://git.gay/xqtc/nixos-config
synced 2024-11-23 22:03:54 +01:00
109 lines
3 KiB
Nix
109 lines
3 KiB
Nix
{
|
|
stdenv,
|
|
buildPackages,
|
|
lib,
|
|
fetchFromGitHub,
|
|
python3,
|
|
dtc,
|
|
imagemagick,
|
|
isRelease ? false,
|
|
withTools ? true,
|
|
withChainloading ? false,
|
|
rust-bin ? null,
|
|
customLogo ? null,
|
|
}:
|
|
assert withChainloading -> rust-bin != null; let
|
|
pyenv = python3.withPackages (p:
|
|
with p; [
|
|
construct
|
|
pyserial
|
|
]);
|
|
|
|
rustenv = rust-bin.selectLatestNightlyWith (toolchain:
|
|
toolchain.minimal.override {
|
|
targets = ["aarch64-unknown-none-softfloat"];
|
|
});
|
|
in
|
|
stdenv.mkDerivation rec {
|
|
pname = "m1n1";
|
|
version = "1.4.11";
|
|
|
|
src = fetchFromGitHub {
|
|
# tracking: https://src.fedoraproject.org/rpms/m1n1
|
|
owner = "AsahiLinux";
|
|
repo = "m1n1";
|
|
rev = "v${version}";
|
|
hash = "sha256-1lWI9tcOxgrcfaPfdSF+xRE9qofhNR3SQiA4h86VVeE=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
makeFlags =
|
|
["ARCH=${stdenv.cc.targetPrefix}"]
|
|
++ lib.optional isRelease "RELEASE=1"
|
|
++ lib.optional withChainloading "CHAINLOADING=1";
|
|
|
|
nativeBuildInputs =
|
|
[
|
|
dtc
|
|
buildPackages.gcc
|
|
]
|
|
++ lib.optional withChainloading rustenv
|
|
++ lib.optional (customLogo != null) imagemagick;
|
|
|
|
postPatch = ''
|
|
substituteInPlace proxyclient/m1n1/asm.py \
|
|
--replace 'aarch64-linux-gnu-' 'aarch64-unknown-linux-gnu-' \
|
|
--replace 'TOOLCHAIN = ""' 'TOOLCHAIN = "'$out'/toolchain-bin/"'
|
|
'';
|
|
|
|
preConfigure = lib.optionalString (customLogo != null) ''
|
|
pushd data &>/dev/null
|
|
ln -fs ${customLogo} bootlogo_256.png
|
|
if [[ "$(magick identify bootlogo_256.png)" != 'bootlogo_256.png PNG 256x256'* ]]; then
|
|
echo "Custom logo is not a 256x256 PNG"
|
|
exit 1
|
|
fi
|
|
|
|
rm bootlogo_128.png
|
|
convert bootlogo_256.png -resize 128x128 bootlogo_128.png
|
|
patchShebangs --build ./makelogo.sh
|
|
./makelogo.sh
|
|
popd &>/dev/null
|
|
'';
|
|
|
|
installPhase =
|
|
''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/build
|
|
cp build/m1n1.bin $out/build
|
|
''
|
|
+ (lib.optionalString withTools ''
|
|
mkdir -p $out/{bin,script,toolchain-bin}
|
|
cp -r proxyclient $out/script
|
|
cp -r tools $out/script
|
|
|
|
for toolpath in $out/script/proxyclient/tools/*.py; do
|
|
tool=$(basename $toolpath .py)
|
|
script=$out/bin/m1n1-$tool
|
|
cat > $script <<EOF
|
|
#!/bin/sh
|
|
${pyenv}/bin/python $toolpath "\$@"
|
|
EOF
|
|
chmod +x $script
|
|
done
|
|
|
|
GCC=${buildPackages.gcc}
|
|
BINUTILS=${buildPackages.binutils-unwrapped}
|
|
|
|
ln -s $GCC/bin/${stdenv.cc.targetPrefix}gcc $out/toolchain-bin/
|
|
ln -s $GCC/bin/${stdenv.cc.targetPrefix}ld $out/toolchain-bin/
|
|
ln -s $BINUTILS/bin/${stdenv.cc.targetPrefix}objcopy $out/toolchain-bin/
|
|
ln -s $BINUTILS/bin/${stdenv.cc.targetPrefix}objdump $out/toolchain-bin/
|
|
ln -s $GCC/bin/${stdenv.cc.targetPrefix}nm $out/toolchain-bin/
|
|
'')
|
|
+ ''
|
|
runHook postInstall
|
|
'';
|
|
}
|