mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 18:07:31 +09:00
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
This commit is contained in:
parent
ed30a96467
commit
bad884a7c7
6 changed files with 31 additions and 30 deletions
|
|
@ -34,11 +34,10 @@ if test -n "$USE_ICU"; then
|
||||||
ICU_DATA_FILE="icudt${version}l.dat"
|
ICU_DATA_FILE="icudt${version}l.dat"
|
||||||
|
|
||||||
dnl We won't build ICU data as a separate file when building
|
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 ICU as a shared library, as we need to fold the data into
|
||||||
dnl We also don't do it on Windows because sometimes the file goes
|
dnl the shared library in order for consumers like Spidermonkey
|
||||||
dnl missing -- possibly due to overzealous antivirus software? --
|
dnl to use it without code duplication.
|
||||||
dnl which prevents the browser from starting up :(
|
if test -z "$MOZ_SHARED_ICU"; then
|
||||||
if test -z "$JS_STANDALONE"; then
|
|
||||||
MOZ_ICU_DATA_ARCHIVE=1
|
MOZ_ICU_DATA_ARCHIVE=1
|
||||||
else
|
else
|
||||||
MOZ_ICU_DATA_ARCHIVE=
|
MOZ_ICU_DATA_ARCHIVE=
|
||||||
|
|
@ -50,13 +49,15 @@ AC_SUBST(ENABLE_INTL_API)
|
||||||
AC_SUBST(USE_ICU)
|
AC_SUBST(USE_ICU)
|
||||||
AC_SUBST(ICU_DATA_FILE)
|
AC_SUBST(ICU_DATA_FILE)
|
||||||
AC_SUBST(MOZ_ICU_DATA_ARCHIVE)
|
AC_SUBST(MOZ_ICU_DATA_ARCHIVE)
|
||||||
|
AC_SUBST(MOZ_SHARED_ICU)
|
||||||
|
|
||||||
if test -n "$USE_ICU"; then
|
if test -n "$USE_ICU"; then
|
||||||
if test -z "$YASM" -a -z "$GNU_AS" -a "$COMPILE_ENVIRONMENT"; 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])
|
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
|
fi
|
||||||
dnl We build ICU as a static library.
|
if test -z "$MOZ_SHARED_ICU"; then
|
||||||
AC_DEFINE(U_STATIC_IMPLEMENTATION)
|
AC_DEFINE(U_STATIC_IMPLEMENTATION)
|
||||||
|
fi
|
||||||
dnl Source files that use ICU should have control over which parts of the ICU
|
dnl Source files that use ICU should have control over which parts of the ICU
|
||||||
dnl namespace they want to use.
|
dnl namespace they want to use.
|
||||||
AC_DEFINE(U_USING_ICU_NAMESPACE,0)
|
AC_DEFINE(U_USING_ICU_NAMESPACE,0)
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,7 @@ def old_configure_options(*options):
|
||||||
'--enable-safe-browsing',
|
'--enable-safe-browsing',
|
||||||
'--enable-sandbox',
|
'--enable-sandbox',
|
||||||
'--enable-security-sqlstore',
|
'--enable-security-sqlstore',
|
||||||
|
'--enable-shared-icu',
|
||||||
'--enable-shared-media',
|
'--enable-shared-media',
|
||||||
'--enable-signmar',
|
'--enable-signmar',
|
||||||
'--enable-simulator',
|
'--enable-simulator',
|
||||||
|
|
|
||||||
5
config/external/icu/moz.build
vendored
5
config/external/icu/moz.build
vendored
|
|
@ -3,8 +3,6 @@
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
Library('icu')
|
|
||||||
|
|
||||||
DIRS += [
|
DIRS += [
|
||||||
'common',
|
'common',
|
||||||
'data',
|
'data',
|
||||||
|
|
@ -14,5 +12,8 @@ DIRS += [
|
||||||
if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
|
if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
|
||||||
DIRS += ['stubdata']
|
DIRS += ['stubdata']
|
||||||
USE_LIBS += ['icustubdata']
|
USE_LIBS += ['icustubdata']
|
||||||
|
Library('icu')
|
||||||
else:
|
else:
|
||||||
USE_LIBS += ['icudata']
|
USE_LIBS += ['icudata']
|
||||||
|
SharedLibrary('icu')
|
||||||
|
SHARED_LIBRARY_NAME = 'icu' + CONFIG['MOZ_ICU_VERSION']
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,10 @@ include('objs.mozbuild')
|
||||||
|
|
||||||
UNIFIED_SOURCES += intl_unicharutil_util_cppsrcs
|
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
|
FORCE_STATIC_LIB = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -611,27 +611,21 @@ if CONFIG['JS_SHARED_LIBRARY']:
|
||||||
GeckoSharedLibrary('js', linkage=None)
|
GeckoSharedLibrary('js', linkage=None)
|
||||||
SHARED_LIBRARY_NAME = CONFIG['JS_LIBRARY_NAME']
|
SHARED_LIBRARY_NAME = CONFIG['JS_LIBRARY_NAME']
|
||||||
SDK_LIBRARY = True
|
SDK_LIBRARY = True
|
||||||
if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
|
USE_LIBS += [
|
||||||
USE_LIBS += [
|
'icu',
|
||||||
'icudata',
|
]
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
Library('js')
|
Library('js')
|
||||||
FORCE_STATIC_LIB = True
|
FORCE_STATIC_LIB = True
|
||||||
STATIC_LIBRARY_NAME = 'js_static'
|
STATIC_LIBRARY_NAME = 'js_static'
|
||||||
NO_EXPAND_LIBS = True
|
NO_EXPAND_LIBS = True
|
||||||
|
if CONFIG['MOZ_ICU_DATA_ARCHIVE']:
|
||||||
if not CONFIG['MOZ_ICU_DATA_ARCHIVE']:
|
# Linking 'icu' will pull in the stubdata library,
|
||||||
USE_LIBS += [
|
# which the shell doesn't want, so link the other bits.
|
||||||
'icu',
|
USE_LIBS += [
|
||||||
]
|
'icui18n',
|
||||||
else:
|
'icuuc',
|
||||||
# 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 += [
|
USE_LIBS += [
|
||||||
'nspr',
|
'nspr',
|
||||||
|
|
|
||||||
|
|
@ -5144,12 +5144,13 @@ AC_SUBST(WIN32_REDIST_DIR)
|
||||||
AC_SUBST(WIN_UCRT_REDIST_DIR)
|
AC_SUBST(WIN_UCRT_REDIST_DIR)
|
||||||
|
|
||||||
dnl ========================================================
|
dnl ========================================================
|
||||||
dnl ICU Support
|
dnl ICU Shared Library Support
|
||||||
dnl ========================================================
|
dnl ========================================================
|
||||||
|
|
||||||
if test "$MOZ_WIDGET_TOOLKIT" = "cocoa"; then
|
MOZ_ARG_ENABLE_BOOL(shared-icu,
|
||||||
USE_ICU=1
|
[ --enable-shared-icu Build ICU as a shared library],
|
||||||
fi
|
MOZ_SHARED_ICU=1,
|
||||||
|
MOZ_SHARED_ICU=)
|
||||||
|
|
||||||
MOZ_CONFIG_ICU()
|
MOZ_CONFIG_ICU()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue