Looks promising: https://github.com/emscripten-core/emscripten/pull/17854

This depends on a small llvm linker change but otherwise seems to work fine!

On Tue, Sep 13, 2022 at 8:12 AM Floh <[email protected]> wrote:

> > How/where are you calling these functions?
>
> Yes, it's all EM_JS in STB-style single-file C libraries (for instance:
> https://github.com/floooh/sokol/blob/4238be9d53f7a817f7ddf1b8d10560142052c6c7/sokol_app.h#L4519-L4528
> )
>
> ...if I would have to distribute a separate .js file with the header it
> would kinda defeat the whole idea of single-file C libraries (and I would
> also need to add Emscripten-specific build instructions).
>
> >... we need to add some kind of dependency mechanism for EM_ASM/EM_JS
> user code
>
> I think this would be the best solution. Maybe it could work similar like
> that new EM_IMPORT macro? (I just found this, don't know what it actually
> does.
>
>
> https://github.com/emscripten-core/emscripten/blob/main/system/include/emscripten/em_macros.h
>
> ...so somewhere in my header I could have a list of all Emscripten library
> functions like this:
>
> EM_JS_DEPS('withStackSave', 'allocateUTF8OnStack', 'UTF8ToString')
>
> Cheers!
> -Floh.
> On Tuesday, 13 September 2022 at 15:34:15 UTC+2 [email protected] wrote:
>
>> On Sat, Sep 10, 2022 at 10:36 AM Floh <[email protected]> wrote:
>>
>>> PS: also I just noticed that allocateUTF8OnStack is on your list of
>>> 'legacy functions', but calling this works just fine in my code. I guess
>>> those are pulled in from some library_*.js that's linked into my code?
>>>
>>> What's the lowest level set of stack helper functions that won't go
>>> away? Is withStackSave(), stackAlloc() and stringToUTF8() guaranteed at
>>> least?
>>>
>>
>> The hope is that we can move away from including any code that is not
>> explicitly needed, and not include any of these functions by default.
>>
>> How/where are you calling these functions?   I assume it is
>> something like EM_JS or EM_ASM, since if you were doing it in a JS library
>> then you could add explicitly dependencies.
>>
>> If you are indeed using EM_ASM/EM_JS and expecting to be able to call
>> library functions then it sounds like we need to add some kind of
>> dependency mechanism for EM_ASM/EM_JS user code.
>>
>> Alternatively we could use some kind of analysis of the EM_JS/EM_ASM
>> strings..  perhaps we could just do a dumb conservative string scanner, or
>> use a JS parser to find any used symbols.
>>
>>
>>> On Saturday, 10 September 2022 at 19:27:10 UTC+2 Floh wrote:
>>>
>>>> I just noticed that I had two remaining calls to ccall() where I used
>>>> the string argument marshalling feature (in all other cases I call
>>>> functions on the C side directly). I have those cases now replaced with
>>>> (essentially) "withStackSave(() => { ... allocateUTF8OnStack() ... }"
>>>>
>>>> Is this "kosher"? (I'm aware of the risk that these functions may go
>>>> away one day).
>>>>
>>>> I don't want to impose specific compiler flags (like LEGACY_RUNTIME) on
>>>> my library users, that's why I had to replace ccall() (unless there's a
>>>> another way to inject ccall into the code than through compiler options?).
>>>>
>>>> It would be nice to have a guaranteed set of these low level C interop
>>>> functions btw (like this withStackSave, allocateUTF8OnStack stuff).
>>>>
>>>> Cheers!
>>>> -Floh.
>>>>
>>>> On Tuesday, 6 September 2022 at 19:35:05 UTC+2 Shlomi Fish wrote:
>>>>
>>>>> On Tue, 6 Sep 2022 09:06:27 -0700
>>>>> "'Sam Clegg' via emscripten-discuss" <[email protected]>
>>>>> wrote:
>>>>>
>>>>> > Starting with 2.1.21, in order to make the default output size
>>>>> smaller some
>>>>> > runtime functions are transitioning to library functions. In debug
>>>>> builds,
>>>>> > if you try to use these functions, you should see an actionable
>>>>> warning.
>>>>> >
>>>>> > From the changelog:
>>>>> >
>>>>>
>>>>> Thanks for the warning, Sam!
>>>>>
>>>>> > - The `LEGACY_RUNTIME` setting is no longer enabled by default. If
>>>>> you use
>>>>> > any
>>>>> > of these legacy runtime functions (except in library code with
>>>>> explicit
>>>>> >
>>>>> > dependencies) then you would need to set `LEGACY_RUNTIME` on the
>>>>> command
>>>>> > line
>>>>> > or add the ones you need to `DEFAULT_LIBRARY_FUNCS_TO_INCLUDE`:
>>>>> >
>>>>> > - addFunction
>>>>> >
>>>>> > - removeFunction
>>>>> >
>>>>> > - allocate
>>>>> >
>>>>> > - AsciiToString
>>>>> >
>>>>> > - stringToAscii
>>>>> >
>>>>> > - UTF16ToString
>>>>> >
>>>>> > - stringToUTF16
>>>>> >
>>>>> > - lengthBytesUTF16
>>>>> >
>>>>> > - UTF32ToString
>>>>> >
>>>>> > - stringToUTF32
>>>>> >
>>>>> > - lengthBytesUTF32
>>>>> >
>>>>> > - allocateUTF8
>>>>> >
>>>>> > - allocateUTF8OnStack
>>>>> >
>>>>> > - writeStringToMemory
>>>>> >
>>>>> > - writeArrayToMemory
>>>>> >
>>>>> > - writeAsciiToMemory
>>>>> >
>>>>> > - intArrayFromString
>>>>> >
>>>>> > - intArrayToString
>>>>> >
>>>>> > - warnOnce
>>>>> >
>>>>> > - ccall
>>>>> >
>>>>> > - cwrap
>>>>> >
>>>>> > Although this is technically a breaking change for those who use
>>>>> these
>>>>> >
>>>>> > functions, there are assertions in debug builds that catch such
>>>>> usages
>>>>> > and
>>>>> > direct towards how to fix the issue.
>>>>> >
>>>>> > I hope this change is not too disruptive and overall a move in the
>>>>> right
>>>>> > direction.
>>>>> >
>>>>> > cheers,
>>>>> > sam
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Shlomi Fish https://www.shlomifish.org/
>>>>> Chuck Norris/etc. Facts -
>>>>> https://www.shlomifish.org/humour/bits/facts/
>>>>>
>>>>> If Botticelli were alive today, he’d be working for Vogue.
>>>>> — https://en.wikiquote.org/wiki/Peter_Ustinov
>>>>>
>>>>> Please reply to list if it's a mailing list post -
>>>>> https://shlom.in/reply .
>>>>>
>>>> --
>>> 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/39749284-d7df-4e03-aea7-83362d5ef36cn%40googlegroups.com
>>> <https://groups.google.com/d/msgid/emscripten-discuss/39749284-d7df-4e03-aea7-83362d5ef36cn%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/d825b52e-71bd-497e-acad-06e4d3aabd70n%40googlegroups.com
> <https://groups.google.com/d/msgid/emscripten-discuss/d825b52e-71bd-497e-acad-06e4d3aabd70n%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/CAL_va2-cWqaLVPWLa2i1Ye11%2Be431GrwMPfsWV5P95vf7LR9Wg%40mail.gmail.com.

Reply via email to