From ff3adab3708ec2f8ce2e4b7316e3c8f4456da638 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 12:46:55 +0100 Subject: [PATCH 1/6] edk2: fix cross compilation `libuuid` is actually a dependency of the host platform and should not be tucked in `depBuildBuild`. Also, we don't need `buildPackages.util-linux` for the compilation. --- pkgs/development/compilers/edk2/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/edk2/default.nix b/pkgs/development/compilers/edk2/default.nix index d34ae7b8143e..7973cd157b47 100644 --- a/pkgs/development/compilers/edk2/default.nix +++ b/pkgs/development/compilers/edk2/default.nix @@ -60,11 +60,12 @@ edk2 = stdenv.mkDerivation rec { ''; nativeBuildInputs = [ pythonEnv ]; - depsBuildBuild = [ buildPackages.stdenv.cc buildPackages.util-linux buildPackages.bash ]; + depsBuildBuild = [ buildPackages.stdenv.cc buildPackages.bash ]; + depsHostHost = [ libuuid ]; strictDeps = true; # trick taken from https://src.fedoraproject.org/rpms/edk2/blob/08f2354cd280b4ce5a7888aa85cf520e042955c3/f/edk2.spec#_319 - ${"GCC5_${targetArch}_PREFIX"}=stdenv.cc.targetPrefix; + ${"GCC5_${targetArch}_PREFIX"} = stdenv.cc.targetPrefix; makeFlags = [ "-C BaseTools" ]; From e99c920fb1055850540ff8d31b7d347b7088fccc Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 12:47:10 +0100 Subject: [PATCH 2/6] edk2: 202308 -> 202311 https://github.com/tianocore/edk2/releases/tag/edk2-stable202311 --- pkgs/development/compilers/edk2/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/edk2/default.nix b/pkgs/development/compilers/edk2/default.nix index 7973cd157b47..cc1f357c5850 100644 --- a/pkgs/development/compilers/edk2/default.nix +++ b/pkgs/development/compilers/edk2/default.nix @@ -31,7 +31,7 @@ buildType = if stdenv.isDarwin then edk2 = stdenv.mkDerivation rec { pname = "edk2"; - version = "202308"; + version = "202311"; patches = [ # pass targetPrefix as an env var @@ -46,7 +46,7 @@ edk2 = stdenv.mkDerivation rec { repo = "edk2"; rev = "edk2-stable${edk2.version}"; fetchSubmodules = true; - hash = "sha256-Eoi1xf/hw/Knr7n0f0rgVof7wTgrHkmvV4eJjJV1NhM="; + hash = "sha256-gC/If8U9qo70rGvNl3ld/mmZszwY0w/5Ge/K21mhzYw="; }; # We don't want EDK2 to keep track of OpenSSL, From 6a2ed3adf2d4e503676ca6dc16467ec88608eb7d Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 12:47:30 +0100 Subject: [PATCH 3/6] edk2: support RISC-V EDK2 has a good support of RISC-V nowadays. --- pkgs/development/compilers/edk2/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/edk2/default.nix b/pkgs/development/compilers/edk2/default.nix index cc1f357c5850..70afb8ba714b 100644 --- a/pkgs/development/compilers/edk2/default.nix +++ b/pkgs/development/compilers/edk2/default.nix @@ -21,6 +21,8 @@ else if stdenv.isAarch32 then "ARM" else if stdenv.isAarch64 then "AARCH64" +else if stdenv.hostPlatform.isRiscV64 then + "RISCV64" else throw "Unsupported architecture"; @@ -92,7 +94,7 @@ edk2 = stdenv.mkDerivation rec { description = "Intel EFI development kit"; homepage = "https://github.com/tianocore/tianocore.github.io/wiki/EDK-II/"; license = licenses.bsd2; - platforms = with platforms; aarch64 ++ arm ++ i686 ++ x86_64; + platforms = with platforms; aarch64 ++ arm ++ i686 ++ x86_64 ++ riscv64; }; passthru = { From 770194fac17ea9bb018e612f426239f4f13c1785 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 12:49:21 +0100 Subject: [PATCH 4/6] OVMF: disable `sourceDebug` by default `sourceDebug` enables a source-level debugger agent inside the UEFI code that can be leveraged via a certain bus (USB or serial for example) to debug the platform. See: https://github.com/tianocore/tianocore.github.io/wiki/SourceLevelDebugPkg for more information. `sourceDebug` is almost something you never want when you debug UEFI in a virtual machine. Debugging with GDB can be achieved via: https://github.com/tianocore/tianocore.github.io/wiki/How-to-debug-OVMF-with-QEMU-using-GDB. --- pkgs/applications/virtualization/OVMF/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix index eada778e1c69..20353696d161 100644 --- a/pkgs/applications/virtualization/OVMF/default.nix +++ b/pkgs/applications/virtualization/OVMF/default.nix @@ -7,7 +7,9 @@ , tpmSupport ? false , tlsSupport ? false , debug ? false -, sourceDebug ? debug +# Usually, this option is broken, do not use it except if you know what you are +# doing. +, sourceDebug ? false }: assert csmSupport -> seabios != null; From db9b8f36df1ae8fe6bc0337d8f25ea7b7031301e Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 13:12:30 +0100 Subject: [PATCH 5/6] OVMF: support RISC-V Built according to https://github.com/tianocore/edk2/tree/master/OvmfPkg/RiscVVirt and https://salsa.debian.org/qemu-team/edk2/-/commit/884f2fa7ed958d1469567a8a2648662541f138dc. --- .../virtualization/OVMF/default.nix | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix index 20353696d161..d46932006f49 100644 --- a/pkgs/applications/virtualization/OVMF/default.nix +++ b/pkgs/applications/virtualization/OVMF/default.nix @@ -22,6 +22,8 @@ let "OvmfPkg/OvmfPkgX64.dsc" else if stdenv.hostPlatform.isAarch then "ArmVirtPkg/ArmVirtQemu.dsc" + else if stdenv.hostPlatform.isRiscV then + "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc" else throw "Unsupported architecture"; @@ -69,7 +71,8 @@ edk2.mkDerivation projectDscPath (finalAttrs: { cp ${seabios}/Csm16.bin OvmfPkg/Csm/Csm16/Csm16.bin ''; - postFixup = if stdenv.hostPlatform.isAarch then '' + postFixup = ( + if stdenv.hostPlatform.isAarch then '' mkdir -vp $fd/FV mkdir -vp $fd/AAVMF mv -v $out/FV/QEMU_{EFI,VARS}.fd $fd/FV @@ -82,10 +85,18 @@ edk2.mkDerivation projectDscPath (finalAttrs: { # Also add symlinks for Fedora dir layout: https://src.fedoraproject.org/cgit/rpms/edk2.git/tree/edk2.spec ln -s $fd/FV/AAVMF_CODE.fd $fd/AAVMF/QEMU_EFI-pflash.raw ln -s $fd/FV/AAVMF_VARS.fd $fd/AAVMF/vars-template-pflash.raw - '' else '' + '' + else if stdenv.hostPlatform.isRiscV then '' + mkdir -vp $fd/FV + + mv -v $out/FV/RISCV_VIRT_{CODE,VARS}.fd $fd/FV/ + truncate -s 32M $fd/FV/RISCV_VIRT_CODE.fd + truncate -s 32M $fd/FV/RISCV_VIRT_VARS.fd + '' + else '' mkdir -vp $fd/FV mv -v $out/FV/OVMF{,_CODE,_VARS}.fd $fd/FV - ''; + ''); dontPatchELF = true; From b0eed3a0ac4c3313fef96c45239521bb73931005 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 25 Nov 2023 13:13:24 +0100 Subject: [PATCH 6/6] OVMF: mark broken on Darwin https://hydra.nixos.org/build/241925714/nixlog/2 --- pkgs/applications/virtualization/OVMF/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix index d46932006f49..ca2c0f890d9a 100644 --- a/pkgs/applications/virtualization/OVMF/default.nix +++ b/pkgs/applications/virtualization/OVMF/default.nix @@ -118,5 +118,6 @@ edk2.mkDerivation projectDscPath (finalAttrs: { license = lib.licenses.bsd2; inherit (edk2.meta) platforms; maintainers = with lib.maintainers; [ adamcstephens raitobezarius ]; + broken = stdenv.isDarwin; }; })