Filled this bug: https://github.com/emscripten-core/emscripten/issues/16123
чт, 27 янв. 2022 г. в 02:42, 'Ingvar Stepanyan' via emscripten-discuss < [email protected]>: > I think it should be `extern *"C"* int32_t rv_api_1;` on the C++ side, > otherwise normal mangling rules apply and it's looking up (or, this case, > declaring) a namespaced variable. > > On Wednesday, 26 January 2022 at 19:31:18 UTC [email protected] wrote: > >> Is it valid to simply do `extern int32_t rv_api_1;` in C to refer to a >> rust variable? Does that address of `rv_api_1` on the C side look correct? >> >> Does `pub static rv_api_1: i32 = 1;` in rust generate a static >> initializer function or is it simply static memory (like it would be in >> C/C++)? >> >> Assuming it is generating a ctor then there are a couple of things that >> could be going on. Are you sure your static ctors have been run? i.e. >> where is your code running? Is it inside of main? Disassembling your >> final binary should show all static ctors being called from the >> `__wasm_call_ctors` function. >> >> cheers, >> sam >> >> >> On Wed, Jan 26, 2022 at 10:24 AM Александр Гурьянов <[email protected]> >> wrote: >> >>> Okay, I think I almost did the same in Rust what Alon described. >>> vanger-rs now compiles as static library (.a) with emscripten triple. I use >>> this static library to link with original C++ game. So I have *.o files >>> from vangers, and librusty_vangers.a (which provides rendering on wgpu). I >>> link them with emcc, and it produce wasm without any error! >>> >>> Also I do the same with native build - it works fine. >>> >>> However, when I tries to run it fails with assertion. >>> >>> On RUST side I have the following code: >>> #[no_mangle] >>> pub static rv_api_1: i32 = 1; >>> >>> On C++ side I have the following code: >>> extern int32_t rv_api_1; >>> // ... >>> if(rv_api_1 != 1){ >>> printf("Invalid libvangers_ffi version expected 1, actual %d\n", >>> rv_api_1); >>> // abort(); >>> } >>> >>> When I run it, I have following output: >>> Invalid libvangers_ffi version expected 1, actual 0 >>> >>> For me it looks like static initializer from RUST didn't run. Because if >>> I comment the abort(); seems integration works fine. Native build works >>> correctly... >>> Do you have any idea why so? >>> >>> ср, 19 янв. 2022 г. в 00:36, Alon Zakai <[email protected]>: >>> >>>> >>>> >>>> On Fri, Jan 14, 2022 at 11:08 AM Александр Гурьянов <[email protected]> >>>> wrote: >>>> >>>>> Let's look closer to my case. I ported C++ game Vangers to the web ( >>>>> https://www.gamepix.com/play/vangers). Vangers community did big work >>>>> to integrate vange-rs (rust 3d render, based on wgpu) and Vangers game. It >>>>> works as follow: >>>>> 1. Vange-rs provide c ffi interface >>>>> 2. Vange-rs compiled with rust to static library >>>>> 3. Vangers linked with Vanger-rs to executable >>>>> >>>>> Now I want to port vangers + (vange-rs render) to the web. wgpu >>>>> didn't support wasm32-unknown-emscripten, I added experimental support for >>>>> emscripten and it works. BUT, wgpu is developing to fast, so my changes >>>>> become outdated very fast :) >>>>> >>>>> When I implement support for emscripten, I only disabling >>>>> wasm32-unknown rules and uses native code paths everywhere. So, it's >>>>> little >>>>> bit strange, to work with emscripten you need to disable workarounds for >>>>> wasm32. emscripten emulates native platform, so code that correctly uses >>>>> posix system should work also in emscripten. >>>>> >>>>> Maybe there is any way to just use native static library and link it >>>>> with emscripten? Like this: >>>>> 1. Compile vange-rs static library (with native triple) >>>>> 2. Compile vangers project with emscripten >>>>> 3. Link 1+2 with emscripten >>>>> >>>>> >>>> (1) would compile to x86, though, I think? We have to have wasm to link >>>> with emscripten. >>>> >>>> >>>>> for (1.) I can't use emscripten triple because of #[cfg] rules for >>>>> wasm32 target, they select wrong code path (non-native). >>>>> >>>>> >>>> Hmm, I don't know enough rust to know what fixing that would mean... >>>> >>>> Overall for an emscripten port I think we would want to use a native >>>> build as much as possible? That is, ideally you would *not* use >>>> vange-rs/WebGPU, but one of the native rendering paths (OpenGL of some >>>> flavor? Or perhaps they have Dawn/WebGPU support?). And you would need to >>>> tell rust to use the emscripten triple while doing so. >>>> >>>> That should work, in theory. If it doesn't and Rust has some issues >>>> with how it invokes emcc to link, then the workaround could be what I >>>> mentioned for Zig and C before: get Rust to link to a static library, and >>>> then run emcc manually on that. >>>> >>>> (Alternatively, in theory someone could look into supporting >>>> wasm-bindgen + emscripten.) >>>> >>>> - Alon >>>> >>>> >>>>> пт, 14 янв. 2022 г. в 07:54, Alon Zakai <[email protected]>: >>>>> >>>>>> Thanks, good to know at least 2 people would read a post about this >>>>>> :) I'll try to find time for it. >>>>>> >>>>>> About Rust, I haven't had time to look into it yet. My general hope >>>>>> is that the same model as for C and Zig could work: >>>>>> >>>>>> 1. Tell Rust to use the emscripten wasm triple. >>>>>> 2. Tell Rust to compile to object files (or a static library, >>>>>> basically), and *not* to link them. >>>>>> 3. The user runs emcc on those object files, linking them. >>>>>> >>>>>> The nice thing in this model is that C/Zig/Rust does not need to be >>>>>> aware of emcc at all here (aside from telling LLVM to use the emscripten >>>>>> triple). And it's easy to do this, at least in C and Zig (although there >>>>>> are some subtle ABI questions). >>>>>> >>>>>> This is actually the main thing I wanted to do before writing the >>>>>> post - ideally I'd have a Rust demo alongside C and Zig - so if someone >>>>>> figures that out, let me know! >>>>>> >>>>>> - Alon >>>>>> >>>>>> >>>>>> On Thu, Jan 13, 2022 at 2:06 AM Александр Гурьянов <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> +1 for blog post. Not clear how I can use it with rust, e.g. can I >>>>>>> compile static lib with target --wasm32-unknown-unknown and then link >>>>>>> using >>>>>>> emscripten? The main problem with RUST is that it even can't compile >>>>>>> with >>>>>>> --wasm32-unknown-emscipten (because of lib dependencies that not support >>>>>>> emscripten) >>>>>>> >>>>>>> чт, 13 янв. 2022 г. в 16:46, Floh <[email protected]>: >>>>>>> >>>>>>>> That's a very useful gist, Alon! I think that blog post would be >>>>>>>> much appreciated by a lot of people who like to tinker with other >>>>>>>> languages >>>>>>>> :) >>>>>>>> >>>>>>>> On Wednesday, 12 January 2022 at 19:32:04 UTC+1 [email protected] >>>>>>>> wrote: >>>>>>>> >>>>>>>>> On Sat, Dec 25, 2021 at 6:02 AM Floh <[email protected]> wrote: >>>>>>>>> >>>>>>>>>> Ah, language and toolchain interoperability, one of my favourite >>>>>>>>>> topics ;) >>>>>>>>>> >>>>>>>>>> Zig has nearly the same problems as Rust: it allows to compile to >>>>>>>>>> WASM, it has both a WASI and Emscripten target, with the WASI target >>>>>>>>>> working out of the box, but I gave up on the Emscripten target >>>>>>>>>> because I >>>>>>>>>> just couldn't get it to work. >>>>>>>>>> >>>>>>>>> >>>>>>>>> I wrote up a demo of Zig + Emscripten here: >>>>>>>>> >>>>>>>>> https://gist.github.com/kripken/58c0e640227fe5bac9e7b30100a2a1d3 >>>>>>>>> >>>>>>>>> That uses GLES3 and Asyncify from Emscripten, so it's a small >>>>>>>>> program but it uses interesting features. >>>>>>>>> >>>>>>>>> The gist also shows using C in the same way, where Emscripten is >>>>>>>>> just the linker, not the frontend. >>>>>>>>> >>>>>>>>> I've been meaning to do the same with Rust and write a blogpost >>>>>>>>> about all 3 but haven't found the time... >>>>>>>>> >>>>>>>>> - Alon >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> IMHO it would be great if the Javascript shims and interop could >>>>>>>>>> be somehow split out of the Emscripten SDK into a separate, smaller >>>>>>>>>> "webapi-wasm-tools" SDK which could be better integrated with other >>>>>>>>>> language toolchains. The goal should be that other programming >>>>>>>>>> languages >>>>>>>>>> can benefit from the work that went into the Emscripten SDK to >>>>>>>>>> access web >>>>>>>>>> APIs like WebGL, WebGPU, WebAudio etc... up to "EM_JS()" >>>>>>>>>> functionality, >>>>>>>>>> instead of having to duplicate this work, or requiring a separate >>>>>>>>>> installation of the whole Emscripten SDK. >>>>>>>>>> >>>>>>>>>> There's a very promising project >>>>>>>>>> https://github.com/schellingb/wajic by Bernhard Schelling which >>>>>>>>>> has the same goals and which was used to port Mattias Gustavsson's >>>>>>>>>> DOS-like >>>>>>>>>> library to the web: https://mattiasgustavsson.com/wasm/ >>>>>>>>>> >>>>>>>>>> Anyway... just my 2 cents :) >>>>>>>>>> -Floh. >>>>>>>>>> On Friday, 24 December 2021 at 15:16:23 UTC+1 caiiiycuk wrote: >>>>>>>>>> >>>>>>>>>>> Hi! Just want to share my experiment with using Rust and >>>>>>>>>>> WebAssembly. I tried to port Vange-rs project (rust + wgpu) to >>>>>>>>>>> browser. I >>>>>>>>>>> used emscripten and unknown platforms. Both finally works, but have >>>>>>>>>>> lot of >>>>>>>>>>> obstacles. I am very sad about support level of emscripten in Rust, >>>>>>>>>>> hope it >>>>>>>>>>> will change at some day. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> https://caiiiycuk.medium.com/vange-rs-webassembly-in-rust-498e2f960a04 >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>>> Groups "emscripten-discuss" group. >>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>>> send an email to [email protected]. >>>>>>>>>> >>>>>>>>> To view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/99cc45ea-2307-4551-94b8-ecff9ad965a0n%40googlegroups.com >>>>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/99cc45ea-2307-4551-94b8-ecff9ad965a0n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "emscripten-discuss" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to [email protected]. >>>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/9e88b4b5-f110-4d90-a630-1c282a1febffn%40googlegroups.com >>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/9e88b4b5-f110-4d90-a630-1c282a1febffn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "emscripten-discuss" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVFgNcSPR-KFe35yg%2BU9NXFpG7U_Y5G0APbkZRf5UM2%2B8w%40mail.gmail.com >>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVFgNcSPR-KFe35yg%2BU9NXFpG7U_Y5G0APbkZRf5UM2%2B8w%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "emscripten-discuss" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpRH1%2BxWEaTbjTvnk5kE5W4XwUjHefP8g1psk-pUvxVAtg%40mail.gmail.com >>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpRH1%2BxWEaTbjTvnk5kE5W4XwUjHefP8g1psk-pUvxVAtg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "emscripten-discuss" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVEBtYrS_8fFYz9fmWoQNUwWqjXah%2B9f0cdZ4Jjd2%2BxVGQ%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVEBtYrS_8fFYz9fmWoQNUwWqjXah%2B9f0cdZ4Jjd2%2BxVGQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "emscripten-discuss" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpTmf%3DjhApcxA%3DoW6G_eOTDLLwyPyJbduWQnJqWBQj8EqA%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpTmf%3DjhApcxA%3DoW6G_eOTDLLwyPyJbduWQnJqWBQj8EqA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVEOxJmiieN552iJW2M7SQK9kOoQTu8--iVNQFmB8rCz_w%40mail.gmail.com >>> <https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVEOxJmiieN552iJW2M7SQK9kOoQTu8--iVNQFmB8rCz_w%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/3b1ec71f-be17-4c3e-b74a-69a7ba867e42n%40googlegroups.com > <https://groups.google.com/d/msgid/emscripten-discuss/3b1ec71f-be17-4c3e-b74a-69a7ba867e42n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVGN0%2Bd%3DN-%2BRHs%3Dj-Hc3c-cu%3D4VRNTsY4zGiR6q2p4xBGQ%40mail.gmail.com.
