Files
nix-config/packages/edk2/default.nix
mjallen18 2a17112d50 idk man
2026-01-12 20:11:49 -06:00

157 lines
3.6 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{ stdenv
, fetchFromGitHub
, lib
, MODEL ? "4"
, RELEASE_TYPE ? "RELEASE"
, EDK2_FLAGS ? ""
, nasm
, perl
, python3
, python3Packages
, openssl
, git
, libuuid
, pkgs
, namespace
}:
let
pname = "edk2";
version = "stable202511";
edk2Src = fetchFromGitHub rec {
owner = "mjallen18";
repo = "edk2";
name = repo;
#tag = "edk2-${version}";
rev = "9765be56f1f816ef737153f5588b3294fcc69a63";
hash = "sha256-oqfJbNeOj2BVJqWE+snD6ri3lUO1aNcmPg+eJpjyr5E=";
fetchSubmodules = true;
};
edk2NonOsiSrc = fetchFromGitHub rec {
owner = "mjallen18";
repo = "edk2-non-osi";
name = repo;
rev = "09ee44f07ded544d976be8a03dec3715719homeassistant-apif638e";
hash = "sha256-k7nUb3WaRUIr9IlXdam2WGKPOzKjLNVFLfuD5h4veMc=";
};
edk2PlatformsSrc = fetchFromGitHub rec {
owner = "mjallen18";
repo = "edk2-platforms";
name = repo;
rev = "933314d94a3d05f2f62b0f2148151d4a0f1e1183";
hash = "sha256-Tnvrwk4g191LzfTkdoFw1BBN51EWhEQ7DRe9u5Mzc0w=";
};
baseTools = pkgs.${namespace}.edk2-basetools;
pythonEnv = python3.withPackages (
_ps: with python3Packages; [
libfdt
]
);
in
stdenv.mkDerivation rec {
inherit pname version;
srcs = [
edk2Src
edk2NonOsiSrc
edk2PlatformsSrc
];
# Add required host tools if needed:
nativeBuildInputs = [
openssl
nasm
perl
pythonEnv
git
libuuid
baseTools
];
env = {
NIX_CFLAGS_COMPILE =
"-Wno-return-type -Wno-error"
+ lib.optionalString (stdenv.cc.isGNU) " -Wno-error=stringop-truncation"
+ lib.optionalString (stdenv.hostPlatform.isDarwin) " -Wno-error=macro-redefined";
PYTHON_COMMAND = lib.getExe pythonEnv;
# trick taken from https://src.fedoraproject.org/rpms/edk2/blob/08f2354cd280b4ce5a7888aa85cf520e042955c3/f/edk2.spec#_319
${"GCC5_AARCH64_PREFIX"} = stdenv.cc.targetPrefix;
};
# Dont force a single root; we keep both dirs side by side
sourceRoot = ".";
unpackPhase = ''
runHook preUnpack
for src in $srcs; do
unpackFile "$src"
done
chmod -R u+w .
patchShebangs ./edk2
runHook postUnpack
'';
prePatch = ''
rm -rf ./edk2/BaseTools
ln -sv ${baseTools}/BaseTools ./edk2/BaseTools
'';
postPatch = ''
f=edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf
if grep -q '^\[BuildOptions\]' "$f"; then
# Add flag inside existing BuildOptions
sed -i '/^\[BuildOptions\]/a\ GCC:*_*_*_CC_FLAGS = -Wno-error' "$f"
else
# Append a new BuildOptions block
cat >> "$f" <<'EOF'
[BuildOptions]
GCC:*_*_*_CC_FLAGS = -Wno-error
EOF
fi
'';
configurePhase = ''
runHook preConfigure
export WORKSPACE=$PWD
export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-non-osi:$WORKSPACE/edk2-platforms
export EDK_TOOLS_PATH=${baseTools}/BaseTools
export ATF_BUILD_DIR="${pkgs.${namespace}.arm-trusted-firmware}/rpi${MODEL}/${RELEASE_TYPE}"
. ${baseTools}/edksetup.sh BaseTools
runHook postConfigure
'';
buildPhase = ''
build \
-a AARCH64 \
-t GCC \
-b ${RELEASE_TYPE} \
-p edk2-platforms/Platform/RaspberryPi/RPi${MODEL}/RPi${MODEL}.dsc \
-D TFA_BUILD_ARTIFACTS=$ATF_BUILD_DIR \
--pcd gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString=L${version} \
${EDK2_FLAGS}
'';
installPhase = ''
mkdir -p $out
cp -r /Build/RPi${MODEL}/${RELEASE_TYPE}_GCC/FV/RPI_EFI.fd $out/RPI_EFI.fd
'';
meta = with lib; {
description = "ARM Trusted Firmware-A for Raspberry Pi";
license = licenses.bsd3;
platforms = [ "aarch64-linux" ];
maintainers = with maintainers; [ kazenyuk ];
};
}