This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
302
unikernel/duniverse/dune_/flake.nix
Normal file
302
unikernel/duniverse/dune_/flake.nix
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
melange = {
|
||||
url = "github:melange-re/melange/refs/tags/5.1.0-53";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
ocaml-overlays = {
|
||||
url = "github:nix-ocaml/nix-overlays";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
outputs =
|
||||
{ self
|
||||
, flake-utils
|
||||
, nixpkgs
|
||||
, melange
|
||||
, ocaml-overlays
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system}.appendOverlays [
|
||||
ocaml-overlays.overlays.default
|
||||
(self: super: {
|
||||
ocamlPackages = super.ocaml-ng.ocamlPackages_5_3.overrideScope (oself: osuper: {
|
||||
mdx = osuper.mdx.override {
|
||||
logs = oself.logs;
|
||||
};
|
||||
utop = osuper.utop.overrideAttrs {
|
||||
dontGzipMan = true;
|
||||
};
|
||||
});
|
||||
})
|
||||
melange.overlays.default
|
||||
(self: super: {
|
||||
coq_8_16_native = super.coq_8_16.overrideAttrs (a: {
|
||||
configureFlags = [ "-native-compiler" "yes" ];
|
||||
});
|
||||
})
|
||||
];
|
||||
dune-static-overlay = self: super: {
|
||||
ocamlPackages = super.ocaml-ng.ocamlPackages_5_3.overrideScope (oself: osuper: {
|
||||
dune_3 = osuper.dune_3.overrideAttrs (a: {
|
||||
src = ./.;
|
||||
preBuild = "ocaml boot/bootstrap.ml --static";
|
||||
});
|
||||
});
|
||||
};
|
||||
pkgs-static = nixpkgs.legacyPackages.${system}.appendOverlays [
|
||||
ocaml-overlays.overlays.default
|
||||
dune-static-overlay
|
||||
];
|
||||
|
||||
add-experimental-configure-flags = pkg: pkg.overrideAttrs {
|
||||
configureFlags =
|
||||
[
|
||||
"--pkg-build-progress" "enable"
|
||||
"--lock-dev-tool" "enable"
|
||||
"--portable-lock-dir" "enable"
|
||||
];
|
||||
};
|
||||
|
||||
ocamlformat =
|
||||
let
|
||||
ocamlformat_version =
|
||||
let
|
||||
lists = pkgs.lib.lists;
|
||||
strings = pkgs.lib.strings;
|
||||
ocamlformat_config = strings.splitString "\n" (builtins.readFile ./.ocamlformat);
|
||||
prefix = "version=";
|
||||
ocamlformat_version_pred = line: strings.hasPrefix prefix line;
|
||||
version_line = lists.findFirst ocamlformat_version_pred "not_found" ocamlformat_config;
|
||||
version = strings.removePrefix prefix version_line;
|
||||
in
|
||||
builtins.replaceStrings [ "." ] [ "_" ] version;
|
||||
in
|
||||
builtins.getAttr ("ocamlformat_" + ocamlformat_version) pkgs;
|
||||
|
||||
testBuildInputs = with pkgs;
|
||||
[ file mercurial unzip ]
|
||||
++ lib.optionals stdenv.isLinux [ strace ];
|
||||
testNativeBuildInputs = pkgs: with pkgs; [
|
||||
nodejs-slim
|
||||
pkg-config
|
||||
opam
|
||||
ocamlformat
|
||||
];
|
||||
|
||||
docInputs = with pkgs.python3.pkgs; [
|
||||
sphinx-autobuild
|
||||
furo
|
||||
sphinx-copybutton
|
||||
sphinx-design
|
||||
myst-parser
|
||||
];
|
||||
in
|
||||
{
|
||||
formatter = pkgs.nixpkgs-fmt;
|
||||
|
||||
packages = {
|
||||
default = with pkgs; stdenv.mkDerivation {
|
||||
pname = "dune";
|
||||
version = "3.x-n/a";
|
||||
src =
|
||||
let fs = lib.fileset; in
|
||||
fs.toSource {
|
||||
root = ./.;
|
||||
fileset = fs.unions [
|
||||
./bin
|
||||
./boot
|
||||
./configure
|
||||
./dune-project
|
||||
./dune-file
|
||||
./src
|
||||
./plugin
|
||||
./vendor
|
||||
./otherlibs
|
||||
./Makefile
|
||||
(fs.fileFilter (file: file.hasExt "opam" || file.hasExt "template") ./.)
|
||||
];
|
||||
};
|
||||
nativeBuildInputs = with ocamlPackages; [ ocaml findlib ];
|
||||
buildInputs = lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk.frameworks.CoreServices
|
||||
];
|
||||
strictDeps = true;
|
||||
buildFlags = [ "release" ];
|
||||
dontAddPrefix = true;
|
||||
dontAddStaticConfigureFlags = true;
|
||||
configurePlatforms = [ ];
|
||||
installFlags = [ "PREFIX=${placeholder "out"}" "LIBDIR=$(OCAMLFIND_DESTDIR)" ];
|
||||
};
|
||||
dune = self.packages.${system}.default;
|
||||
dune-static = pkgs-static.pkgsCross.musl64.ocamlPackages.dune;
|
||||
dune-experimental = add-experimental-configure-flags self.packages.${system}.dune;
|
||||
dune-static-experimental = add-experimental-configure-flags self.packages.${system}.dune-static;
|
||||
};
|
||||
|
||||
devShells =
|
||||
let
|
||||
INSIDE_NIX = "true";
|
||||
makeDuneDevShell =
|
||||
{ extraBuildInputs ? (pkgs: [ ])
|
||||
, meta ? null
|
||||
, duneFromScope ? false
|
||||
}:
|
||||
let
|
||||
pkgs' =
|
||||
if duneFromScope then
|
||||
pkgs.extend
|
||||
(pself: psuper: {
|
||||
ocamlPackages = psuper.ocamlPackages.overrideScope (oself: osuper: {
|
||||
dune_3 = self.packages.${system}.default;
|
||||
});
|
||||
})
|
||||
else pkgs;
|
||||
|
||||
inherit (pkgs') writeScriptBin stdenv;
|
||||
|
||||
duneScript =
|
||||
writeScriptBin "dune" ''
|
||||
#!${stdenv.shell}
|
||||
"$DUNE_SOURCE_ROOT"/_boot/dune.exe $@
|
||||
'';
|
||||
in
|
||||
|
||||
pkgs'.mkShell {
|
||||
shellHook = ''
|
||||
export DUNE_SOURCE_ROOT=$PWD
|
||||
'';
|
||||
inherit meta;
|
||||
nativeBuildInputs = (testNativeBuildInputs pkgs')
|
||||
++ docInputs
|
||||
++ [ duneScript ];
|
||||
inputsFrom = [ pkgs'.ocamlPackages.dune_3 ];
|
||||
buildInputs = testBuildInputs ++ (with pkgs'.ocamlPackages; [
|
||||
ocaml-lsp
|
||||
merlin
|
||||
ocaml-index
|
||||
ppx_expect
|
||||
spawn
|
||||
ctypes
|
||||
integers
|
||||
mdx
|
||||
cinaps
|
||||
menhir
|
||||
odoc
|
||||
lwt
|
||||
patdiff
|
||||
] ++ (extraBuildInputs pkgs'));
|
||||
inherit INSIDE_NIX;
|
||||
};
|
||||
in
|
||||
{
|
||||
doc =
|
||||
pkgs.mkShell {
|
||||
inherit INSIDE_NIX;
|
||||
buildInputs = docInputs;
|
||||
meta.description = ''
|
||||
Provides a shell environment suitable for building the Dune
|
||||
documentation website (e.g. `make doc`).
|
||||
'';
|
||||
};
|
||||
|
||||
fmt =
|
||||
pkgs.mkShell {
|
||||
inherit INSIDE_NIX;
|
||||
nativeBuildInputs = [ ocamlformat ];
|
||||
inputsFrom = [ pkgs.dune_3 ];
|
||||
meta.description = ''
|
||||
Provides a shell environment suitable for formatting the Dune
|
||||
codebase source code (e.g. with `make fmt`).
|
||||
'';
|
||||
};
|
||||
|
||||
slim = makeDuneDevShell {
|
||||
meta.description = ''
|
||||
Provides a minimal shell environment built purely from nixpkgs
|
||||
that can run the testsuite (except the coq / melange tests).
|
||||
'';
|
||||
};
|
||||
slim-melange = makeDuneDevShell {
|
||||
extraBuildInputs = pkgs: [
|
||||
pkgs.ocamlPackages.melange
|
||||
];
|
||||
meta.description = ''
|
||||
Provides a minimal shell environment built purely from nixpkgs
|
||||
that can run the testsuite (except the coq tests).
|
||||
'';
|
||||
};
|
||||
slim-opam = with pkgs; mkShell {
|
||||
inherit INSIDE_NIX;
|
||||
nativeBuildInputs = lib.remove pkgs.ocamlformat (testNativeBuildInputs pkgs);
|
||||
buildInputs = lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk.frameworks.CoreServices
|
||||
];
|
||||
meta.description = ''
|
||||
provides a shell with just `opam` and minimal (external)
|
||||
dependencies to run the testsuite.";
|
||||
'';
|
||||
};
|
||||
|
||||
coq =
|
||||
pkgs.mkShell {
|
||||
inherit INSIDE_NIX;
|
||||
nativeBuildInputs = (testNativeBuildInputs pkgs);
|
||||
# Coq requires OCaml 4.x
|
||||
inputsFrom = [ pkgs.ocaml-ng.ocamlPackages_4_14.dune_3 ];
|
||||
buildInputs = with pkgs; [
|
||||
coq_8_16_native
|
||||
coq_8_16_native.ocamlPackages.findlib
|
||||
];
|
||||
meta.description = ''
|
||||
Provides a minimal shell environment built purely from nixpkgs
|
||||
that can build Dune and the Coq testsuite.
|
||||
'';
|
||||
};
|
||||
microbench = makeDuneDevShell {
|
||||
extraBuildInputs = pkgs: [
|
||||
pkgs.ocamlPackages.core_bench
|
||||
];
|
||||
meta.description = ''
|
||||
Provides a minimal shell environment that can build the
|
||||
microbenchmarks.
|
||||
'';
|
||||
};
|
||||
|
||||
scope = makeDuneDevShell {
|
||||
duneFromScope = true;
|
||||
meta.description = ''
|
||||
Provides a minimal shell environment built purely from nixpkgs
|
||||
that replaces the Dune executable in the `ocamlPackages` scope by
|
||||
the Dune binary built by from the repo.
|
||||
'';
|
||||
};
|
||||
default =
|
||||
makeDuneDevShell {
|
||||
extraBuildInputs = pkgs: (with pkgs; [
|
||||
# dev tools
|
||||
ccls
|
||||
# test dependencies
|
||||
git
|
||||
which
|
||||
curl
|
||||
procps
|
||||
]) ++ (with pkgs.ocamlPackages; [
|
||||
pkgs.ocamlPackages.ocaml-lsp
|
||||
pkgs.ocamlPackages.melange
|
||||
js_of_ocaml-compiler
|
||||
js_of_ocaml
|
||||
utop
|
||||
core_bench
|
||||
]);
|
||||
meta.description = ''
|
||||
Provides a shell environment where `dune` is provided and built
|
||||
using the source code in this repo.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue