nibylandia/pkgs/rpi5-uefi.nix

61 lines
1.9 KiB
Nix

{ lib, stdenv, openssl, pkgsCross, buildPackages, runCommand, rpi5-arm-tf
, rpi5-edk2-tools, libuuid, python3, bc, util-linux, nasm, acpica-tools }:
let pythonEnv = buildPackages.python3.withPackages (ps: [ ps.tkinter ]);
in stdenv.mkDerivation rec {
pname = "rpi5-uefi";
inherit (rpi5-edk2-tools) src version;
nativeBuildInputs = [ bc pythonEnv util-linux nasm acpica-tools ];
depsBuildBuild = [ buildPackages.stdenv.cc ];
strictDeps = true;
# trick taken from https://src.fedoraproject.org/rpms/edk2/blob/08f2354cd280b4ce5a7888aa85cf520e042955c3/f/edk2.spec#_319
GCC5_AARCH64_PREFIX = stdenv.cc.targetPrefix;
env.NIX_CFLAGS_COMPILE = toString [ "-Wformat" ];
prePatch = ''
rm -rf edk2/BaseTools
ln -sv ${rpi5-edk2-tools}/BaseTools edk2/BaseTools
sed -i -e '/ACPI_SD_LIMIT_UHS_DEFAULT/s/TRUE/FALSE/' edk2-platforms/Platform/RaspberryPi/RPi5/Drivers/RpiPlatformDxe/ConfigTable.h
sed -i -e '/default\s*= SYSTEM_TABLE_MODE_ACPI/s/SYSTEM_TABLE_MODE_ACPI/SYSTEM_TABLE_MODE_BOTH/' edk2-platforms/Platform/RaspberryPi/RPi5/Drivers/RpiPlatformDxe/RpiPlatformDxeHii.vfr
sed -i -e '/"SystemTableMode"/s/0$/1/' edk2-platforms/Platform/RaspberryPi/RPi5/RPi5.dsc
'';
configurePhase = ''
runHook preConfigure
export WORKSPACE="$PWD"
export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms:$WORKSPACE/edk2-non-osi
. $WORKSPACE/edk2/edksetup.sh BaseTools
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
build -a AARCH64 \
-b RELEASE \
-t GCC \
-p edk2-platforms/Platform/RaspberryPi/RPi5/RPi5.dsc \
-D TFA_BUILD_ARTIFACTS=${rpi5-arm-tf} \
--pcd gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString=L"${version}" \
-n $NIX_BUILD_CORES $buildFlags
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
mv -v Build/RPi5/RELEASE_GCC/FV/RPI_EFI.fd $out/
mv -v config.txt $out/
runHook postInstall
'';
}