With the rise of Arm and RISC-V, it would be nice to see the OCaml community contributing to an upstream OE/YP layer.
With the rise of Arm and RISC-V, it would be nice to see the OCaml community contributing to an upstream OE/YP layer.
As part of that work, a few things are going on:
- use "dune workspaces" (essentially a cross compilation context) to build all C bindings in OCaml packages with custom CFLAGS/LDFLAGS. Ongoing work here: https://github.com/mirage/mirage/pull/1153
- upstream in OCaml, the core developers have specced out the design for integrating cross-compilation more naturally into the compiler.
- OCaml 4.11.0 has just been released with a native code RISC-V backend (and of course has had ARM for years).
Mirage doesn't really use OpenEmbedded or Yocto, but I expect it should be straightforward to embed the workflow in there once it's stable upstream in Mirage itself. Any pointers to something I should read about how to get involved in Yocto?
This could be generalized to create an upstream OE layer that uses the upcoming cross-compiling improvements from upstream Ocaml, which would then enable MirageOS unikernels in OE meta-virtualization, https://layers.openembedded.org/layerindex/branch/master/lay.... RISC-V support is in early stages for meta-virt, Western Digital added some support.
Intro to meta-virt: https://youtube.com/watch?feature=emb_title&v=fIbWvrlWJYg
Intro to Yocto: https://elinux.org/images/a/a8/Getting_Started_with_Embedded...
Meta-virt mailing list would be a good place for discussion, https://lists.yoctoproject.org/g/meta-virtualization
Though we are going this way slowly but steadily. Afaik some people are working on build system, so I hope soon we'll have a GCC/Rust-like experience.
Basically from yocto have a "rootfs" which is your standard image + gcc, use it to build a docker container or chroot in it, add qemu-arm-static, build the OCaml compiler from opam and then use it to build binaries. Not the most straightforward, but it works... fine. And in the end it's just a docker image like any other that is used to build our binaries.
With that said this has been running for a few years, I didn't check if upstream OCaml cross-compiling made progress since then.