Skip to content

Commit

Permalink
fstar: build with dune (NixOS#275924)
Browse files Browse the repository at this point in the history
  • Loading branch information
pnmadelaine authored and marcusramberg committed Dec 30, 2023
1 parent f78d313 commit 0c0f4c3
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 45 deletions.
88 changes: 43 additions & 45 deletions pkgs/development/compilers/fstar/default.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
{ lib, stdenv, writeScript, fetchFromGitHub, z3, ocamlPackages, makeWrapper, installShellFiles, removeReferencesTo }:
{ callPackage
, fetchFromGitHub
, installShellFiles
, lib
, makeWrapper
, ocamlPackages
, removeReferencesTo
, stdenv
, writeScript
, z3
}:

let

stdenv.mkDerivation rec {
pname = "fstar";
version = "2023.09.03";

src = fetchFromGitHub {
Expand All @@ -11,66 +21,54 @@ stdenv.mkDerivation rec {
hash = "sha256-ymoP5DvaLdrdwJcnhZnLEvwNxUFzhkICajPyK4lvacc=";
};

strictDeps = true;
fstar-dune = ocamlPackages.callPackage ./dune.nix { inherit version src; };

fstar-ulib = callPackage ./ulib.nix { inherit version src fstar-dune z3; };

in

stdenv.mkDerivation {
pname = "fstar";
inherit version src;

nativeBuildInputs = [
z3
makeWrapper
installShellFiles
makeWrapper
removeReferencesTo
] ++ (with ocamlPackages; [
ocaml
dune_3
findlib
ocamlbuild
menhir
]);

buildInputs = with ocamlPackages; [
batteries
zarith
stdint
yojson
fileutils
memtrace
menhirLib
pprint
sedlex
ppxlib
ppx_deriving
ppx_deriving_yojson
process
];

makeFlags = [ "PREFIX=$(out)" ];
inherit (fstar-dune) propagatedBuildInputs;

enableParallelBuilding = true;
dontBuild = true;

postPatch = ''
patchShebangs ulib/install-ulib.sh
'';
installPhase = ''
mkdir $out
preInstall = ''
mkdir -p $out/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/fstarlib
'';
postInstall = ''
# Remove build artifacts
find $out -name _build -type d | xargs -I{} rm -rf "{}"
CP="cp -r --no-preserve=mode"
$CP ${fstar-dune}/* $out
$CP ${fstar-ulib}/* $out
PREFIX=$out make -C src/ocaml-output install-sides
chmod +x $out/bin/fstar.exe
wrapProgram $out/bin/fstar.exe --prefix PATH ":" ${z3}/bin
remove-references-to -t '${ocamlPackages.ocaml}' $out/bin/fstar.exe
wrapProgram $out/bin/fstar.exe --prefix PATH ":" "${z3}/bin"
substituteInPlace $out/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/fstar/dune-package \
--replace ${fstar-dune} $out
installShellCompletion --bash .completion/bash/fstar.exe.bash
installShellCompletion --fish .completion/fish/fstar.exe.fish
installShellCompletion --zsh --name _fstar.exe .completion/zsh/__fstar.exe
'';

passthru.updateScript = writeScript "update-fstar" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p git gnugrep common-updater-scripts
set -eu -o pipefail
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p git gnugrep common-updater-scripts
set -eu -o pipefail
version="$(git ls-remote --tags [email protected]:FStarLang/FStar.git | grep -Po 'v\K\d{4}\.\d{2}\.\d{2}' | sort | tail -n1)"
update-source-version fstar "$version"
version="$(git ls-remote --tags [email protected]:FStarLang/FStar.git | grep -Po 'v\K\d{4}\.\d{2}\.\d{2}' | sort | tail -n1)"
update-source-version fstar "$version"
'';

meta = with lib; {
Expand Down
51 changes: 51 additions & 0 deletions pkgs/development/compilers/fstar/dune.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{ batteries
, buildDunePackage
, memtrace
, menhir
, menhirLib
, pprint
, ppx_deriving
, ppx_deriving_yojson
, ppxlib
, process
, sedlex
, src
, stdint
, version
, yojson
, zarith
}:

buildDunePackage {
pname = "fstar";
inherit version src;

postPatch = ''
patchShebangs ocaml/fstar-lib/make_fstar_version.sh
cd ocaml
'';

nativeBuildInputs = [
menhir
];

buildInputs = [
memtrace
];

propagatedBuildInputs = [
batteries
menhirLib
pprint
ppx_deriving
ppx_deriving_yojson
ppxlib
process
sedlex
stdint
yojson
zarith
];

enableParallelBuilding = true;
}
26 changes: 26 additions & 0 deletions pkgs/development/compilers/fstar/ulib.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{ fstar-dune
, src
, stdenv
, version
, z3
}:

stdenv.mkDerivation {
pname = "fstar-ulib";
inherit version src;

nativeBuildInputs = [
z3
];

postPatch = ''
mkdir -p bin
cp ${fstar-dune}/bin/fstar.exe bin
patchShebangs ulib/install-ulib.sh
cd ulib
'';

makeFlags = [ "PREFIX=$(out)" ];

enableParallelBuilding = true;
}

0 comments on commit 0c0f4c3

Please sign in to comment.