diff --git a/pkgs/development/ocaml-modules/mirage-bootvar-xen/default.nix b/pkgs/development/ocaml-modules/mirage-bootvar-xen/default.nix new file mode 100644 index 0000000000000..c280853488de4 --- /dev/null +++ b/pkgs/development/ocaml-modules/mirage-bootvar-xen/default.nix @@ -0,0 +1,34 @@ +{ lib +, buildDunePackage +, fetchurl +, mirage-xen +, parse-argv +, lwt +}: + +buildDunePackage rec { + pname = "mirage-bootvar-xen"; + version = "0.8.0"; + + minimumOCamlVersion = "4.08"; + + useDune2 = true; + + src = fetchurl { + url = "https://github.com/mirage/mirage-bootvar-xen/releases/download/v${version}/mirage-bootvar-xen-v${version}.tbz"; + sha256 = "0nk80giq9ng3svbnm68fjby2f1dnarddm3lk7mw7w59av71q0rcv"; + }; + + propagatedBuildInputs = [ + mirage-xen + lwt + parse-argv + ]; + + meta = with lib; { + description = "Handle boot-time arguments for Xen platform"; + license = licenses.isc; + maintainers = [ maintainers.sternenseemann ]; + homepage = "https://github.com/mirage/mirage-bootvar-xen"; + }; +} diff --git a/pkgs/development/ocaml-modules/mirage-net-xen/default.nix b/pkgs/development/ocaml-modules/mirage-net-xen/default.nix new file mode 100644 index 0000000000000..0d7a7e53fb1ad --- /dev/null +++ b/pkgs/development/ocaml-modules/mirage-net-xen/default.nix @@ -0,0 +1,39 @@ +{ lib +, buildDunePackage +, netchannel +, ppx_sexp_conv +, lwt +, cstruct +, mirage-net +, mirage-xen +, io-page +, lwt-dllist +, logs +}: + +buildDunePackage { + pname = "mirage-net-xen"; + + inherit (netchannel) + src + version + useDune2 + minimumOCamlVersion + meta + ; + + nativeBuildInputs = [ + ppx_sexp_conv + ]; + + propagatedBuildInputs = [ + lwt + cstruct + netchannel + mirage-net + mirage-xen + io-page + lwt-dllist + logs + ]; +} diff --git a/pkgs/development/ocaml-modules/mirage-xen/default.nix b/pkgs/development/ocaml-modules/mirage-xen/default.nix new file mode 100644 index 0000000000000..0d53d0f9c3b77 --- /dev/null +++ b/pkgs/development/ocaml-modules/mirage-xen/default.nix @@ -0,0 +1,78 @@ +{ lib +, buildDunePackage +, fetchurl +, pkg-config +, cstruct +, lwt +, shared-memory-ring-lwt +, xenstore +, lwt-dllist +, mirage-profile +, mirage-runtime +, logs +, fmt +, ocaml-freestanding +, bheap +, duration +, io-page +}: + +buildDunePackage rec { + pname = "mirage-xen"; + version = "6.0.0"; + + useDune2 = true; + + src = fetchurl { + url = "https://github.com/mirage/mirage-xen/releases/download/v${version}/mirage-xen-v${version}.tbz"; + sha256 = "f991e972059b27993c287ad010d9281fee061efaa1dd475d0955179f93710fbd"; + }; + + patches = [ + ./makefile-no-opam.patch + ./pkg-config.patch + ]; + + # can't handle OCAMLFIND_DESTDIR with substituteAll + postPatch = '' + substituteInPlace lib/bindings/mirage-xen.pc \ + --replace "@out@" "$out" \ + --replace "@OCAMLFIND_DESTDIR@" "$OCAMLFIND_DESTDIR" + ''; + + minimumOCamlVersion = "4.08"; + + nativeBuildInputs = [ + pkg-config + ]; + + propagatedBuildInputs = [ + cstruct + lwt + shared-memory-ring-lwt + xenstore + lwt-dllist + mirage-profile + mirage-runtime + io-page + logs + fmt + bheap + duration + (ocaml-freestanding.override { target = "xen"; }) + ]; + + # Move pkg-config files into their well-known location. + # This saves us an extra setup hook and causes no issues + # since we patch all relative paths out of the .pc file. + postInstall = '' + mv $OCAMLFIND_DESTDIR/pkgconfig $out/lib/pkgconfig + ''; + + meta = with lib; { + description = "Xen core platform libraries for MirageOS"; + license = licenses.isc; + maintainers = [ maintainers.sternenseemann ]; + homepage = "https://github.com/mirage/mirage-xen"; + }; +} diff --git a/pkgs/development/ocaml-modules/mirage-xen/makefile-no-opam.patch b/pkgs/development/ocaml-modules/mirage-xen/makefile-no-opam.patch new file mode 100644 index 0000000000000..905e6efc3f4a5 --- /dev/null +++ b/pkgs/development/ocaml-modules/mirage-xen/makefile-no-opam.patch @@ -0,0 +1,12 @@ +diff --git a/lib/bindings/Makefile b/lib/bindings/Makefile +index 4e413c0..67c7bdc 100644 +--- a/lib/bindings/Makefile ++++ b/lib/bindings/Makefile +@@ -1,4 +1,6 @@ +-PKG_CONFIG_PATH := $(shell opam config var prefix)/lib/pkgconfig ++ifneq (, $(shell command -v opam)) ++ PKG_CONFIG_PATH ?= $(shell opam config var prefix)/lib/pkgconfig ++endif + + CC ?= cc + FREESTANDING_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags ocaml-freestanding) diff --git a/pkgs/development/ocaml-modules/mirage-xen/pkg-config.patch b/pkgs/development/ocaml-modules/mirage-xen/pkg-config.patch new file mode 100644 index 0000000000000..19205cf7ee4d8 --- /dev/null +++ b/pkgs/development/ocaml-modules/mirage-xen/pkg-config.patch @@ -0,0 +1,13 @@ +diff --git a/lib/bindings/mirage-xen.pc b/lib/bindings/mirage-xen.pc +index a03a217..8499aa4 100644 +--- a/lib/bindings/mirage-xen.pc ++++ b/lib/bindings/mirage-xen.pc +@@ -1,6 +1,6 @@ +-prefix=${pcfiledir}/../.. ++prefix=@out@ + exec_prefix=${prefix} +-libdir=${exec_prefix}/lib ++libdir=@OCAMLFIND_DESTDIR@ + + Name: mirage-xen + Version: 6.0.0 diff --git a/pkgs/development/ocaml-modules/netchannel/default.nix b/pkgs/development/ocaml-modules/netchannel/default.nix new file mode 100644 index 0000000000000..e7b021d6fbe91 --- /dev/null +++ b/pkgs/development/ocaml-modules/netchannel/default.nix @@ -0,0 +1,55 @@ +{ lib +, buildDunePackage +, fetchurl +, ppx_sexp_conv +, ppx_cstruct +, lwt +, mirage-net +, io-page +, mirage-xen +, ipaddr +, mirage-profile +, shared-memory-ring +, sexplib +, logs +, rresult +}: + +buildDunePackage rec { + pname = "netchannel"; + version = "2.0.0"; + + useDune2 = true; + + minimumOCamlVersion = "4.08"; + + src = fetchurl { + url = "https://github.com/mirage/mirage-net-xen/releases/download/v${version}/mirage-net-xen-v${version}.tbz"; + sha256 = "ec3906ef1804ef6a9e36b91f4ae73ce4849e9e0d1d36a80fe66b5f905fab93ad"; + }; + + nativeBuildInputs = [ + ppx_cstruct + ]; + + propagatedBuildInputs = [ + ppx_sexp_conv + lwt + mirage-net + io-page + mirage-xen + ipaddr + mirage-profile + shared-memory-ring + sexplib + logs + rresult + ]; + + meta = with lib; { + description = "Network device for reading and writing Ethernet frames via then Xen netfront/netback protocol"; + license = licenses.isc; + maintainers = [ maintainers.sternenseemann ]; + homepage = "https://github.com/mirage/mirage-net-xen"; + }; +} diff --git a/pkgs/development/ocaml-modules/shared-memory-ring/default.nix b/pkgs/development/ocaml-modules/shared-memory-ring/default.nix new file mode 100644 index 0000000000000..3a96d4adee4c5 --- /dev/null +++ b/pkgs/development/ocaml-modules/shared-memory-ring/default.nix @@ -0,0 +1,41 @@ +{ lib +, buildDunePackage +, fetchurl +, ppx_cstruct +, mirage-profile +, cstruct +, ounit +}: + +buildDunePackage rec { + pname = "shared-memory-ring"; + version = "3.1.0"; + + useDune2 = true; + + src = fetchurl { + url = "https://github.com/mirage/shared-memory-ring/releases/download/v${version}/shared-memory-ring-v${version}.tbz"; + sha256 = "06350ph3rdfvybi0cgs3h3rdkmjspk3c4375rxvbdg0kza1w22x1"; + }; + + nativeBuildInputs = [ + ppx_cstruct + ]; + + propagatedBuildInputs = [ + mirage-profile + cstruct + ]; + + doCheck = true; + checkInputs = [ + ounit + ]; + + meta = with lib; { + description = "Shared memory rings for RPC and bytestream communications"; + license = licenses.isc; + homepage = "https://github.com/mirage/shared-memory-ring"; + maintainers = [ maintainers.sternenseemann ]; + }; +} diff --git a/pkgs/development/ocaml-modules/shared-memory-ring/lwt.nix b/pkgs/development/ocaml-modules/shared-memory-ring/lwt.nix new file mode 100644 index 0000000000000..8f41253bab8e5 --- /dev/null +++ b/pkgs/development/ocaml-modules/shared-memory-ring/lwt.nix @@ -0,0 +1,37 @@ +{ lib +, buildDunePackage +, shared-memory-ring +, ppx_cstruct +, cstruct +, lwt +, lwt-dllist +, mirage-profile +, ounit +}: + +buildDunePackage { + pname = "shared-memory-ring-lwt"; + + inherit (shared-memory-ring) version src useDune2; + + buildInputs = [ + ppx_cstruct + ]; + + propagatedBuildInputs = [ + shared-memory-ring + cstruct + lwt + lwt-dllist + mirage-profile + ]; + + doCheck = true; + checkInputs = [ + ounit + ]; + + meta = shared-memory-ring.meta // { + description = "Shared memory rings for RPC and bytestream communications using Lwt"; + }; +} diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index d8c1f2d3e4032..c7891a1821e82 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -675,6 +675,8 @@ let mirage-bootvar-unix = callPackage ../development/ocaml-modules/mirage-bootvar-unix { }; + mirage-bootvar-xen = callPackage ../development/ocaml-modules/mirage-bootvar-xen { }; + mirage-channel = callPackage ../development/ocaml-modules/mirage-channel { }; mirage-clock = callPackage ../development/ocaml-modules/mirage-clock { }; @@ -717,6 +719,8 @@ let mirage-net = callPackage ../development/ocaml-modules/mirage-net { }; + mirage-net-xen = callPackage ../development/ocaml-modules/mirage-net-xen { }; + mirage-profile = callPackage ../development/ocaml-modules/mirage-profile { }; mirage-protocols = callPackage ../development/ocaml-modules/mirage-protocols { }; @@ -739,6 +743,8 @@ let mirage-unix = callPackage ../development/ocaml-modules/mirage-unix { }; + mirage-xen = callPackage ../development/ocaml-modules/mirage-xen { }; + mirage-vnetif = callPackage ../development/ocaml-modules/mirage-vnetif { }; mlgmp = callPackage ../development/ocaml-modules/mlgmp { }; @@ -753,6 +759,8 @@ let mustache = callPackage ../development/ocaml-modules/mustache { }; + netchannel = callPackage ../development/ocaml-modules/netchannel { }; + nocrypto = callPackage ../development/ocaml-modules/nocrypto { }; nonstd = callPackage ../development/ocaml-modules/nonstd { }; @@ -1138,6 +1146,10 @@ let sha = callPackage ../development/ocaml-modules/sha { }; + shared-memory-ring = callPackage ../development/ocaml-modules/shared-memory-ring { }; + + shared-memory-ring-lwt = callPackage ../development/ocaml-modules/shared-memory-ring/lwt.nix { }; + sodium = callPackage ../development/ocaml-modules/sodium { }; spelll = callPackage ../development/ocaml-modules/spelll { };