{
  lib,
  stdenv,
  fetchFromGitHub,
  fetchpatch,
  curl,
  jansson,
  perl,
  autoreconfHook,
}:

stdenv.mkDerivation rec {
  pname = "cpuminer";
  version = "2.5.1";

  src = fetchFromGitHub {
    owner = "pooler";
    repo = "cpuminer";
    rev = "v${version}";
    sha256 = "0f44i0z8rid20c2hiyp92xq0q0mjj537r05sa6vdbc0nl0a5q40i";
  };

  patches = [
    (fetchpatch {
      name = "fix-build-on-aarch64.patch";
      url = "https://github.com/pooler/cpuminer/commit/5f02105940edb61144c09a7eb960bba04a10d5b7.patch";
      hash = "sha256-lGAcwDcXgcJBFhasSEdQIEIY7pp6x/PEXHBsVwAOqhc=";
    })
  ];

  postPatch = if stdenv.cc.isClang then "${perl}/bin/perl ./nomacro.pl" else null;

  nativeBuildInputs = [ autoreconfHook ];
  buildInputs = [
    curl
    jansson
  ];

  configureFlags = [ "CFLAGS=-O3" ];

  meta = with lib; {
    homepage = "https://github.com/pooler/cpuminer";
    description = "CPU miner for Litecoin and Bitcoin";
    license = licenses.gpl2Plus;
    platforms = platforms.all;
    maintainers = with maintainers; [ pSub ];
    mainProgram = "minerd";
  };
}
