| dnl This Source Code Form is subject to the terms of the Mozilla Public |
| dnl License, v. 2.0. If a copy of the MPL was not distributed with this |
| dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| AC_DEFUN([MOZ_SUBCONFIGURE_JEMALLOC], [ |
| |
| if test -z "$BUILDING_JS" -o -n "$JS_STANDALONE"; then |
| |
| # Run jemalloc configure script |
| |
| if test -z "$MOZ_NATIVE_JEMALLOC" -a "$MOZ_MEMORY" && test -n "$MOZ_JEMALLOC4" -o -n "$MOZ_REPLACE_MALLOC"; then |
| ac_configure_args="--build=$build --host=$target --enable-stats --with-jemalloc-prefix=je_ --disable-valgrind" |
| # We're using memalign for _aligned_malloc in memory/build/mozmemory_wrap.c |
| # on Windows, so just export memalign on all platforms. |
| ac_configure_args="$ac_configure_args ac_cv_func_memalign=yes" |
| if test -n "$MOZ_REPLACE_MALLOC"; then |
| # When using replace_malloc, we always want valloc exported from jemalloc. |
| ac_configure_args="$ac_configure_args ac_cv_func_valloc=yes" |
| if test "${OS_ARCH}" = Darwin; then |
| # We also need to enable pointer validation on Mac because jemalloc's |
| # zone allocator is not used. |
| ac_configure_args="$ac_configure_args --enable-ivsalloc" |
| fi |
| fi |
| if test -n "$MOZ_JEMALLOC4"; then |
| case "${OS_ARCH}" in |
| WINNT|Darwin) |
| # We want jemalloc functions to be kept hidden on both Mac and Windows |
| # See memory/build/mozmemory_wrap.h for details. |
| ac_configure_args="$ac_configure_args --without-export" |
| ;; |
| esac |
| if test "${OS_ARCH}" = WINNT; then |
| # Lazy lock initialization doesn't play well with lazy linking of |
| # mozglue.dll on Windows XP (leads to startup crash), so disable it. |
| ac_configure_args="$ac_configure_args --disable-lazy-lock" |
| fi |
| elif test "${OS_ARCH}" = Darwin; then |
| # When building as a replace-malloc lib, disabling the zone allocator |
| # forces to use pthread_atfork. |
| ac_configure_args="$ac_configure_args --disable-zone-allocator" |
| fi |
| _MANGLE="malloc posix_memalign aligned_alloc calloc realloc free memalign valloc malloc_usable_size" |
| JEMALLOC_WRAPPER= |
| if test -z "$MOZ_REPLACE_MALLOC"; then |
| case "$OS_ARCH" in |
| Linux|DragonFly|FreeBSD|NetBSD|OpenBSD) |
| MANGLE=$_MANGLE |
| ;; |
| esac |
| elif test -z "$MOZ_JEMALLOC4"; then |
| MANGLE=$_MANGLE |
| JEMALLOC_WRAPPER=replace_ |
| fi |
| if test -n "$MANGLE"; then |
| MANGLED= |
| for mangle in ${MANGLE}; do |
| if test -n "$MANGLED"; then |
| MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle,$MANGLED" |
| else |
| MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle" |
| fi |
| done |
| ac_configure_args="$ac_configure_args --with-mangling=$MANGLED" |
| fi |
| unset CONFIG_FILES |
| if test -z "$MOZ_TLS"; then |
| ac_configure_args="$ac_configure_args --disable-tls" |
| fi |
| EXTRA_CFLAGS="$CFLAGS" |
| for var in AS CC CXX CPP LD AR RANLIB STRIP CPPFLAGS EXTRA_CFLAGS LDFLAGS; do |
| ac_configure_args="$ac_configure_args $var='`eval echo \\${${var}}`'" |
| done |
| # Force disable DSS support in jemalloc. |
| ac_configure_args="$ac_configure_args ac_cv_func_sbrk=false" |
| |
| # Make Linux builds munmap freed chunks instead of recycling them. |
| ac_configure_args="$ac_configure_args --enable-munmap" |
| |
| # Disable cache oblivious behavior that appears to have a performance |
| # impact on Firefox. |
| ac_configure_args="$ac_configure_args --disable-cache-oblivious" |
| |
| if ! test -e memory/jemalloc; then |
| mkdir -p memory/jemalloc |
| fi |
| |
| # jemalloc's configure runs git to determine the version. But when building |
| # from a gecko git clone, the git commands it uses is going to pick gecko's |
| # information, not jemalloc's, which is useless. So pretend we don't have git |
| # at all. That will make jemalloc's configure pick the in-tree VERSION file. |
| (PATH="$srcdir/memory/jemalloc/helper:$PATH"; |
| AC_OUTPUT_SUBDIRS(memory/jemalloc/src) |
| ) || exit 1 |
| ac_configure_args="$_SUBDIR_CONFIG_ARGS" |
| fi |
| |
| fi |
| |
| ]) |