Thread overview
All symbols exported on wasm target
Nov 03, 2018
Sebastiaan Koppe
Nov 03, 2018
Johan Engelen
Nov 03, 2018
Sebastiaan Koppe
Nov 04, 2018
Sebastiaan Koppe
Nov 04, 2018
kinke
Nov 05, 2018
Sebastiaan Koppe
November 03, 2018
I am doing a lot of wasm [1] compilation with ldc lately, and I have noticed that all symbols get exported regardless of what I try. E.g. strip-all wont strip any, etc.

When I strip things manually I can sometimes get something from 90kb to 9kb, so it really is substantial.

According to [2], on clang you can workaround this, by adding __attribute__((visibility("default"))) to each function you want exported.

Any similar solution for ldc?

[1] https://github.com/skoppe/spasm
[2] https://aransentin.github.io/cwasm/
November 03, 2018
On Saturday, 3 November 2018 at 11:12:42 UTC, Sebastiaan Koppe wrote:
> I am doing a lot of wasm [1] compilation with ldc lately, and I have noticed that all symbols get exported regardless of what I try. E.g. strip-all wont strip any, etc.

You could testdrive this PR: https://github.com/ldc-developers/ldc/pull/2894

-Johan

November 03, 2018
On Saturday, 3 November 2018 at 12:45:25 UTC, Johan Engelen wrote:
> On Saturday, 3 November 2018 at 11:12:42 UTC, Sebastiaan Koppe wrote:
>> I am doing a lot of wasm [1] compilation with ldc lately, and I have noticed that all symbols get exported regardless of what I try. E.g. strip-all wont strip any, etc.
>
> You could testdrive this PR: https://github.com/ldc-developers/ldc/pull/2894
>
> -Johan

That is nice. Will try tonight.
November 04, 2018
On Saturday, 3 November 2018 at 12:45:25 UTC, Johan Engelen wrote:
> On Saturday, 3 November 2018 at 11:12:42 UTC, Sebastiaan Koppe wrote:
>> I am doing a lot of wasm [1] compilation with ldc lately, and I have noticed that all symbols get exported regardless of what I try. E.g. strip-all wont strip any, etc.
>
> You could testdrive this PR: https://github.com/ldc-developers/ldc/pull/2894
>
> -Johan

The pull request works wonders! I just add 'export' where I need it, and voila!

I did notice some other garbage though... (compared to ldc1.12.0)

It might be completely unrelated to the pull request, but I noticed extra *__initZ wasm globals being generated (at least 50 extra I never saw with 1.12), as well as _d_arraybounds, some toHash's and opEquals, and more static data in the data section (probably related to the __init's).

Need to check without the pull request...
November 04, 2018
On Sunday, 4 November 2018 at 21:22:07 UTC, Sebastiaan Koppe wrote:
> It might be completely unrelated to the pull request, but I noticed extra *__initZ wasm globals being generated (at least 50 extra I never saw with 1.12), as well as _d_arraybounds, some toHash's and opEquals, and more static data in the data section (probably related to the __init's).

Are you sure you didn't just forget -betterC?
November 05, 2018
On Sunday, 4 November 2018 at 21:40:13 UTC, kinke wrote:
> Are you sure you didn't just forget -betterC?

I didn't, but dub did.

With dub 1.11.0, the betterC dflags I set in a dependency project got propagated to the root package.

With dub 1.12.0, that is no longer the case, and I have to set the betterC flag on both projects.

I went through the dub commits but couldn't find anything...