From 0bf98c524391b7db2e1bf8beb8b33362a0292ed7 Mon Sep 17 00:00:00 2001
From: Daniel Barlow <dan@telent.net>
Date: Fri, 29 Dec 2023 17:07:47 +0000
Subject: [PATCH] add output for u-boot

---
 modules/arch/aarch64.nix     |  1 +
 modules/arch/arm.nix         |  1 +
 modules/arch/mipseb.nix      |  1 +
 modules/outputs.nix          |  3 +++
 modules/outputs/mbrimage.nix |  2 +-
 tests/tftpboot/test.nix      | 14 +++++++-------
 6 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/modules/arch/aarch64.nix b/modules/arch/aarch64.nix
index 7279e42a0..3a18ffd10 100644
--- a/modules/arch/aarch64.nix
+++ b/modules/arch/aarch64.nix
@@ -13,5 +13,6 @@
       # USE_OF = "y";
     };
     hardware.ram.startAddress = lim.parseInt "0x40000000";
+    system.outputs.u-boot = pkgs.ubootQemuAarch64;
   };
 }
diff --git a/modules/arch/arm.nix b/modules/arch/arm.nix
index 474f7800b..1d569bc5e 100644
--- a/modules/arch/arm.nix
+++ b/modules/arch/arm.nix
@@ -5,5 +5,6 @@
       OF = "y";
     };
     hardware.ram.startAddress = lim.parseInt "0x40000000";
+    system.outputs.u-boot = pkgs.ubootQemuArm;
   };
 }
diff --git a/modules/arch/mipseb.nix b/modules/arch/mipseb.nix
index 77a5e656a..5e7eefaed 100644
--- a/modules/arch/mipseb.nix
+++ b/modules/arch/mipseb.nix
@@ -5,5 +5,6 @@
     kernel.config = {
       CPU_BIG_ENDIAN = "y";
     };
+    system.outputs.u-boot = pkgs.ubootQemuMips;
   };
 }
diff --git a/modules/outputs.nix b/modules/outputs.nix
index f244657a5..933a730d7 100644
--- a/modules/outputs.nix
+++ b/modules/outputs.nix
@@ -60,6 +60,9 @@ in
           Combined kernel and FDT in uImage (U-Boot compatible) format
         '';
       };
+      u-boot = mkOption {
+        type = types.package;
+      };
       manifest = mkOption {
         type = types.package;
         internal  = true;
diff --git a/modules/outputs/mbrimage.nix b/modules/outputs/mbrimage.nix
index 6f7904f29..4bf04a0bf 100644
--- a/modules/outputs/mbrimage.nix
+++ b/modules/outputs/mbrimage.nix
@@ -42,7 +42,7 @@ in {
         ln -s ${o.mbrimage} ./mbrimage
         cat > run.sh <<EOF
         #!${pkgs.runtimeShell}
-        ${pkgs.pkgsBuildBuild.run-liminix-vm}/bin/run-liminix-vm  --arch ${pkgs.stdenv.hostPlatform.qemuArch} --u-boot ${pkgs.ubootQemuArm}/u-boot.bin --phram-address 0x${phram_address} --disk-image ${o.mbrimage} /dev/null /dev/null
+        ${pkgs.pkgsBuildBuild.run-liminix-vm}/bin/run-liminix-vm  --arch ${pkgs.stdenv.hostPlatform.qemuArch} --u-boot ${o.u-boot}/u-boot.bin --phram-address 0x${phram_address} --disk-image ${o.mbrimage} /dev/null /dev/null
         EOF
         chmod +x run.sh
       '';
diff --git a/tests/tftpboot/test.nix b/tests/tftpboot/test.nix
index 80c2ddd46..941d15ba8 100644
--- a/tests/tftpboot/test.nix
+++ b/tests/tftpboot/test.nix
@@ -1,7 +1,7 @@
 {
   liminix
 }:
-let check = deviceName : ubootName : config :
+let check = deviceName  : config :
 let derivation = (import liminix {
       device = import "${liminix}/devices/${deviceName}/";
       liminix-config = { pkgs, ... } : {
@@ -10,7 +10,7 @@ let derivation = (import liminix {
       };
     });
     img = derivation.outputs.tftpboot;
-    uboot = derivation.pkgs.${ubootName};
+    uboot = derivation.outputs.u-boot;
     pkgsBuild = derivation.pkgs.pkgsBuildBuild;
 in pkgsBuild.runCommand "check" {
   nativeBuildInputs = with pkgsBuild; [
@@ -35,13 +35,13 @@ run-liminix-vm \
 expect ${./script.expect} 2>&1 |tee $out
 '';
 in {
-  aarch64 = check "qemu-aarch64" "ubootQemuAarch64" {};
-  arm = check  "qemu-armv7l" "ubootQemuArm" {};
-  armZimage = check  "qemu-armv7l" "ubootQemuArm" {
+  aarch64 = check "qemu-aarch64" {};
+  arm = check  "qemu-armv7l" {};
+  armZimage = check  "qemu-armv7l" {
     boot.tftp.kernelFormat = "zimage";
   };
-  mips = check  "qemu" "ubootQemuMips" {};
-  mipsLz = check  "qemu" "ubootQemuMips" {
+  mips = check  "qemu" {};
+  mipsLz = check  "qemu" {
     boot.tftp.compressRoot = true;
   };
 }