fstar: build with dune (#275924)

This commit is contained in:
Paul-Nicolas Madelaine
2023-12-27 22:20:31 +01:00
committed by GitHub
parent 6fe94ff539
commit 032d45b46c
3 changed files with 120 additions and 45 deletions
+43 -45
View File
@@ -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 {
@@ -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 git@github.com: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 git@github.com:FStarLang/FStar.git | grep -Po 'v\K\d{4}\.\d{2}\.\d{2}' | sort | tail -n1)"
update-source-version fstar "$version"
'';
meta = with lib; {
+51
View File
@@ -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
View File
@@ -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;
}