Skip to content

Commit a6f2869

Browse files
pmlocekDanielZlotin
authored andcommitted
Use Chromium's fork of ICU (with prebuilt .dat archive), fixes #36 (#49)
* use Chromium's fork of ICU * Restore default ICU data Makefile.in; Force JSC to use our build of ICU instead of system-wide from pkg-config; use locale.h instead of xlocale.h in ICU * Use static build of ICU to take advantage of link-time GC to reduce output library size * Disable patching disable icu during compiling, moved to prep * Fix regression: non-intl build was linking with i18n ICU and full ICU data
1 parent a5e3b35 commit a6f2869

File tree

8 files changed

+112
-42
lines changed

8 files changed

+112
-42
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
"config": {
3030
"webkitGTK": "2.18.2",
31-
"androidICU": "8.0.0_r34",
31+
"chromiumICUCommit": "b34251f8b762f8e2112a89c587855ca4297fed96",
3232
"i18n": false
3333
}
3434
}

patches/icu.patch

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,19 @@ diff -aur target-org/icu/source/data/Makefile.in target/icu/source/data/Makefile
4444

4545
# This allows all the data to be in one directory
4646
ifeq ($(PKGDATA_MODE),dll)
47-
@@ -448,6 +448,11 @@
48-
MISC_FILES_LIST=$(DAT_FILES_SHORT) $(CNV_FILES_SHORT) $(CNV_FILES_SHORT_SPECIAL) $(CURR_FILES_SHORT) $(RBNF_FILES_SHORT) $(RBNF_INDEX_RES_SHORT) $(TRANSLIT_FILES_SHORT) $(SPREP_FILES_SHORT) $(CFU_FILES_SHORT)
49-
UNI_CORE_DATA=pnames.icu uprops.icu ucase.icu ubidi.icu nfc.nrm
50-
UNI_CORE_TARGET_DATA=$(UNI_CORE_DATA:%=$(BUILDDIR)/%)
51-
+BRK_FILES_LIST=""
52-
+LOCALE_FILES_LIST=$(RES_FILES_SHORT)
53-
+MISC_FILES_LIST=coll/ucadata.icu
54-
+
55-
+
47+
diff -aur target-org/icu/source/i18n/digitlst.cpp target/icu/source/i18n/digitlst.cpp
48+
--- target-org/icu/source/i18n/digitlst.cpp 2018-07-23 11:20:13.000000000 +0200
49+
+++ target/icu/source/i18n/digitlst.cpp 2018-07-23 15:29:24.729402639 +0200
50+
@@ -61,11 +61,7 @@
51+
#endif
5652

57-
ifneq ($(INCLUDE_UNI_CORE_DATA),)
58-
MISC_FILES_LIST+=$(UNI_CORE_DATA)
53+
#if U_USE_STRTOD_L
54+
-# if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN
55+
-# include <locale.h>
56+
-# else
57+
-# include <xlocale.h>
58+
-# endif
59+
+# include <locale.h>
60+
#endif
61+
62+
// ***************************************************************************

patches/jsc.patch

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,67 @@ diff -aur org/target/webkit/Source/cmake/OptionsCommon.cmake target/webkit/Sourc
183183
_HAVE_CHECK_INCLUDE(HAVE_MMAP sys/mman.h)
184184
_HAVE_CHECK_INCLUDE(HAVE_PTHREAD_NP_H pthread_np.h)
185185
_HAVE_CHECK_INCLUDE(HAVE_STRINGS_H strings.h)
186-
186+
diff -aur target-org/webkit/Source/cmake/FindICU.cmake target/webkit/Source/cmake/FindICU.cmake
187+
--- target-org/webkit/Source/cmake/FindICU.cmake 2018-07-24 15:41:23.452474811 +0200
188+
+++ target/webkit/Source/cmake/FindICU.cmake 2018-07-12 15:53:44.611542333 +0200
189+
@@ -16,19 +16,15 @@
190+
find_path(
191+
ICU_INCLUDE_DIR
192+
NAMES unicode/utypes.h
193+
- HINTS ${PC_ICU_INCLUDE_DIRS}
194+
- ${PC_ICU_INCLUDEDIR}
195+
- ${WEBKIT_LIBRARIES_INCLUDE_DIR}
196+
+ HINTS ${WEBKIT_LIBRARIES_INCLUDE_DIR}
197+
DOC "Include directory for the ICU library")
198+
mark_as_advanced(ICU_INCLUDE_DIR)
199+
200+
# Look for the library.
201+
find_library(
202+
ICU_LIBRARY
203+
- NAMES libicuuc cygicuuc cygicuuc32 icuuc icuuc_jsc
204+
- HINTS ${PC_ICU_LIBRARY_DIRS}
205+
- ${PC_ICU_LIBDIR}
206+
- ${WEBKIT_LIBRARIES_LINK_DIR}
207+
+ NAMES icuuc_jsc
208+
+ HINTS ${WEBKIT_LIBRARIES_LINK_DIR}
209+
DOC "Libraries to link against for the common parts of ICU")
210+
mark_as_advanced(ICU_LIBRARY)
211+
212+
@@ -51,10 +47,8 @@
213+
pkg_check_modules(PC_ICU_I18N icu-i18n)
214+
find_library(
215+
ICU_I18N_LIBRARY
216+
- NAMES icui18n libicui18n libicuin cygicuin cygicuin32 icuin icui18n_jsc
217+
- HINTS ${PC_ICU_I18N_LIBRARY_DIRS}
218+
- ${PC_ICU_I18N_LIBDIR}
219+
- ${WEBKIT_LIBRARIES_LINK_DIR}
220+
+ NAMES icui18n_jsc
221+
+ HINTS ${WEBKIT_LIBRARIES_LINK_DIR}
222+
DOC "Libraries to link against for ICU internationalization")
223+
mark_as_advanced(ICU_I18N_LIBRARY)
224+
if (ICU_I18N_LIBRARY)
225+
@@ -68,10 +62,8 @@
226+
# Look for the ICU data libraries
227+
find_library(
228+
ICU_DATA_LIBRARY
229+
- NAMES icudata libicudata cygicudata cygicudata32 icudata_jsc
230+
- HINTS ${PC_ICU_I18N_LIBRARY_DIRS}
231+
- ${PC_ICU_I18N_LIBDIR}
232+
- ${WEBKIT_LIBRARIES_LINK_DIR}
233+
+ NAMES icudata_jsc
234+
+ HINTS ${WEBKIT_LIBRARIES_LINK_DIR}
235+
DOC "Libraries to link against for ICU data")
236+
mark_as_advanced(ICU_DATA_LIBRARY)
237+
if (ICU_DATA_LIBRARY)
238+
diff -aur target-org/webkit/Source/JavaScriptCore/CMakeLists.txt target/webkit/Source/JavaScriptCore/CMakeLists.txt
239+
--- target-org/webkit/Source/JavaScriptCore/CMakeLists.txt 2018-07-25 09:56:23.662494914 +0200
240+
+++ target/webkit/Source/JavaScriptCore/CMakeLists.txt 2018-07-18 12:55:24.726736260 +0200
241+
@@ -1072,6 +1072,8 @@
242+
set(JavaScriptCore_LIBRARIES
243+
WTF${DEBUG_SUFFIX}
244+
${ICU_I18N_LIBRARIES}
245+
+ ${ICU_LIBRARIES}
246+
+ ${ICU_DATA_LIBRARIES}
247+
${LLVM_LIBRARIES}
248+
)
249+

scripts/compile/common.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ COMMON_LDFLAGS=" \
124124
-fuse-ld=gold \
125125
-Wl,--icf=safe \
126126
-Wl,-z,noexecstack \
127+
-Wl,--gc-sections \
127128
"
128129

129130
COMMON_CFLAGS=" \
@@ -144,9 +145,12 @@ COMMON_CXXFLAGS=" \
144145
--std=c++11 \
145146
"
146147

147-
ICU_CFLAGS="$COMMON_CFLAGS $PLATFORM_CFLAGS -Os"
148-
ICU_CXXFLAGS="$COMMON_CXXFLAGS $ICU_CFLAGS -Os"
148+
ICU_CFLAGS="$COMMON_CFLAGS $PLATFORM_CFLAGS -Oz"
149+
ICU_CXXFLAGS="$COMMON_CXXFLAGS $ICU_CFLAGS -Oz"
149150
ICU_LDFLAGS="$COMMON_LDFLAGS $PLATFORM_LDFLAGS -s"
150151

152+
JSC_LDFLAGS="$COMMON_LDFLAGS"
153+
JSC_CFLAGS="$COMMON_CFLAGS -DU_STATIC_IMPLEMENTATION=1 -DU_SHOW_CPLUSPLUS_API=0"
154+
151155
INSTALL_DIR=$ROOTDIR/build/compiled/$JNI_ARCH
152156
mkdir -p $INSTALL_DIR

scripts/compile/icu.sh

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ PATH=$TOOLCHAIN_DIR/bin:$PATH
2020

2121
$TARGETDIR/icu/source/configure --prefix=$(pwd)/prebuilts \
2222
--host=$CROSS_COMPILE_PLATFORM \
23-
--enable-shared=yes \
23+
--enable-static=yes \
24+
--enable-shared=no \
2425
--enable-extras=no \
2526
--enable-strict=no \
2627
--enable-icuio=no \
@@ -30,25 +31,19 @@ $TARGETDIR/icu/source/configure --prefix=$(pwd)/prebuilts \
3031
--enable-tests=no \
3132
--enable-samples=no \
3233
--enable-dyload=no \
33-
-with-cross-build=$CROSS_BUILD_DIR \
34+
--with-cross-build=$CROSS_BUILD_DIR \
3435
CFLAGS="$ICU_CFLAGS" \
3536
CXXFLAGS="$ICU_CXXFLAGS" \
3637
LDFLAGS="$ICU_LDFLAGS" \
3738
CC=$CROSS_COMPILE_PLATFORM-clang \
3839
CXX=$CROSS_COMPILE_PLATFORM-clang++ \
3940
AR=$CROSS_COMPILE_PLATFORM-ar \
4041
RINLIB=$CROSS_COMPILE_PLATFORM-ranlib \
41-
--with-data-packaging=library
42+
--with-data-packaging=static
4243

4344
make -j5
4445

45-
if [[ $ENABLE_INTL ]]; then
46-
cp lib/libicudata_jsc.so $INSTALL_DIR/libicudata_jsc.so
47-
cp lib/libicui18n_jsc.so.$ICU_VERSION $INSTALL_DIR/libicui18n_jsc.so
48-
else
49-
rm lib/libicui18n_jsc.so*
50-
cp stubdata/libicudata_jsc.so.$ICU_VERSION lib/
51-
cp stubdata/libicudata_jsc.so.$ICU_VERSION $INSTALL_DIR/libicudata_jsc.so
46+
if ! [[ $ENABLE_INTL ]]; then
47+
rm lib/libicui18n_jsc.a
48+
cp stubdata/libicudata_jsc.a lib/
5249
fi
53-
54-
cp lib/libicuuc_jsc.so.$ICU_VERSION $INSTALL_DIR/libicuuc_jsc.so

scripts/compile/jsc.sh

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,24 @@ source $SCRIPT_DIR/common.sh
66
CMAKE_FOLDER=$(cd $ANDROID_HOME/cmake && ls -1 | sort -r | head -1)
77
PATH=$TOOLCHAIN_DIR/bin:$ANDROID_HOME/cmake/$CMAKE_FOLDER/bin/:$PATH
88

9-
# conditional patch
10-
if ! [[ $ENABLE_INTL ]]; then
11-
patch -d $TARGETDIR -N -p1 < $ROOTDIR/patches/intl/icu-disabled.patch
12-
fi
13-
149
rm -rf $TARGETDIR/webkit/$CROSS_COMPILE_PLATFORM-${FLAVOR}
1510
rm -rf $TARGETDIR/webkit/WebKitBuild
1611
cd $TARGETDIR/webkit/Tools/Scripts
1712

1813
CMAKE_CXX_FLAGS=" \
1914
$SWITCH_JSC_CFLAGS_COMPAT \
20-
$COMMON_CFLAGS \
15+
$JSC_CFLAGS \
2116
$PLATFORM_CFLAGS \
2217
-fno-rtti \
2318
-I$TARGETDIR/icu/source/i18n \
2419
-I$TOOLCHAIN_DIR/sysroot/usr/include \
2520
"
21+
2622
CMAKE_LD_FLAGS=" \
2723
-latomic \
2824
-lm \
2925
-lc++_shared \
30-
$COMMON_LDFLAGS \
26+
$JSC_LDFLAGS \
3127
$PLATFORM_LDFLAGS \
3228
"
3329

@@ -50,6 +46,7 @@ $TARGETDIR/webkit/Tools/Scripts/build-webkit \
5046
-DCMAKE_C_COMPILER=$CROSS_COMPILE_PLATFORM-clang \
5147
-DCMAKE_CXX_COMPILER=$CROSS_COMPILE_PLATFORM-clang \
5248
-DCMAKE_SYSROOT=$TOOLCHAIN_DIR/sysroot \
49+
-DCMAKE_SYSROOT_COMPILE=$TOOLCHAIN_DIR/sysroot \
5350
-DCMAKE_CXX_FLAGS='${CMAKE_CXX_FLAGS} $COMMON_CXXFLAGS $CMAKE_CXX_FLAGS' \
5451
-DCMAKE_C_FLAGS='${CMAKE_C_FLAGS} $CMAKE_CXX_FLAGS' \
5552
-DCMAKE_SHARED_LINKER_FLAGS='${CMAKE_SHARED_LINKER_FLAGS} $CMAKE_LD_FLAGS' \
@@ -61,9 +58,3 @@ $TARGETDIR/webkit/Tools/Scripts/build-webkit \
6158
cp $TARGETDIR/webkit/WebKitBuild/Release/lib/libjsc.so $INSTALL_DIR
6259
mv $TARGETDIR/webkit/WebKitBuild $TARGETDIR/webkit/${CROSS_COMPILE_PLATFORM}-${FLAVOR}
6360
cp $TOOLCHAIN_LINK_DIR/libc++_shared.so $INSTALL_DIR
64-
65-
# conditional patch undo
66-
cd $ROOTDIR
67-
if ! [[ $ENABLE_INTL ]]; then
68-
patch -d $TARGETDIR -p1 -R < $ROOTDIR/patches/intl/icu-disabled.patch
69-
fi

scripts/download.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ svn export https://svn.webkit.org/repository/webkit/$SVN_URL/Tools $TARGET_DIR/w
1111
svn export https://svn.webkit.org/repository/webkit/$SVN_URL/CMakeLists.txt $TARGET_DIR/webkit/CMakeLists.txt
1212

1313
mkdir -p $TARGET_DIR/icu
14-
curl "https://android.googlesource.com/platform/external/icu/+archive/android-${npm_package_config_androidICU}/icu4c.tar.gz" | tar xzf - -C $TARGET_DIR/icu
14+
curl "https://chromium.googlesource.com/chromium/deps/icu/+archive/${npm_package_config_chromiumICUCommit}.tar.gz" | tar xzf - -C $TARGET_DIR/icu

scripts/prep.sh

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,28 @@ rm -rf $TARGETDIR
88
cp -Rf $ROOTDIR/build/download $TARGETDIR
99

1010
echo "=============== patch and make icu into target/icu/host ====================="
11+
ICU_VERSION_MAJOR="$(awk '/ICU_VERSION_MAJOR_NUM/ {print $3}' $TARGETDIR/icu/source/common/unicode/uvernum.h)"
1112
patch -d $TARGETDIR -p1 < $ROOTDIR/patches/icu.patch
1213

14+
# use compiled .dat archive from Android Chromium
15+
cp $TARGETDIR/icu/android/icudtl.dat $TARGETDIR/icu/source/data/in/icudt${ICU_VERSION_MAJOR}l.dat
16+
rm $TARGETDIR/icu/source/data/translit/root_subset.txt $TARGETDIR/icu/source/data/translit/trnslocal.mk
17+
1318
rm -rf $TARGETDIR/icu/host
1419
mkdir -p $TARGETDIR/icu/host
1520
cd $TARGETDIR/icu/host
16-
$TARGETDIR/icu/source/runConfigureICU Linux --prefix=$PWD/prebuilts CFLAGS="-Os" CXXFLAGS="--std=c++11"
21+
$TARGETDIR/icu/source/runConfigureICU Linux --prefix=$PWD/prebuilts CFLAGS="-Os" CXXFLAGS="--std=c++11" --disable-tests --disable-samples
1722
make -j5
1823
cd $ROOTDIR
1924

2025
echo "=============== patch jsc ====================="
2126
patch -d $TARGETDIR -p1 < $ROOTDIR/patches/jsc.patch
27+
28+
# conditional patch
29+
if [[ "$npm_package_config_i18n" = false ]]; then
30+
patch -d $TARGETDIR -N -p1 < $ROOTDIR/patches/intl/icu-disabled.patch
31+
fi
32+
33+
#remove icu headers from WTF, so it won't use them instead of the ones from icu/host/common
34+
rm -rf "$TARGETDIR"/webkit/Source/WTF/icu
2235
echo "orig: $(find $ROOTDIR/build/target | grep \.orig || true)"

0 commit comments

Comments
 (0)