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.

Reply via email to