Skip to content

[sdk] Add wasm interpreter support.#5924

Merged
kumpera merged 9 commits into
mono:masterfrom
kumpera:wasm-sdk-integration
Nov 7, 2017
Merged

[sdk] Add wasm interpreter support.#5924
kumpera merged 9 commits into
mono:masterfrom
kumpera:wasm-sdk-integration

Conversation

@kumpera

@kumpera kumpera commented Nov 1, 2017

Copy link
Copy Markdown
Contributor

This adds all bits to get the mini test suite to run under the interpreter

Comment thread sdks/builds/setup-emsdk.sh Outdated
@@ -0,0 +1,14 @@

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why use a separate sh file?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The script was a lot more convoluted before. I'll merge.

Comment thread sdks/builds/wasm.mk Outdated

#toolchain code
.stamp-wasm-toolchain:
@./setup-emsdk.sh $(TOP)/sdks/builds/toolchains/emsdk

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please do not use @, we don't use it anywhere else

Comment thread sdks/builds/wasm.mk
--host=i386-apple-darwin10

#toolchain code
.stamp-wasm-toolchain:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we have a wasm while all other targets are wasm-interp?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cuz the other wasm targets require their own toolchains.

Comment thread sdks/builds/wasm.mk
.PHONY: clean-wasm-interp clean-wasm
clean-wasm::
rm -rf .stamp-wasm-toolchain
clean-wasm-interp:: clean-wasm

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please unify both wasm-interp and wasm targets as there is no apparent reason to have wasm

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a reason for this.
There are 4 more runtime configs coming down the line: mini aot/runtime, llvm aot/runtime.

This is the only one ready for merging and I feel like keeping the bits for the others made sense.

@kumpera

kumpera commented Nov 2, 2017

Copy link
Copy Markdown
Contributor Author

@luhenry I updated this PR with the rest of the required work to bring the interpreter in.

@kumpera

kumpera commented Nov 2, 2017

Copy link
Copy Markdown
Contributor Author

Here's a sample run from the wasm dir: https://gist.github.com/11180dc8613200c0d22a0ba4571ba674

Comment thread sdks/wasm/test.js Outdated
Module.setValue (args_mem + i * 4, args [i], "i32");
Module.setValue (eh_throw, 0, "i32");

var res = invoke_method (send_message, this_arg, args_mem, eh_throw);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

send_message should be method (it's only working as send_message because that's the only method that gets used in this test file)

Comment thread sdks/wasm/test.js Outdated
if (Module.getValue (eh_throw, "i32") != 0) {
Module.Runtime.stackRestore(stack);
var msg = conv_string (res);
throw new SharpException (msg); //the convention is that invoke_method ToString () any outgoing exception

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's much better if this is just throw new Error(msg) instead of using SharpException, because SharpException causes the error not to appear correctly in the browser debug console.

There might be some way of having a custom Error subclass that appears properly in the console, but I'm not certain what it is.

Comment thread sdks/wasm/library_mono.js Outdated

request_gc_cycle: function () {
++MONO.pump_count;
if (Module.ENVIRONMENT_IS_WEB) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is correct. In mono.js, ENVIRONMENT_IS_WEB is a local variable, and is not exposed as a property of Module, so this check always evaluates as false and GC never runs. I think you need something like the following instead:

if (Module['ENVIRONMENT'] === 'WEB' || Module['ENVIRONMENT'] === 'WORKER')

... which not only fixes the WEB case but also allows GC in the WORKER case.

luhenry
luhenry previously approved these changes Nov 6, 2017
@kumpera

kumpera commented Nov 7, 2017

Copy link
Copy Markdown
Contributor Author

Addressed @SteveSandersonMS issues.

@lewurm lewurm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amazing stuff 👍

@kumpera kumpera merged commit a62a7e7 into mono:master Nov 7, 2017
@juepiezhongren

juepiezhongren commented Nov 10, 2017

Copy link
Copy Markdown

So, is xamarin.wasm getting close?

@kumpera

kumpera commented Nov 10, 2017

Copy link
Copy Markdown
Contributor Author

@juepiezhongren yes, you can try it today if you adventure yourself on building it from source.

@Mike-E-angelo

Copy link
Copy Markdown

Wow excellent work here @kumpera. Thank you for your time and your contributions!

@juepiezhongren

Copy link
Copy Markdown

@mike-eee have u seen the perspective future that x.forms is to fulfill your ubUI?

@Mike-E-angelo

Copy link
Copy Markdown

Not yet, @juepiezhongren ... not officially at least. From what I understand, the future is somewhere between Xamarin.Forms, Noesis, and Avalonia. Once mono supports (or rather releases support for :)) WebAssembly, each one of these models will be able to run everywhere. I myself am partial to Noesis/Avalonia models, but there is a market for a XF-type model, too. So everyone is (or will be) covered. 😄

@juepiezhongren

Copy link
Copy Markdown

Ava is still at baby stage, what is Noesis, please give a url, por favor@Mike-EEE

@Mike-E-angelo

Copy link
Copy Markdown

They are a commercial solution but hold true to WPF. :)

http://www.noesisengine.com/

@juepiezhongren

juepiezhongren commented Nov 21, 2017

Copy link
Copy Markdown

@mike-eee What i prefer most is the architecture for xf, with native binding like x.ios, x.android.... and with Ub solution. So, i hope competitor like ava and noesis could reuse this architecture, to take advantage of native bindings.

Ub is always not covering everything, things like react native is only to make things more and more complicated and is never to be rootly solved.

@juepiezhongren

Copy link
Copy Markdown

@mike-eee noesis's web page is cool

@Mike-E-angelo

Copy link
Copy Markdown

Like I said @juepiezhongren everyone should be covered, one way or another. You can tell this space is gaining momentum again and there are a lot of creative minds that are starting to explore and contribute. Far cry from a year or so ago, huh! 😆

picenka21 pushed a commit to picenka21/runtime that referenced this pull request Feb 18, 2022
[sdk] Add wasm interpreter support.

Commit migrated from mono/mono@a62a7e7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants