mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-19 09:16:29 +00:00
Merge pull request #1631 from samoht/multi-stage
miragesdk: simplify the build by using multi-stage Dockerfile
This commit is contained in:
commit
857d8b6448
5
projects/miragesdk/src/.gitignore
vendored
5
projects/miragesdk/src/.gitignore
vendored
@ -3,9 +3,10 @@
|
||||
.dev
|
||||
obj/
|
||||
hash
|
||||
*.install
|
||||
|
||||
# Generated by jbuilder
|
||||
dhcp-client/calf/.merlin
|
||||
dhcp-client-calf/.merlin
|
||||
dhcp-client/bpf/.merlin
|
||||
dhcp-client/.merlin
|
||||
sdk/.merlin
|
||||
@ -14,7 +15,7 @@ test/.merlin
|
||||
# Generated by `make dev`
|
||||
_build/
|
||||
main.native
|
||||
dhcp-client/calf/dhcp_client
|
||||
dhcp-client-calf/dhcp_client
|
||||
src/bpf/.merlin
|
||||
|
||||
# Generated by the mirage tool
|
||||
|
88
projects/miragesdk/src/Dockerfile
Normal file
88
projects/miragesdk/src/Dockerfile
Normal file
@ -0,0 +1,88 @@
|
||||
### Capnp compiler
|
||||
|
||||
FROM alpine:3.5 as capnp
|
||||
|
||||
RUN mkdir -p /src
|
||||
RUN apk update && apk add autoconf automake libtool linux-headers git g++ make
|
||||
|
||||
RUN cd /src && git clone https://github.com/sandstorm-io/capnproto.git
|
||||
WORKDIR /src/capnproto/c++
|
||||
RUN ./setup-autotools.sh
|
||||
RUN autoreconf -i
|
||||
RUN ./configure
|
||||
RUN make -j6 check
|
||||
RUN make install
|
||||
RUN which capnp
|
||||
|
||||
|
||||
### SDK
|
||||
|
||||
FROM ocaml/opam:alpine-3.5_ocaml-4.04.0 as sdk
|
||||
RUN git -C /home/opam/opam-repository pull && opam update -u
|
||||
|
||||
COPY --from=capnp /usr/local/bin/capnp /usr/local/bin/
|
||||
COPY --from=capnp /usr/local/lib/libcapnpc-0.6-dev.so /usr/local/lib/
|
||||
COPY --from=capnp /usr/local/lib/libcapnp-0.6-dev.so /usr/local/lib/
|
||||
COPY --from=capnp /usr/local/lib/libkj-0.6-dev.so /usr/local/lib/
|
||||
|
||||
RUN sudo mkdir -p /src
|
||||
USER opam
|
||||
WORKDIR /src
|
||||
|
||||
RUN opam pin add jbuilder 1.0+beta7 -n
|
||||
|
||||
RUN opam depext -uiy cstruct lwt logs irmin-git rawlink tuntap astring rresult \
|
||||
mirage-flow-lwt mirage-channel-lwt io-page decompress capnp
|
||||
|
||||
RUN opam list
|
||||
|
||||
COPY ./sdk /src/
|
||||
COPY ./sdk.opam /src/
|
||||
RUN sudo chown opam -R /src
|
||||
|
||||
RUN opam config exec -- jbuilder build -p sdk @install
|
||||
RUN opam config exec -- jbuilder install sdk
|
||||
|
||||
### Privileged Container
|
||||
|
||||
FROM sdk as priv
|
||||
|
||||
RUN opam pin add tuntap 1.0.0 -n
|
||||
RUN opam depext -iy bos cmdliner
|
||||
|
||||
RUN opam list
|
||||
|
||||
COPY ./dhcp-client /src/dhcp-client
|
||||
RUN sudo chown opam -R /src
|
||||
|
||||
RUN opam config exec -- jbuilder build dhcp-client/main.exe
|
||||
RUN sudo mkdir -p /bin
|
||||
RUN sudo cp /src/_build/default/dhcp-client/main.exe /bin/dhcp-client
|
||||
|
||||
|
||||
### Calf Container
|
||||
|
||||
FROM sdk as calf
|
||||
|
||||
RUN opam pin add charrua-client https://github.com/yomimono/charrua-client.git#state-halfway -n
|
||||
RUN opam pin add mirage-net-fd 0.2.0 -n
|
||||
RUN opam depext -iy mirage-net-fd charrua-client lwt mirage-types-lwt cmdliner
|
||||
|
||||
RUN opam list
|
||||
|
||||
COPY ./dhcp-client-calf/unikernel.ml /src/dhcp-client-calf/
|
||||
COPY ./dhcp-client-calf/jbuild /src/dhcp-client-calf/
|
||||
RUN sudo chown opam -R /src
|
||||
|
||||
RUN opam config exec -- jbuilder build dhcp-client-calf/unikernel.exe
|
||||
RUN sudo mkdir -p /bin/calf
|
||||
RUN sudo cp /src/_build/default/dhcp-client-calf/unikernel.exe /bin/calf/dhcp-client-calf
|
||||
|
||||
### Final build
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=priv /bin /
|
||||
COPY --from=calf /bin /
|
||||
COPY dhcp-client-calf/config.json /calf/
|
||||
CMD ["/dhcp-client", "-vv"]
|
@ -1,37 +0,0 @@
|
||||
FROM ocaml/opam:alpine-3.5_ocaml-4.04.0
|
||||
RUN cd /home/opam/opam-repository && git pull && opam update -u
|
||||
|
||||
## pins for priv
|
||||
|
||||
# to bring eth0 up
|
||||
RUN opam pin add tuntap 1.0.0 -n
|
||||
RUN opam pin add mirage-net-fd 0.2.0 -n
|
||||
|
||||
## pins for calf
|
||||
|
||||
RUN opam pin add charrua-client https://github.com/yomimono/charrua-client.git#state-halfway -n
|
||||
|
||||
## depdendencies
|
||||
|
||||
RUN opam depext -iy \
|
||||
irmin-unix cohttp decompress rawlink tuntap jbuilder irmin-watcher inotify \
|
||||
rresult lwt capnp charrua-client mirage-net-fd ptime bos \
|
||||
mirage-flow-lwt mirage-channel-lwt mirage-types-lwt
|
||||
|
||||
RUN sudo mkdir -p /src
|
||||
COPY ./sdk /src/sdk
|
||||
COPY ./dhcp-client /src/dhcp-client
|
||||
RUN sudo chown opam -R /src
|
||||
|
||||
USER opam
|
||||
WORKDIR /src
|
||||
|
||||
RUN opam list
|
||||
|
||||
RUN opam config exec -- jbuilder build dhcp-client/main.exe
|
||||
RUN sudo cp /src/_build/default/dhcp-client/main.exe /dhcp-client
|
||||
RUN apk add capnp
|
||||
|
||||
RUN opam config exec -- jbuilder build dhcp-client/calf/unikernel.exe
|
||||
RUN sudo mkdir -p /calf
|
||||
RUN sudo cp /src/_build/default/dhcp-client/calf/unikernel.exe /calf/dhcp-client-calf
|
@ -1,28 +0,0 @@
|
||||
FROM ocaml/opam:alpine-3.5_ocaml-4.04.0
|
||||
RUN cd /home/opam/opam-repository && git pull && opam update -u
|
||||
|
||||
## pins for priv
|
||||
|
||||
# to bring eth0 up
|
||||
RUN opam pin add tuntap 1.0.0 -n
|
||||
RUN opam pin add mirage-net-fd 0.2.0 -n
|
||||
|
||||
## pins for calf
|
||||
|
||||
RUN opam pin add charrua-client https://github.com/yomimono/charrua-client.git#state-halfway -n
|
||||
|
||||
## depdendencies
|
||||
|
||||
RUN opam depext -iy \
|
||||
irmin-unix cohttp decompress rawlink tuntap jbuilder irmin-watcher inotify \
|
||||
rresult lwt capnp charrua-client mirage-net-fd ptime bos \
|
||||
mirage-flow-lwt mirage-channel-lwt mirage-types-lwt
|
||||
|
||||
RUN sudo mkdir -p /src /bin
|
||||
COPY . /src
|
||||
COPY init-dev.sh /home/opam/init-dev.sh
|
||||
|
||||
USER opam
|
||||
WORKDIR /src
|
||||
|
||||
ENTRYPOINT ["/bin/sh", "/home/opam/init-dev.sh"]
|
@ -1,4 +0,0 @@
|
||||
#FROM ocaml/opam:alpine-3.5_ocaml-4.04.0
|
||||
FROM scratch
|
||||
COPY obj ./
|
||||
CMD ["/dhcp-client", "-vv"]
|
@ -1,81 +1,39 @@
|
||||
BASE=ocaml/opam:alpine-3.5_ocaml-4.04.0
|
||||
|
||||
FILES=$(shell find . -name jbuild) \
|
||||
$(shell find sdk/ -name '*.ml') \
|
||||
$(shell find sdk/ -name '*.mli') \
|
||||
dhcp-client/bpf/dhcp.c dhcp-client/main.ml
|
||||
IMAGE=dhcp-client
|
||||
OBJS=obj/dhcp-client
|
||||
dhcp-client/bpf/dhcp.c dhcp-client/main.ml \
|
||||
dhcp-client-calf/unikernel.ml dhcp-client-calf/config.json
|
||||
|
||||
MIRAGE_COMPILE=mobylinux/mirage-compile:f903b0e1b4328271364cc63f123ac49d56739cef@sha256:a54d9ca84d3f5998dba92ce83d60d49289cee8908a8b0f6ec280d30ab8edf46c
|
||||
CALF_OBJS=obj/calf/dhcp-client-calf
|
||||
CALF_FILES=dhcp-client/calf/config.ml dhcp-client/calf/unikernel.ml \
|
||||
dhcp-client/calf/jbuild
|
||||
IMAGE=dhcp-client
|
||||
|
||||
default: push
|
||||
@
|
||||
|
||||
.build: Dockerfile.build $(FILES)
|
||||
docker build $(NO_CACHE) -t $(IMAGE):build -f Dockerfile.build -q . > .build || \
|
||||
.build: Dockerfile $(FILES)
|
||||
docker build $(NO_CACHE) -t $(IMAGE) -f Dockerfile .
|
||||
docker build $(NO_CACHE) -t $(IMAGE) -f Dockerfile -q . > .build || \
|
||||
(rm -f $@ && exit 1)
|
||||
|
||||
.pkg: Dockerfile.pkg $(OBJS) $(CALF_OBJS) obj/config.json
|
||||
docker build --no-cache -t $(IMAGE):pkg -f Dockerfile.pkg -q . > .pkg || \
|
||||
(rm -f $@ && exit 1)
|
||||
|
||||
.dev: Dockerfile.dev init-dev.sh
|
||||
docker build $(NO_CACHE) -t $(IMAGE):dev -f Dockerfile.dev -q . > .dev || \
|
||||
(rm -f $@ && exit 1)
|
||||
|
||||
enter-pkg: .pkg
|
||||
docker run -v /bin/sh:/bin/sh -it --rm --entrypoint=/bin/sh $(shell cat .pkg)
|
||||
|
||||
enter-build: .build
|
||||
docker run -it --rm $(shell cat .build)
|
||||
|
||||
enter-dev: .dev
|
||||
docker run --privileged -it -v `pwd`:/src $(shell cat .dev)
|
||||
|
||||
#$(CALF_OBJS): $(CALF_FILES)
|
||||
# mkdir -p obj/bin
|
||||
# ( cd obj && \
|
||||
# tar -C ../dhcp-client/calf -cf - $(CALF_FILES:dhcp-client/calf/%=%) | \
|
||||
# docker run --rm -i --log-driver=none $(MIRAGE_COMPILE) -o dhcp-client-calf | \
|
||||
# tar xf - || exit 1) && \
|
||||
# touch $@
|
||||
|
||||
$(OBJS): .build $(FILES)
|
||||
mkdir -p obj/calf
|
||||
( cd obj && \
|
||||
docker run --rm --net=none --log-driver=none -i $(IMAGE):build tar -cf - $(OBJS:obj/%=/%) | tar xf - ) && \
|
||||
touch $@
|
||||
|
||||
$(CALF_OBJS): .build $(CALF_FILES)
|
||||
mkdir -p obj/calf
|
||||
( cd obj && \
|
||||
docker run --rm --net=none --log-driver=none -i $(IMAGE):build tar -cf - $(CALF_OBJS:obj/%=/%) | tar xf - ) && \
|
||||
touch $@
|
||||
|
||||
obj/config.json: dhcp-client/calf/config.json
|
||||
mkdir -p obj/calf
|
||||
cp $^ $@
|
||||
|
||||
hash: Makefile Dockerfile.build Dockerfile.pkg $(FILES) $(CALF_FILES) .build obj/config.json
|
||||
hash: Makefile Dockerfile $(FILES) .build
|
||||
{ cat $^; \
|
||||
docker run --rm --entrypoint sh $(IMAGE):build -c 'cat /lib/apk/db/installed'; \
|
||||
docker run --rm --entrypoint sh $(IMAGE):build -c 'opam list'; } \
|
||||
docker run --rm --entrypoint sh $(IMAGE) -c 'cat /lib/apk/db/installed'; \
|
||||
docker run --rm --entrypoint sh $(IMAGE) -c 'opam list'; } \
|
||||
| sha1sum | sed 's/ .*//' > $@
|
||||
|
||||
push: hash .pkg
|
||||
tag: .build
|
||||
docker tag $(IMAGE) mobylinux/$(IMAGE):$(shell cat hash)
|
||||
|
||||
push: hash .build
|
||||
docker pull $(BASE)
|
||||
docker pull mobylinux/$(IMAGE):$(shell cat hash) || \
|
||||
(docker tag $(IMAGE):pkg mobylinux/$(IMAGE):$(shell cat hash) && \
|
||||
(docker tag $(IMAGE) mobylinux/$(IMAGE):$(shell cat hash) && \
|
||||
docker push mobylinux/$(IMAGE):$(shell cat hash))
|
||||
|
||||
clean::
|
||||
rm -rf hash obj .build .pkg .dev
|
||||
(docker rmi -f $(IMAGE):build || echo ok)
|
||||
(docker rmi -f $(IMAGE):pkg || echo ok)
|
||||
(docker rmi -f $(IMAGE):dev || echo ok)
|
||||
rm -rf hash .build
|
||||
(docker rmi -f $(IMAGE) || echo ok)
|
||||
|
||||
#### DEV
|
||||
|
||||
@ -85,11 +43,10 @@ test:
|
||||
jbuilder runtest --dev
|
||||
|
||||
dev-clean:
|
||||
rm -rf _build dhcp-client/calf/_build
|
||||
rm -rf _build
|
||||
|
||||
dev:
|
||||
jbuilder build dhcp-client/main.exe --dev
|
||||
jbuilder build dhcp-client/calf/unikernel.exe --dev
|
||||
# cd dhcp-client/calf && mirage configure && make
|
||||
jbuilder build dhcp-client-calf/unikernel.exe --dev
|
||||
|
||||
.DELETE_ON_ERROR:
|
||||
|
@ -3,6 +3,6 @@
|
||||
(executables
|
||||
((names (unikernel))
|
||||
(libraries (sdk mirage-net-fd lwt charrua-client.mirage charrua-client
|
||||
lwt.unix))
|
||||
lwt.unix cmdliner fmt.cli logs.fmt logs.cli fmt.tty))
|
||||
(flags (-cclib -static))
|
||||
))
|
@ -1,57 +0,0 @@
|
||||
open Mirage
|
||||
|
||||
(* create a new device for mirage-net-fd *)
|
||||
(* FIXME: should check it is invoked only with the unix backend *)
|
||||
(* FIXME: this is a temporary solution, this should be exposed
|
||||
as a ukvm/virtio device *)
|
||||
let netif_of_fd id = impl @@
|
||||
let key = Key.abstract id in
|
||||
object
|
||||
inherit base_configurable
|
||||
method ty = network
|
||||
val name = Functoria_app.Name.create "net" ~prefix:"net"
|
||||
method name = name
|
||||
method module_name = "Netif_fd"
|
||||
method keys = [ key ]
|
||||
method packages = Key.pure [ package "mirage-net-fd" ]
|
||||
method connect _ modname _ =
|
||||
Fmt.strf "@[let (key: int) = %a in@,
|
||||
%s.connect (Obj.magic key: Unix.file_descr)@]"
|
||||
Key.serialize_call key modname
|
||||
method configure i =
|
||||
Ok ()
|
||||
end
|
||||
|
||||
let dhcp_codes =
|
||||
let doc = Key.Arg.info ~docv:"OPT" ~doc:"DHCP options." ["c";"codes"] in
|
||||
Key.(abstract @@ create "codes" Arg.(opt (list string) [] doc))
|
||||
|
||||
let net =
|
||||
let doc =
|
||||
Key.Arg.info ~docv:"FD" ~doc:"Network interface" ["net"]
|
||||
in
|
||||
let key = Key.(create "input" Arg.(opt int 3 doc)) in
|
||||
netif_of_fd key
|
||||
|
||||
let ctl =
|
||||
let doc =
|
||||
Key.Arg.info ~docv:"FD" ~doc:"Control interface" ["ctl"]
|
||||
in
|
||||
let key = Key.(create "output" Arg.(opt int 4 doc)) in
|
||||
netif_of_fd key
|
||||
|
||||
let keys = [dhcp_codes]
|
||||
|
||||
let packages = [
|
||||
package "jsonm";
|
||||
package "charrua-client";
|
||||
package "duration";
|
||||
package "charrua-client" ~sublibs:["mirage"];
|
||||
package "cohttp" ~sublibs:["lwt"]
|
||||
]
|
||||
|
||||
let main =
|
||||
foreign ~keys ~packages "Unikernel.Main"
|
||||
(time @-> network @-> network @-> job)
|
||||
|
||||
let () = register "dhcp-client" [main $ default_time $ net $ ctl]
|
@ -2,6 +2,6 @@
|
||||
|
||||
(executables
|
||||
((names (main))
|
||||
(libraries (sdk bpf_dhcp bos))
|
||||
(libraries (sdk bpf_dhcp bos cmdliner fmt.cli logs.fmt logs.cli fmt.tty))
|
||||
(flags (-cclib -static))
|
||||
))
|
||||
|
24
projects/miragesdk/src/sdk.opam
Normal file
24
projects/miragesdk/src/sdk.opam
Normal file
@ -0,0 +1,24 @@
|
||||
opam-version: "1.2"
|
||||
name: "sdk"
|
||||
version: "dev"
|
||||
maintainer: "Thomas Gazagnaire <thomas@gazagnaire.org>"
|
||||
authors: "Thomas Gazagnaire <thomas@gazagnaire.org>"
|
||||
homepage: "https://github.com/linuxkit/linuxkit"
|
||||
bug-reports: "https://github.com/linuxkit/linuxkit/issues"
|
||||
license: "Apache"
|
||||
dev-repo: "https://github.com/linuxkit/linuxkit.git"
|
||||
|
||||
build: ["jbuilder" "build" "-p" name "-j" jobs "@install"]
|
||||
depends: [
|
||||
"jbuilder" {build & >= "1.0+beta7"}
|
||||
"ocamlfind" {build}
|
||||
"cstruct"
|
||||
"lwt"
|
||||
"logs" "astring" "rresult"
|
||||
"mirage-flow-lwt"
|
||||
"mirage-channel-lwt"
|
||||
"io-page"
|
||||
"irmin-git"
|
||||
"decompress"
|
||||
"capnp"
|
||||
]
|
@ -2,17 +2,17 @@
|
||||
|
||||
(library
|
||||
((name sdk)
|
||||
(libraries (threads cstruct.lwt cmdliner fmt.cli logs.fmt logs.cli fmt.tty
|
||||
decompress irmin irmin-git lwt.unix rawlink tuntap dispatch
|
||||
irmin-watcher inotify astring rresult mirage-flow-lwt
|
||||
mirage-channel-lwt io-page.unix ipaddr capnp))
|
||||
(public_name sdk)
|
||||
(libraries (cstruct.lwt decompress irmin irmin-git lwt.unix rawlink
|
||||
tuntap astring rresult mirage-flow-lwt capnp
|
||||
mirage-channel-lwt io-page.unix ipaddr))
|
||||
))
|
||||
|
||||
;(rule
|
||||
; ((targets (proto.ml proto.mli))
|
||||
; (deps (proto.capnp))
|
||||
; (action (progn
|
||||
; (run capnp compile -o ocaml ${<})
|
||||
; (system "mv proto.ml proto.ml.in")
|
||||
; (system "echo '[@@@ocaml.warning \"-A\"]\n' > proto.ml")
|
||||
; (system "cat proto.ml.in >> proto.ml")))))
|
||||
(rule
|
||||
((targets (proto.ml proto.mli))
|
||||
(deps (proto.capnp))
|
||||
(action (progn
|
||||
(run capnp compile -o ocaml ${<})
|
||||
(system "mv proto.ml proto.ml.in")
|
||||
(system "echo '[@@@ocaml.warning \"-A\"]\n' > proto.ml")
|
||||
(system "cat proto.ml.in >> proto.ml")))))
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,109 +0,0 @@
|
||||
type ro = Capnp.Message.ro
|
||||
type rw = Capnp.Message.rw
|
||||
|
||||
module type S = sig
|
||||
type 'cap message_t
|
||||
|
||||
type reader_t_Request_14112192289179464829
|
||||
type builder_t_Request_14112192289179464829
|
||||
type reader_t_Response_16897334327181152309
|
||||
type builder_t_Response_16897334327181152309
|
||||
|
||||
module Reader : sig
|
||||
type array_t
|
||||
type builder_array_t
|
||||
type pointer_t
|
||||
module Response : sig
|
||||
type t = reader_t_Response_16897334327181152309
|
||||
type builder_t = builder_t_Response_16897334327181152309
|
||||
type unnamed_union_t =
|
||||
| Ok of string
|
||||
| Error of string
|
||||
| Undefined of int
|
||||
val get : t -> unnamed_union_t
|
||||
val id_get : t -> int32
|
||||
val id_get_int_exn : t -> int
|
||||
val of_message : 'cap message_t -> t
|
||||
val of_builder : builder_t -> t
|
||||
end
|
||||
module Request : sig
|
||||
type t = reader_t_Request_14112192289179464829
|
||||
type builder_t = builder_t_Request_14112192289179464829
|
||||
type unnamed_union_t =
|
||||
| Write of string
|
||||
| Read
|
||||
| Delete
|
||||
| Undefined of int
|
||||
val get : t -> unnamed_union_t
|
||||
val id_get : t -> int32
|
||||
val id_get_int_exn : t -> int
|
||||
val has_path : t -> bool
|
||||
val path_get : t -> (ro, string, array_t) Capnp.Array.t
|
||||
val path_get_list : t -> string list
|
||||
val path_get_array : t -> string array
|
||||
val of_message : 'cap message_t -> t
|
||||
val of_builder : builder_t -> t
|
||||
end
|
||||
end
|
||||
|
||||
module Builder : sig
|
||||
type array_t = Reader.builder_array_t
|
||||
type reader_array_t = Reader.array_t
|
||||
type pointer_t
|
||||
module Response : sig
|
||||
type t = builder_t_Response_16897334327181152309
|
||||
type reader_t = reader_t_Response_16897334327181152309
|
||||
type unnamed_union_t =
|
||||
| Ok of string
|
||||
| Error of string
|
||||
| Undefined of int
|
||||
val get : t -> unnamed_union_t
|
||||
val ok_set : t -> string -> unit
|
||||
val error_set : t -> string -> unit
|
||||
val id_get : t -> int32
|
||||
val id_get_int_exn : t -> int
|
||||
val id_set : t -> int32 -> unit
|
||||
val id_set_int_exn : t -> int -> unit
|
||||
val of_message : rw message_t -> t
|
||||
val to_message : t -> rw message_t
|
||||
val to_reader : t -> reader_t
|
||||
val init_root : ?message_size:int -> unit -> t
|
||||
end
|
||||
module Request : sig
|
||||
type t = builder_t_Request_14112192289179464829
|
||||
type reader_t = reader_t_Request_14112192289179464829
|
||||
type unnamed_union_t =
|
||||
| Write of string
|
||||
| Read
|
||||
| Delete
|
||||
| Undefined of int
|
||||
val get : t -> unnamed_union_t
|
||||
val write_set : t -> string -> unit
|
||||
val read_set : t -> unit
|
||||
val delete_set : t -> unit
|
||||
val id_get : t -> int32
|
||||
val id_get_int_exn : t -> int
|
||||
val id_set : t -> int32 -> unit
|
||||
val id_set_int_exn : t -> int -> unit
|
||||
val has_path : t -> bool
|
||||
val path_get : t -> (rw, string, array_t) Capnp.Array.t
|
||||
val path_get_list : t -> string list
|
||||
val path_get_array : t -> string array
|
||||
val path_set : t -> (rw, string, array_t) Capnp.Array.t -> (rw, string, array_t) Capnp.Array.t
|
||||
val path_set_list : t -> string list -> (rw, string, array_t) Capnp.Array.t
|
||||
val path_set_array : t -> string array -> (rw, string, array_t) Capnp.Array.t
|
||||
val path_init : t -> int -> (rw, string, array_t) Capnp.Array.t
|
||||
val of_message : rw message_t -> t
|
||||
val to_message : t -> rw message_t
|
||||
val to_reader : t -> reader_t
|
||||
val init_root : ?message_size:int -> unit -> t
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module Make (MessageWrapper : Capnp.MessageSig.S) :
|
||||
(S with type 'cap message_t = 'cap MessageWrapper.Message.t
|
||||
and type Reader.pointer_t = ro MessageWrapper.Slice.t option
|
||||
and type Builder.pointer_t = rw MessageWrapper.Slice.t
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user