From 17afbb81db5b5c0b3a211e5290b9ac7dbacd0021 Mon Sep 17 00:00:00 2001 From: Astro Date: Wed, 20 Mar 2024 15:52:25 +0100 Subject: [PATCH] OVMF-cloud-hypervisor: init --- .../virtualization/OVMF/default.nix | 51 ++++++++++--------- .../ov/OVMF-cloud-hypervisor/package.nix | 7 +++ 2 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 pkgs/by-name/ov/OVMF-cloud-hypervisor/package.nix diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix index 4798e324141d..79df60253ff5 100644 --- a/pkgs/applications/virtualization/OVMF/default.nix +++ b/pkgs/applications/virtualization/OVMF/default.nix @@ -24,41 +24,39 @@ # Usually, this option is broken, do not use it except if you know what you are # doing. , sourceDebug ? false +, projectDscPath ? { + i686 = "OvmfPkg/OvmfPkgIa32.dsc"; + x86_64 = "OvmfPkg/OvmfPkgX64.dsc"; + aarch64 = "ArmVirtPkg/ArmVirtQemu.dsc"; + riscv64 = "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc"; + }.${stdenv.hostPlatform.parsed.cpu.name} + or (throw "Unsupported OVMF `projectDscPath` on ${stdenv.hostPlatform.parsed.cpu.name}") +, fwPrefix ? { + i686 = "OVMF"; + x86_64 = "OVMF"; + aarch64 = "AAVMF"; + riscv64 = "RISCV_VIRT"; + }.${stdenv.hostPlatform.parsed.cpu.name} + or (throw "Unsupported OVMF `fwPrefix` on ${stdenv.hostPlatform.parsed.cpu.name}") +, metaPlatforms ? edk2.meta.platforms }: let platformSpecific = { - i686 = { - projectDscPath = "OvmfPkg/OvmfPkgIa32.dsc"; - fwPrefix = "OVMF"; + x86_64.msVarsArgs = { + flavor = "OVMF_4M"; + archDir = "X64"; }; - x86_64 = { - projectDscPath = "OvmfPkg/OvmfPkgX64.dsc"; - fwPrefix = "OVMF"; - msVarsArgs = { - flavor = "OVMF_4M"; - archDir = "X64"; - }; - }; - aarch64 = { - projectDscPath = "ArmVirtPkg/ArmVirtQemu.dsc"; - fwPrefix = "AAVMF"; - msVarsArgs = { - flavor = "AAVMF"; - archDir = "AARCH64"; - }; - }; - riscv64 = { - projectDscPath = "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc"; - fwPrefix = "RISCV_VIRT"; + aarch64.msVarsArgs = { + flavor = "AAVMF"; + archDir = "AARCH64"; }; }; cpuName = stdenv.hostPlatform.parsed.cpu.name; - inherit (platformSpecific.${cpuName}) - projectDscPath fwPrefix msVarsArgs; + inherit (platformSpecific.${cpuName}) msVarsArgs; version = lib.getVersion edk2; @@ -152,6 +150,9 @@ edk2.mkDerivation projectDscPath (finalAttrs: { # release notes accordingly. postInstall = '' mkdir -vp $fd/FV + '' + lib.optionalString (builtins.elem fwPrefix [ + "OVMF" "AAVMF" "RISCV_VIRT" + ]) '' mv -v $out/FV/${fwPrefix}_{CODE,VARS}.fd $fd/FV '' + lib.optionalString stdenv.hostPlatform.isx86 '' mv -v $out/FV/${fwPrefix}.fd $fd/FV @@ -184,7 +185,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: { description = "Sample UEFI firmware for QEMU and KVM"; homepage = "https://github.com/tianocore/tianocore.github.io/wiki/OVMF"; license = lib.licenses.bsd2; - inherit (edk2.meta) platforms; + platforms = metaPlatforms; maintainers = with lib.maintainers; [ adamcstephens raitobezarius ]; broken = stdenv.isDarwin; }; diff --git a/pkgs/by-name/ov/OVMF-cloud-hypervisor/package.nix b/pkgs/by-name/ov/OVMF-cloud-hypervisor/package.nix new file mode 100644 index 000000000000..4369b083cedf --- /dev/null +++ b/pkgs/by-name/ov/OVMF-cloud-hypervisor/package.nix @@ -0,0 +1,7 @@ +{ lib, OVMF }: + +OVMF.override { + projectDscPath = "OvmfPkg/CloudHv/CloudHvX64.dsc"; + fwPrefix = "CLOUDHV"; + metaPlatforms = builtins.filter (lib.hasPrefix "x86_64-") OVMF.meta.platforms; +}