前回の「ICU のライブラリを削減する方法2」の続編です。これも公式 にあるけど。
ICU は以下のマクロによって機能をビルド時に有効無効にすることが出来ます。
- UCONFIG_ONLY_COLLATION
- UCONFIG_NO_LEGACY_CONVERSION
- UCONFIG_NO_BREAK_ITERATION
- UCONFIG_NO_COLLATION
- UCONFIG_NO_FORMATTING
- UCONFIG_NO_TRANSLITERATION
- UCONFIG_NO_REGULAR_EXPRESSIONS
例としてICU を文字コード変換のみとして使いたい場合は UCONFIG_NO_LEGACY_CONVERSION を除いてマクロを定義するか、もしくは uconfig.h を手で編集します。
ちなみに UCONFIG_NO_LEGACY_CONVERSION をつけて Unicode 関係以外の文字コーデックで UConverter 生成しようとすると UErrorCode に U_INVALID_TABLE_FORMAT が設定されて頭を悩ますことになります。
ICU のビルドは自分は以下のような bash スクリプトを自製して ICU をビルドしてます。ただ、実際は正規表現を使うので UCONFIG_NO_REGULAR_EXPRESSIONS を外してます。
#!/bin/bash
$FLAGS="-DUCONFIG_ONLY_COLLATION -DUCONFIG_NO_BREAK_ITERATION -DUCONFIG_NO_COLLATION -DUCONFIG_NO_FORMATTING -DUCONFIG_NO_TRANSLITERATION -DUCONFIG_NO_REGULAR_EXPRESSIONS"
CFLAGS=$FLAGS CXXFLAGS=$FLAGS ./configure
これによって libicui18n のライブラリサイズを 1MB 未満に抑えることが可能になります。これに libicuuc をあわせると動的ライブラリとして扱う場合だいたい 4MB で利用出来るようになります。
前回のと組み合わると「ICU を Emscripten で使う方法 」で効果を発揮できると思います。