{ alliance-check-toolkit, soclayout, pinmux, ... }:

{ stdenv, coriolis-combined, coriolis-unicorn, coriolis-cumulus, fetchurl
, python3Packages, alliance, yosys, writeShellScriptBin, fetchFromGitHub }:

let
  C4MLogo = fetchurl {
    url = "https://ftp.libre-soc.org/C4MLogo.gds";
    sha256 = "0s1a2l4rh6vc1xg94jq87lsdkiqv68b0zi2rnv6wwcl9i2smacbf";
  };
  lip6 = fetchurl {
    url = "https://ftp.libre-soc.org/lip6.gds";
    sha256 = "0jj4z2d0is1vr3fziaqva39s7d85j0xqmmib0mdqnf2bg9iv91s4";
  };
  sorbonne_logo = fetchurl {
    url = "https://ftp.libre-soc.org/sorbonne_logo.gds";
    sha256 = "1p3plmb90kqljwsba2fahqzsy18iapmw2zvgkjh745c87lynn3dq";
  };
  libresoc_logo = fetchurl {
    url = "https://ftp.libre-soc.org/libresoc_logo.gds";
    sha256 = "1wbc5qrjlyrykaixdgp5d7brv5imlx71909y49xss907mil76bwh";
  };

  fakegit = writeShellScriptBin "git" "exit 0";
  fakewget = writeShellScriptBin "wget" "exit 0";
  yosys' = yosys.overrideAttrs (_: {
    version = "0.9+4008";
    src = fetchFromGitHub {
      owner = "YosysHQ";
      repo = "yosys";
      rev = "049e3abf9baf795e69b9ecb9c4f19de6131f8418";
      sha256 = "0h3w91jr5yws4wxk3n45h1pdq65jhj957d5pzy2799gzwkba5adh";
    };
  });
in
let yosys = yosys'; in
stdenv.mkDerivation rec {
  name = "libresoc-check";

  src = soclayout;

  YOSYS_TOP = "${yosys}";
  ALLIANCE_TOP = "${alliance}";
  CORIOLIS_TOP = "${coriolis-combined}";
  # The user configuration for verhaegs is empty,
  # which is why we use it.
  USER = "verhaegs";

  nativeBuildInputs = [ fakewget fakegit alliance coriolis-unicorn coriolis-cumulus yosys ];

  prePatch = ''
    rmdir pinmux
    cp -r ${pinmux} -T pinmux

    cp -r ${alliance-check-toolkit} -T alliance-check-toolkit

    chmod a+w -R alliance-check-toolkit pinmux

    export ALLIANCE_TOOLKIT="$PWD/alliance-check-toolkit"
    export CHECK_TOOLKIT="$ALLIANCE_TOOLKIT"
  '';
  postPatch = "patchShebangs .";

  buildPhase = ''
    runHook preBuild
    cd experiments9

    ln -s ${C4MLogo} C4MLogo.gds
    ln -s ${lip6} lip6.gds
    ln -s ${sorbonne_logo} sorbonne_logo.gds
    ln -s ${libresoc_logo} libresoc_logo.gds

    ./mksym.sh
    ./build_full_4ksram.sh
    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall
    mv -T "$PWD" "$out"
    runHook postInstall
  '';

  fixupPhase = "true";
}