[m-rev.] [m-dev.] Mercury, Emscripten, and WebAssembly

Julien Fischer jfischer at opturion.com
Mon Mar 16 21:16:26 AEDT 2020

Just realised the replies here weren't going through to the list.


On Sun, 15 Mar 2020, Patrick Henning wrote:

> Ok thats great to hear! I applied the patch and compilation succeeded, which is very encouraging. Unfortunately, there is an issue at run time, within the function “MR_init_conservative_GC”
> something relating to the Boehm GC has the following error: "GC_is_visible test failed”. I’m not sure whether this is a problem with Boehm GC, supposedly it is working fine with WASM (according
> to comments on this closed issue: https://github.com/ivmai/bdwgc/issues/163), but I think I will open a new issue on their Github to see if anyone has input on that.
> Regarding your question about integer size, for WASM, according to the spec integers are 32 bit (via https://webassembly.org/docs/c-and-c++/#platform-features). I believe that the configuration
> step for Mercury is picking up on this correctly; during config I get the following relevant message: "checking whether int is 32-bit… yes”. This being the case, perhaps it is odd that symbols
> relating to 64 bit integers are involved in compilation.
> Patrick
> On Mar 15, 2020, 6:01 AM -0700, Julien Fischer <jfischer at opturion.com>, wrote:
>       Hi Patrick,
>       The patch is now in rotd-2020-03-15 and also in the latest 20.01.2 beta.
>       Cheers,
>       Julien.
>       On Sat, 14 Mar 2020, Patrick Henning wrote:
>             I see, I’ll try applying that patch then. Will it eventually land in a future release?
>             On Mar 14, 2020, 7:55 PM -0700, Julien Fischer <jfischer at opturion.com>, wrote:
>             Hi Patrick,
>             On Sat, 14 Mar 2020, Patrick Henning wrote:
>             Hello again, I’ve made some progress with this but am still
>             struggling. I was able to successfully carry out the “make" step with
>             grade hlc.gc without errors occurring, but have not been able to run
>             ‘make install’ successfully. For now I am attempting to make do with
>             the results of the “make” step. 
>             Currently I am stuck on a linking error: when attempting to do the
>             final step of linking a simple mercury program object file with `emcc
>             -o hello.js hello_init.o hello.o
>             /mercury-srcdist-20.01.1/library/libmer_std.a
>             /mercury-srcdist-20.01.1/runtime/libmer_rt.a
>             /mercury-srcdist-20.01.1/boehm_gc/libgc.a`, I get two errors about
>             symbols “MR_box_int64” and “MR_box_uint64” being undefined. 
>             These two symbols are defined in mercury.h, so I would expect them to
>             be present in libmer_rt.a, but examining it with llvm-nm seems to
>             indicate that they are not defined there or in fact in any of the
>             other library files. Can anyone help point me in the direction of what
>             I am missing? Does libmer_rt need to be built in a specific way to
>             ensure that  “MR_box_int64” and “MR_box_uint64” are included? 
>             No, I think there is some code missing from the runtime. The attached
>             (untested) patch to runtime/mercury.c should address it.
>             Julien.

More information about the reviews mailing list