{ lib
, stdenv
, fetchFromGitHub
, elfutils
, pcre
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "mkbootimage";
  version = "2.3-unstable-2022-05-26";

  src = fetchFromGitHub {
    owner = "antmicro";
    repo = "zynq-mkbootimage";
    rev = "872363ce32c249f8278cf107bc6d3bdeb38d849f";
    hash = "sha256-5FPyAhUWZDwHbqmp9J2ZXTmjaXPz+dzrJMolaNwADHs=";
  };

  # Using elfutils because libelf is being discontinued
  # See https://github.com/NixOS/nixpkgs/pull/271568
  buildInputs = [ elfutils pcre ];

  postPatch = ''
    substituteInPlace Makefile --replace "git rev-parse --short HEAD" "echo ${finalAttrs.src.rev}"
  '';

  installPhase = ''
    runHook preInstall

    install -Dm755 mkbootimage -t $out/bin

    runHook postInstall
  '';

  hardeningDisable = [ "fortify" ];

  meta = with lib; {
    description = "Open source replacement of the Xilinx bootgen application";
    homepage = "https://github.com/antmicro/zynq-mkbootimage";
    license = licenses.bsd2;
    platforms = platforms.linux;
    maintainers = [ maintainers.fsagbuya ];
    mainProgram = "mkbootimage";
  };
})
