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.

-- 
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/CADdUJT8qNOaBN2eS9i6grK%2BgNP9dp3pye_H7NRy2bVAaqxRGwQ%40mail.gmail.com.

Reply via email to