[webkit-dev] How did Apple build libicucore.dylib?

Mark Rowe mrowe at apple.com
Fri Jan 10 14:02:26 PST 2014


Moving webkit-dev to BCC since this is off-topic for the list.

On Jan 10, 2014, at 13:45, Eric Wing <ewmailing at gmail.com> wrote:

> (I tried webkit-help but didn't get any responses, so I thought maybe
> this list might be more appropriate for this question. Sorry for the
> duplicate if otherwise.)
> 
> I am attempting to build JavaScriptCore for my own embedded
> application use. I noticed that Mac and iOS JavaScriptCore have a
> dependency on a library called libicucore.
> 
> When I build ICU myself from the , I get a handful of different icu
> libraries, but nothing named "core".
> 
> While I can get a working JavaScriptCore built against my ICU
> libraries (I need icuuc, icui18n, and icudata), my final binary size
> is huge due to the ICU libraries I link in. I tried statically linking
> my icu libraries, but the smallest my binary gets is about 30MB per
> architecture. When I dynamically link ICU, I can tell that the major
> contribution of the bloat is due to the ICU libraries.
> 
> Looking at Apple's icucore binary, it is about 6.5MB for 3
> architectures which is tiny compared to my 3 icu libraries. I'm
> speculating that Apple ripped out all the stuff they don't need and
> merged in all the parts they do need into the single libicucore.
> 
> Can somebody confirm this is what Apple did, and can somebody tell me
> how I can reproduce that? (I did try downloading Apple's 10.9 source
> for ICU from MacOSForge, but it built the normal ICU stuff and not
> libicucore, nor did I notice any special build options.)

Disclaimer: I know very little about ICU, this is just what I found from spending a few minutes looking at their source.

If you look at the <http://www.opensource.apple.com/source/ICU/ICU-511.25/> you can see the Makefile used when building ICU. It functions as a wrapper around ICU’s regular build process. I think the key option to shrink the library size is --with-data-packaging=archive. This puts the ICU data tables in a standalone file (/usr/share/icu/icudt51l.dat) rather than embedding them in the library. You'll also find the logic for packaging things up in to a library named libicucore.dylib here.

- Mark

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-dev/attachments/20140110/22738b2e/attachment.html>


More information about the webkit-dev mailing list