nixos-hardware/milkv/pioneer/linuxboot-initrd.nix

55 lines
1.5 KiB
Nix
Raw Normal View History

2024-03-30 20:45:46 -04:00
{ buildGoModule
, fetchFromGitHub
, fetchpatch
, linux-firmware
, ...
}:
# Based on
# https://github.com/sophgo/bootloader-riscv/blob/e0839852d571df106db622611f4786ae17e8df0f/scripts/envsetup.sh#L809-L819
buildGoModule rec {
pname = "u-root";
version = "0.14.0";
src = fetchFromGitHub {
owner = "u-root";
repo = "u-root";
rev = "v${version}";
hash = "sha256-8zA3pHf45MdUcq/MA/mf0KCTxB1viHieU/oigYwIPgo=";
};
vendorHash = null;
patches = [
(
fetchpatch {
url = "https://github.com/sophgo/bootloader-riscv/commit/322c3305763872a9b88a1c85d79bca63b8fbe7a6.patch";
hash = "sha256-l5r3DbcMqRYD5FhRBqtEIEscZAdDvjmQJE4BIAtWYWE=";
stripLen = 1;
}
)
];
# We only build the u-root binary in the build phase and the initrd in the
# postBuild hook.
subPackages = [ "." ];
postBuild = ''
GOROOT="$(go env GOROOT)" $GOPATH/bin/u-root \
-build bb \
-uinitcmd=boot \
-files "${linux-firmware}/lib/firmware/amdgpu/:lib/firmware/amdgpu/" \
-files "${linux-firmware}/lib/firmware/radeon/:lib/firmware/radeon/" \
-o initramfs.cpio \
core boot
# The vendor does not compress the initrd. We do since we include more
# firmware files. CRC32 is required by the kernel's decompressor.
xz --check=crc32 initramfs.cpio
'';
installPhase = ''
install -D initramfs.cpio.xz $out/initrd.img
'';
# Tests time out after 10min for native riscv64 builds on the pioneer.
doCheck = false;
}