{ lib
, stdenv
, fetchFromGitHub
, rocmUpdateScript
, pkg-config
, texinfo
, bison
, flex
, glibc
, zlib
, gmp
, mpfr
, ncurses
, expat
, rocdbgapi
, python3
, babeltrace
, sourceHighlight
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "rocgdb";
  version = "6.0.2";

  src = fetchFromGitHub {
    owner = "ROCm";
    repo = "ROCgdb";
    rev = "rocm-${finalAttrs.version}";
    hash = "sha256-XeX/k8gfo9HgcUSIjs35C7IqCmFhvBOqQJSOoPF6HK4=";
  };

  nativeBuildInputs = [
    pkg-config
    texinfo # For makeinfo
    bison
    flex
  ];

  buildInputs = [
    zlib
    gmp
    mpfr
    ncurses
    expat
    rocdbgapi
    python3
    babeltrace
    sourceHighlight
  ];

  configureFlags = [
    # Ensure we build the amdgpu traget
    "--enable-targets=${stdenv.targetPlatform.config},amdgcn-amd-amdhsa"
    "--with-amd-dbgapi=yes"

    "--with-iconv-path=${glibc.bin}"
    "--enable-tui"
    "--with-babeltrace"
    "--with-python=python3"
    "--with-system-zlib"
    "--enable-64-bit-bfd"
    "--with-gmp=${gmp.dev}"
    "--with-mpfr=${mpfr.dev}"
    "--with-expat"
    "--with-libexpat-prefix=${expat.dev}"

    # So the installed binary is called "rocgdb" instead on plain "gdb"
    "--program-prefix=roc"

    # Disable building many components not used or incompatible with the amdgcn target
    "--disable-sim"
    "--disable-gdbserver"
    "--disable-ld"
    "--disable-gas"
    "--disable-gdbserver"
    "--disable-sim"
    "--disable-gdbtk"
    "--disable-gprofng"
    "--disable-shared"
  ];

  # The source directory for ROCgdb (based on upstream GDB) contains multiple project
  # of GNUâ€™s toolchain (binutils and onther), we only need to install the GDB part.
  installPhase = ''
    make install-gdb
  '';

  # `-Wno-format-nonliteral` doesn't work
  env.NIX_CFLAGS_COMPILE = "-Wno-error=format-security";

  passthru.updateScript = rocmUpdateScript {
    name = finalAttrs.pname;
    owner = finalAttrs.src.owner;
    repo = finalAttrs.src.repo;
  };

  meta = with lib; {
    description = "ROCm source-level debugger for Linux, based on GDB";
    homepage = "https://github.com/ROCm/ROCgdb";
    license = licenses.gpl3Plus;
    maintainers = teams.rocm.members;
    platforms = platforms.linux;
    broken = versionAtLeast finalAttrs.version "7.0.0";
  };
})
