Not really helping with the closure compiler but using uglify.js
always helped me to squeeze the size a bit more. Have you tried it?
When going for size I used these flags `-Oz --llvm-lto 1` and then
uglify.js this was usually the best result.

Vilibald


On Wed, Jun 24, 2015 at 8:27 PM, Alan deLespinasse
<[email protected]> wrote:
> I'm trying to compile a fairly straightforward C library into JavaScript so
> I can use it in Web applications. I've got it working, but I think it's
> larger than it should be.
>
> The library is basically math functions. I just want to call them and get
> their results. They don't do I/O or anything.
>
> As an example, I'll use the int_sqrt function example from the
> documentation:
>
>
> int int_sqrt(int x) {
>   return sqrt(x);
> }
>
>
> Compiling this with -O3 results in an a.out.js file of 143k bytes. I had
> thought that -O3 would automatically run the Closure Compiler to do some
> minification (vaguely implied by the statement that --closure 0 is the
> "default in -O2 and below"), but this doesn't seem to be the case.
>
> After a bit more research, I settled on this command line:
>
> emcc -O3 hello_function.cpp --closure 1 -s
> EXPORTED_FUNCTIONS="['_int_sqrt']" -s MODULARIZE=1
>
> This gets it down to 80k, a huge improvement, but still rather large for
> such a tiny input. I tried --closure 2, but (a) that only gets it down to
> 77k, and (b) then the code no longer works. I get "Uncaught TypeError: Kc is
> not a function" in the console when I try to call it from JavaScript.
>
> I've seen vague suggestions in various docs that --closure 2 would "require
> modifications to the source". I think there may have been something about
> requiring Closure type annotations. But that doesn't make sense to me, since
> the source code I'm dealing with is C.
>
> So what's actually needed for --closure 2?
>
> Also, looking at the generated code, there seems to be a lot of unnecessary
> stuff, even with --closure 2. For example, I see standard library stuff like
> malloc, free, memset, memcpy, etc. It's true that I might want to call those
> functions from my JavaScript code (in fact, for the actual library I'm
> trying to use, I do need at least malloc and free), but I thought I would
> need to declare such things in the EXPORTED_FUNCTIONS variable.
>
> Basically what I'm asking is, is it possible to get the compiled code much
> smaller?
>
> If the answer is "that would require more optimization in Emscripten, which
> we haven't had time to implement yet", then I'm curious what it would take.
> I might consider contributing. (I'm pretty experienced with JavaScript,
> though new to Emscripten.)
>
> --
> 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].
> For more options, visit https://groups.google.com/d/optout.

-- 
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to