summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJob Bautista <jobbautista9@aol.com>2023-03-19 00:08:48 +0800
committerJob Bautista <jobbautista9@aol.com>2023-03-19 00:16:46 +0800
commiteac34369607620a9c80e0472a627ae8a7ec095be (patch)
tree7aeeacf67346a912bc4cb3ef56d38cd8f5b63fb9
parent972e0410ca7df3b66d1675c8ed10a2a547a4ecbf (diff)
downloaduxp-eac34369607620a9c80e0472a627ae8a7ec095be.tar.gz
Issue #2165 - Build ICU as a shared library if we're building Spidermonkey shared.
It seems that if we're going to enable JS_SHARED_LIBRARY, we need ICU to be a shared library too in order to prevent code duplication in mozjs.dll bloating it to a whopping 21 MB. This unfortunately means we have to fold icudata back to icu itself. But since icudata is still separated from libxul (which is what really matters for #1451), I think this is a fair compromise. Building ICU as shared is offered as an option via --enable-shared-icu. But technically you really need --enable-shared-icu if you're going to use --enable-shared-js. Unfortunately I can't make configure exit with an error if MOZ_SHARED_ICU is not defined when JS_SHARED_LIBRARY is enabled, because options are controlled by different configure scripts (icu is based on bash, while js is based on python), and I have no idea how to pass MOZ_SHARED_ICU to js's moz.configure. Tag #62
-rw-r--r--CLOBBER2
-rw-r--r--build/autoconf/icu.m415
-rw-r--r--build/moz.configure/old.configure1
-rw-r--r--config/external/icu/moz.build5
-rw-r--r--intl/unicharutil/util/moz.build5
-rw-r--r--js/src/moz.build26
-rw-r--r--old-configure.in9
7 files changed, 32 insertions, 31 deletions
diff --git a/CLOBBER b/CLOBBER
index 4b59135e5f..2b72302d52 100644
--- a/CLOBBER
+++ b/CLOBBER
@@ -22,4 +22,4 @@
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
# don't change CLOBBER for WebIDL changes any more.
-Clobber for NSPR 4.35 and NSS 3.79.4 update \ No newline at end of file
+Touching ICU's build system requires a CLOBBER. (Issue #2165)
diff --git a/build/autoconf/icu.m4 b/build/autoconf/icu.m4
index 090d6c0a2d..2530f6a69c 100644
--- a/build/autoconf/icu.m4
+++ b/build/autoconf/icu.m4
@@ -34,11 +34,10 @@ if test -n "$USE_ICU"; then
ICU_DATA_FILE="icudt${version}l.dat"
dnl We won't build ICU data as a separate file when building
- dnl JS standalone so that embedders don't have to deal with it.
- dnl We also don't do it on Windows because sometimes the file goes
- dnl missing -- possibly due to overzealous antivirus software? --
- dnl which prevents the browser from starting up :(
- if test -z "$JS_STANDALONE"; then
+ dnl ICU as a shared library, as we need to fold the data into
+ dnl the shared library in order for consumers like Spidermonkey
+ dnl to use it without code duplication.
+ if test -z "$MOZ_SHARED_ICU"; then
MOZ_ICU_DATA_ARCHIVE=1
else
MOZ_ICU_DATA_ARCHIVE=
@@ -50,13 +49,15 @@ AC_SUBST(ENABLE_INTL_API)
AC_SUBST(USE_ICU)
AC_SUBST(ICU_DATA_FILE)
AC_SUBST(MOZ_ICU_DATA_ARCHIVE)
+AC_SUBST(MOZ_SHARED_ICU)
if test -n "$USE_ICU"; then
if test -z "$YASM" -a -z "$GNU_AS" -a "$COMPILE_ENVIRONMENT"; then
AC_MSG_ERROR([Building ICU requires either yasm or a GNU assembler. If you do not have either of those available for this platform you must use --without-intl-api])
fi
- dnl We build ICU as a static library.
- AC_DEFINE(U_STATIC_IMPLEMENTATION)
+ if test -z "$MOZ_SHARED_ICU"; then
+ AC_DEFINE(U_STATIC_IMPLEMENTATION)
+ fi
dnl Source files that use ICU should have control over which parts of the ICU
dnl namespace they want to use.
AC_DEFINE(U_USING_ICU_NAMESPACE,0)
diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure
index 527384839a..64e91e1f31 100644
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -227,6 +227,7 @@ def old_configure_options(*options):
'--enable-safe-browsing',
'--enable-sandbox',
'--enable-security-sqlstore',
+ '--enable-shared-icu',
'--enable-shared-media',
'--enable-signmar',
'--enable-simulator',
diff --git a/config/external/icu/moz.build b/config/external/icu/moz.build
index ba95cd0fb3..e403f17c78 100644
--- a/config/external/icu/moz.build
+++ b/config/external/icu/moz.build
@@ -3,8 +3,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-Library('icu')
-
DIRS += [
'common',
'data',
@@ -14,5 +12,8 @@ DIRS += [
if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
DIRS += ['stubdata']
USE_LIBS += ['icustubdata']
+ Library('icu')
else:
USE_LIBS += ['icudata']
+ SharedLibrary('icu')
+ SHARED_LIBRARY_NAME = 'icu' + CONFIG['MOZ_ICU_VERSION']
diff --git a/intl/unicharutil/util/moz.build b/intl/unicharutil/util/moz.build
index cd32738134..64d455f91c 100644
--- a/intl/unicharutil/util/moz.build
+++ b/intl/unicharutil/util/moz.build
@@ -24,7 +24,10 @@ include('objs.mozbuild')
UNIFIED_SOURCES += intl_unicharutil_util_cppsrcs
-Library('unicharutil_external_s')
+# This line breaks building ICU as a shared library due to a
+# SandboxValidationError from the frontend reader.
+if not CONFIG['MOZ_SHARED_ICU']:
+ Library('unicharutil_external_s')
FORCE_STATIC_LIB = True
diff --git a/js/src/moz.build b/js/src/moz.build
index eb96ec4eb5..0a1f3ccdd7 100644
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -599,27 +599,21 @@ if CONFIG['JS_SHARED_LIBRARY']:
GeckoSharedLibrary('js', linkage=None)
SHARED_LIBRARY_NAME = CONFIG['JS_LIBRARY_NAME']
SDK_LIBRARY = True
- if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
- USE_LIBS += [
- 'icudata',
- ]
+ USE_LIBS += [
+ 'icu',
+ ]
else:
Library('js')
FORCE_STATIC_LIB = True
STATIC_LIBRARY_NAME = 'js_static'
NO_EXPAND_LIBS = True
-
-if not CONFIG['MOZ_ICU_DATA_ARCHIVE']:
- USE_LIBS += [
- 'icu',
- ]
-else:
- # Linking 'icu' will pull in the stubdata library,
- # which the shell doesn't want, so link the other bits.
- USE_LIBS += [
- 'icui18n',
- 'icuuc',
- ]
+ if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
+ # Linking 'icu' will pull in the stubdata library,
+ # which the shell doesn't want, so link the other bits.
+ USE_LIBS += [
+ 'icui18n',
+ 'icuuc',
+ ]
USE_LIBS += [
'nspr',
diff --git a/old-configure.in b/old-configure.in
index 4d997ba560..ccd8d16491 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -4864,12 +4864,13 @@ AC_SUBST(WIN32_REDIST_DIR)
AC_SUBST(WIN_UCRT_REDIST_DIR)
dnl ========================================================
-dnl ICU Support
+dnl ICU Shared Library Support
dnl ========================================================
-if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then
- USE_ICU=1
-fi
+MOZ_ARG_ENABLE_BOOL(shared-icu,
+[ --enable-shared-icu Build ICU as a shared library],
+ MOZ_SHARED_ICU=1,
+ MOZ_SHARED_ICU=)
MOZ_CONFIG_ICU()