From 218ab789fdabbed9a755539b1520a9c628e153ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sun, 7 Apr 2024 17:42:03 +0000 Subject: [PATCH] milkv/pioneer: fix u-root cross-compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörg Thalheim --- milkv/pioneer/linuxboot-initrd.nix | 77 +++++++++++++++++++----------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/milkv/pioneer/linuxboot-initrd.nix b/milkv/pioneer/linuxboot-initrd.nix index ee0ef7b..507fc0e 100644 --- a/milkv/pioneer/linuxboot-initrd.nix +++ b/milkv/pioneer/linuxboot-initrd.nix @@ -1,54 +1,73 @@ -{ buildGoModule +{ buildPackages , fetchFromGitHub , fetchpatch , linux-firmware +, buildGoModule , ... }: # 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 { +let + u-root = buildPackages.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 \ + postInstall = '' + cp -r . $out/src + ''; + + # We only build the u-root binary in the build phase and the initrd in the + # postBuild hook. + subPackages = [ "." ]; + + # Tests time out after 10min for native riscv64 builds on the pioneer. + doCheck = false; + }; +in +buildGoModule { + name = "linuxboot-initrd"; + src = null; + vendorHash = null; + dontUnpack = true; + nativeBuildInputs = [ u-root ]; + + buildPhase = '' + runHook preBuild + pushd ${u-root}/src + mkdir -p $out + GOROOT="$(go env GOROOT)" 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 \ + -o $out/initramfs.cpio \ core boot + popd # 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 + xz --check=crc32 $out/initramfs.cpio + runHook postBuild ''; installPhase = '' - install -D initramfs.cpio.xz $out/initrd.img + runHook preInstall + mv $out/initramfs.cpio.xz $out/initrd.img + runHook postInstall ''; - - # Tests time out after 10min for native riscv64 builds on the pioneer. - doCheck = false; }