-
Notifications
You must be signed in to change notification settings - Fork 13.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate wasm target to LLVM wasm backend #38804
Comments
re: storing wasm in rlibs and hacking emcc to make it link those, this would neatly be solved by MIR-only rlibs. That makes wasm the second backend that could use this (cc #38787) so I'm starting to think we should have an issue or something to collect these use cases. cc @michaelwoerister |
What Is this up to? How does the update to LLVM 4.0 change things? |
@Eh2406 Still no progress. The LLVM 4.0 upgrade only inches us closer, but it still doesn't have a production ready backend. Since the backend does exist (I think) in the LLVM we're on, we can start enabling it for testing purposes. |
I am currently working on using the LLVM backend behind a new target triple. The current wasm target is wasm32-unknown-emscripten, so for the new one I thought I would use wasm32-unknown-unknown. This will let us start using the LLVM backend in testing, but I was wondering what the plan is beyond that. Are we trying to remove the emscripten wasm target completely? If so, do we want to keep the asm.js target? Getting rid of both emscripten targets removes our dependency on FastComp, but if someone needs the asm.js target then this clearly isn't a possibility. |
@tlively I'd prefer to both retain the asm.js target and drop fastcomp, which I know is pretty hard; the reason being that I fear that production users will want a JS fallback for browsers missing WASM support. To achieve this ultimately I'd expect to drop fastcomp and employ a wasm->asm.js translator. That said, wasm support is rolling out fast, so this concern may end up being unfounded. I'd suggest the path forward should look roughly like
|
This plan sounds reasonable to me. I don't know of work on a wasm -> asm.js translator, but that sounds like a tool that could be reasonably expected to exist as wasm picks up steam. |
There is some work on a wasm -> asm.js translator, named There is also the possibility to write a wasm-interpreter in JavaScript (probably in asm.js). This seems to be supported by
Who is working on that? How could one help? Is there an IRC channel just about the Rust-wasm story? |
I am! I'm not sure how the work could be parallelized, though. There's no IRC channel or other dedicated communication that I know of, but a PR with some related discussion is #42571. |
Maybe it's time to start the #rust-wasm IRC channel? |
Enable wasm LLVM backend Enables compilation to WebAssembly with the LLVM backend using the target triple "wasm32-unknown-unknown". This is the beginning of my work on #38804. **edit:** The new new target is now wasm32-experimental-emscripten instead of wasm32-unknown-unknown.
Are there I'd like to try putting together something that generates HTML serverside and also generates clientside wasm to serve along with that, from a single source file. My idea was to use a combination of Cargo I'm not a
Any thoughts / instructions would be appreciated. |
@WillemMali if you want to compile to wasm right now, the best way to do that is with the wasm32-unknown-emscripten target. this is a good guide on how to do that. wasm32-experimental-emscripten is truly experimental right now. Among other things, using it currently requires you to build rustc yourself locally, and there is no rustup support for it. However, I have gotten a few questions about using it, so I will write up some documentation and link to it here. |
I'm going to close this in favor of #44006 |
At some point we must move rustc off the LLVM fastcomp backend. Maintaining it in sync with emcc is exceedingly burdensome. The only viable solution I see any time soon is to use the nascent LLVM wasm backend, which is not yet generally usable. I expect that we will switch to that backend, emitting wasm into rlibs instead of LLLVM IR, then link multiple wasm modules together via emcc. We may need to hack on emcc a bit to teach it to link wasm modules directly, not sure.
Even though the LLVM wasm backend is not fully working yet, somebody could go ahead and start doing the conversion and seeing what the results are like.
cc LLVM upgrade #37609
The text was updated successfully, but these errors were encountered: