From cdf448de601993a1dd47924c7b37f3c77d7b88a5 Mon Sep 17 00:00:00 2001 From: Brian McGillion Date: Sat, 7 Mar 2026 09:55:35 +0400 Subject: [PATCH] edk2: Fix cross-compile deep-merge env in mkDerivation to preserve GCC5 prefix The shallow `//` merge in edk2.mkDerivation allowed consumers' `env` attrs to completely overwrite the base `env` containing GCC5_*_PREFIX, causing cross-compilation failures (e.g. x86_64 -> aarch64 OVMF) with `gcc: error: unrecognized command-line option '-mlittle-endian'`. Exclude `env` from the consumer attrs spread and explicitly deep-merge it, ensuring GCC5_*_PREFIX is always set as a base while consumer `env` keys (NIX_CFLAGS_COMPILE, PYTHON_COMMAND, etc.) are merged on top. Fixes regression from c7b9734f4ae8 ("edk2: move env variable(s) into env for structuredAttrs"). Signed-off-by: Brian McGillion --- pkgs/by-name/ed/edk2/package.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ed/edk2/package.nix b/pkgs/by-name/ed/edk2/package.nix index f37043b1d54e..32d2848178e1 100644 --- a/pkgs/by-name/ed/edk2/package.nix +++ b/pkgs/by-name/ed/edk2/package.nix @@ -182,8 +182,6 @@ stdenv.mkDerivation (finalAttrs: { ++ attrs.nativeBuildInputs or [ ]; strictDeps = true; - env.${"GCC5_${targetArch}_PREFIX"} = stdenv.cc.targetPrefix; - prePatch = '' rm -rf BaseTools ln -sv ${buildPackages.edk2}/BaseTools BaseTools @@ -211,7 +209,14 @@ stdenv.mkDerivation (finalAttrs: { // removeAttrs attrs [ "nativeBuildInputs" "depsBuildBuild" + "env" ] + // { + env = { + ${"GCC5_${targetArch}_PREFIX"} = stdenv.cc.targetPrefix; + } + // (attrs.env or { }); + } ); }; })