[opam-devel] [MirageOS-devel] Cross-compiling OCaml, Mirage OS for rumprun, OPAM integration
Nicolas Ojeda Bar
no263 at dpmms.cam.ac.uk
Tue May 19 17:01:06 BST 2015
Just to add my 2 cents,
I am currently hacking away at a RISC-V cross-compiler and so have
been looking into the cross-compilation support quite a bit.
I found that a recent commit to the 4.02 branch to be quite promising, see
https://github.com/ocaml/ocaml/commit/f1f28e10ae4f7b76e7b92a2e72ce1fb8a33d86a9
You can try this out by doing
opam switch 4.02.0+trunk
A couple of things that you need in order to use the cross-compilation support:
- You need the host ocaml system to be the same version as the version
of the cross-compiler (in this case, 4.02)
- You need an ANSI C cross-compiler named <target>-gcc.
- It is not possible to cross-compile between different word sizes
(this is related to the use of Nativeint in the compiler and quite
orthogonal to the build system issues).
With this switch, I was eventually able to cross-compile the
native-code compiler (and runtime system) to RISC-V. Unfortunately I
cannot yet test anything because I still need to port some assembly
bits to plug in the runtime system into the generated programs, but
the assembly generated looks promising.
Best wishes,
Nicolas
On Tue, May 19, 2015 at 4:22 PM, Thomas Gazagnaire
<thomas at gazagnaire.org> wrote:
>> And, as I just found out now, it's not just the native packages, it's *all*
>> packages that need to be rebuilt. So, for Mirage I'd have to produce
>> -rumprun variants of all its dependent packages, right? This would include
>> teaching the "mirage configure" script about them.
>
> We already partly do that to cross-compile the C stubs for Xen (such as gmp for the TLS stack to work on Xen). The upcoming 2.5.0 release of mirage will have improved support for this. See gmp-xen[1] and some ugly ocamlfind hackery to pass the right options at link time, used by mirage configure[2] when generating the Makefile.
>
> Clearly the situation will not scale well as we will have to patch every package using C stubs. I'm looking forward to have full support cross-compilation in the whole toolchain (to start with the build tools).
>
> --
> Thomas
>
> [1]: https://github.com/ocaml/opam-repository/tree/master/packages/gmp-xen/gmp-xen.6.0.0
> [2]: https://github.com/ocaml/opam-repository/blob/master/packages/zarith/zarith.1.3/files/xen_linkopts.patch
> [3]: https://github.com/mirage/mirage/blob/master/lib/mirage.ml#L2248
>
>>
>> This begs the question, why did you use the approach of building the
>> cross-compiler as a normal OPAM package, rather than as a compiler package?
>>
>> If I understand correctly how "OPAM switch" works, then the latter option
>> would at least get rid of the need to deal with the -android (or -rumprun)
>> renaming of packages since each compiler has its own set of packages.
>>
>> Obviously, there'd still have to be some way of getting
>> the OCAMLFIND_TOOLCHAIN and/or other cross-compilation patches into the
>> system but at first glance it seems like it would be more flexible than
>> adding suffixes to package names.
>>
>> Thoughts?
>>
>> Martin
>>
>> _______________________________________________
>> MirageOS-devel mailing list
>> MirageOS-devel at lists.xenproject.org
>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
>
> _______________________________________________
> opam-devel mailing list
> opam-devel at lists.ocaml.org
> http://lists.ocaml.org/listinfo/opam-devel
More information about the opam-devel
mailing list