Ah sorry, I see you tried and said it doesn't work even with `extern "C"` in the issue description. That's odd, it definitely should.
On Thu, 27 Jan 2022 at 11:11, Ingvar Stepanyan <[email protected]> wrote: > But it's not a bug. As I said, you just need to add "C" to your `extern`, > because right now you're exposing it from Rust via C FFI, but declaring it > as a C++ symbol on the other side. > > On Thu, 27 Jan 2022 at 02:32, Александр Гурьянов <[email protected]> > wrote: > >> 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 >> <https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVGN0%2Bd%3DN-%2BRHs%3Dj-Hc3c-cu%3D4VRNTsY4zGiR6q2p4xBGQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Regards, > Ingvar. > -- Regards, Ingvar. -- 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/CADdUJT8Da4wG0XYfvy20fJs7VECP8dvHvWLJcc5sGxrJ3Qfc9A%40mail.gmail.com.
