{
  lib,
  stdenv,
  fetchurl,
  SDL,
  curl,
  openssl,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "tinyemu";
  version = "2019-12-21";

  src = fetchurl {
    url = "https://bellard.org/tinyemu/tinyemu-${finalAttrs.version}.tar.gz";
    hash = "sha256-voNR8hIYGbMXL87c5csYJvoSyH2ht+2Y8mnT6AKgVVU=";
  };

  nativeBuildInputs = [ SDL ];

  buildInputs = [
    SDL
    curl
    openssl
  ];

  strictDeps = true;

  makeFlags = [
    "CC:=$(CC)"
    "STRIP:=$(STRIP)"
    "bindir=$(out)/bin"
  ];

  preInstall = ''
    mkdir -p "$out/bin"
  '';

  meta = {
    homepage = "https://bellard.org/tinyemu/";
    description = "System emulator for the RISC-V and x86 architectures";
    longDescription = ''
      TinyEMU is a system emulator for the RISC-V and x86 architectures. Its
      purpose is to be small and simple while being complete.

      Main features:

      - RISC-V system emulator supporting the RV128IMAFDQC base ISA (user level
        ISA version 2.2, priviledged architecture version 1.10) including:
        - 32/64/128 bit integer registers
        - 32/64/128 bit floating point instructions (using the SoftFP Library)
        - Compressed instructions
        - Dynamic XLEN change
      - x86 system emulator based on KVM
      - VirtIO console, network, block device, input and 9P filesystem
      - Graphical display with SDL
      - JSON configuration file
      - Remote HTTP block device and filesystem
      - Small code, easy to modify, few external dependancies
      - Javascript version running Linux and Windows 2000.
    '';
    license = with lib.licenses; [
      mit
      bsd2
    ];
    maintainers = with lib.maintainers; [ AndersonTorres ];
    platforms = lib.platforms.unix;
  };
})