summaryrefslogtreecommitdiff
path: root/build/autoconf/jemalloc.m4
diff options
context:
space:
mode:
Diffstat (limited to 'build/autoconf/jemalloc.m4')
-rw-r--r--build/autoconf/jemalloc.m4114
1 files changed, 114 insertions, 0 deletions
diff --git a/build/autoconf/jemalloc.m4 b/build/autoconf/jemalloc.m4
new file mode 100644
index 0000000000..3b9c603f75
--- /dev/null
+++ b/build/autoconf/jemalloc.m4
@@ -0,0 +1,114 @@
+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 "$MOZ_BUILD_APP" != js -o -n "$JS_STANDALONE"; then
+
+ # Run jemalloc configure script
+
+ if test -z "$MOZ_SYSTEM_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"
+
+ # 64-bit Windows builds require a minimum 16-byte alignment.
+ if test -n "$HAVE_64BIT_BUILD"; then
+ ac_configure_args="$ac_configure_args --with-lg-tiny-min=4"
+ fi
+ 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
+
+ # jemalloc's configure assumes that if you have CFLAGS set at all, you set
+ # all the flags necessary to configure jemalloc, which is not likely to be
+ # the case on Windows if someone is building Firefox with flags set in
+ # their mozconfig.
+ if test "$_MSC_VER"; then
+ ac_configure_args="$ac_configure_args CFLAGS="
+ fi
+
+ # 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
+
+])