From 79f9ec1033309fde1dba5e5f2fa76448eb4847ee Mon Sep 17 00:00:00 2001 From: sanana Date: Mon, 2 Sep 2024 11:12:24 +0300 Subject: [PATCH 1/2] edk2: add loongarch64 support Upstream had this for some time, let's just enable building it. --- pkgs/by-name/ed/edk2/package.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/ed/edk2/package.nix b/pkgs/by-name/ed/edk2/package.nix index b6946ea11949..0f50c45e6487 100644 --- a/pkgs/by-name/ed/edk2/package.nix +++ b/pkgs/by-name/ed/edk2/package.nix @@ -23,6 +23,8 @@ else if stdenv.isAarch64 then "AARCH64" else if stdenv.hostPlatform.isRiscV64 then "RISCV64" +else if stdenv.hostPlatform.isLoongArch64 then + "LOONGARCH64" else throw "Unsupported architecture"; @@ -128,7 +130,7 @@ edk2 = stdenv.mkDerivation { homepage = "https://github.com/tianocore/tianocore.github.io/wiki/EDK-II/"; changelog = "https://github.com/tianocore/edk2/releases/tag/edk2-stable${edk2.version}"; license = lib.licenses.bsd2; - platforms = with lib.platforms; aarch64 ++ arm ++ i686 ++ x86_64 ++ riscv64; + platforms = with lib.platforms; aarch64 ++ arm ++ i686 ++ x86_64 ++ loongarch64 ++ riscv64; maintainers = [ lib.maintainers.mjoerg ]; }; From 4074fbdc6c28e443295f7f6451ec4223b7fe8703 Mon Sep 17 00:00:00 2001 From: sanana Date: Mon, 2 Sep 2024 11:18:59 +0300 Subject: [PATCH 2/2] OVMF: build for loongarch64 Now that the edk2 package has support for loongarch64, this patch enables building OVMF for loongarch64. --- pkgs/applications/virtualization/OVMF/default.nix | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix index aba83449423b..2c1e49ac2c3d 100644 --- a/pkgs/applications/virtualization/OVMF/default.nix +++ b/pkgs/applications/virtualization/OVMF/default.nix @@ -29,6 +29,7 @@ x86_64 = "OvmfPkg/OvmfPkgX64.dsc"; aarch64 = "ArmVirtPkg/ArmVirtQemu.dsc"; riscv64 = "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc"; + loongarch64 = "OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc"; }.${stdenv.hostPlatform.parsed.cpu.name} or (throw "Unsupported OVMF `projectDscPath` on ${stdenv.hostPlatform.parsed.cpu.name}") , fwPrefix ? { @@ -36,6 +37,7 @@ x86_64 = "OVMF"; aarch64 = "AAVMF"; riscv64 = "RISCV_VIRT"; + loongarch64 = "LOONGARCH_VIRT"; }.${stdenv.hostPlatform.parsed.cpu.name} or (throw "Unsupported OVMF `fwPrefix` on ${stdenv.hostPlatform.parsed.cpu.name}") , metaPlatforms ? edk2.meta.platforms @@ -130,17 +132,17 @@ edk2.mkDerivation projectDscPath (finalAttrs: { export PYTHONPATH=$NIX_BUILD_TOP/debian/python:$PYTHONPATH ''; - postBuild = lib.optionalString stdenv.hostPlatform.isAarch '' + postBuild = lib.optionalString (stdenv.hostPlatform.isAarch || stdenv.hostPlatform.isLoongArch64) '' ( cd ${buildPrefix}/FV cp QEMU_EFI.fd ${fwPrefix}_CODE.fd cp QEMU_VARS.fd ${fwPrefix}_VARS.fd - + ) + '' + lib.optionalString stdenv.hostPlatform.isAarch '' # QEMU expects 64MiB CODE and VARS files on ARM/AARCH64 architectures # Truncate the firmware files to the expected size - truncate -s 64M ${fwPrefix}_CODE.fd - truncate -s 64M ${fwPrefix}_VARS.fd - ) + truncate -s 64M ${buildPrefix}/FV/${fwPrefix}_CODE.fd + truncate -s 64M ${buildPrefix}/FV/${fwPrefix}_VARS.fd '' + lib.optionalString stdenv.hostPlatform.isRiscV '' truncate -s 32M ${buildPrefix}/FV/${fwPrefix}_CODE.fd truncate -s 32M ${buildPrefix}/FV/${fwPrefix}_VARS.fd @@ -165,7 +167,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: { postInstall = '' mkdir -vp $fd/FV '' + lib.optionalString (builtins.elem fwPrefix [ - "OVMF" "AAVMF" "RISCV_VIRT" + "OVMF" "AAVMF" "RISCV_VIRT" "LOONGARCH_VIRT" ]) '' mv -v $out/FV/${fwPrefix}_{CODE,VARS}.fd $fd/FV '' + lib.optionalString stdenv.hostPlatform.isx86 ''