summaryrefslogtreecommitdiff
path: root/build/autoconf/jemalloc.m4
blob: 21fed27e9a7355ee26a1d686588d5eaaa93f7cc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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 "$MOZ_MEMORY" && test -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
    MANGLE="malloc posix_memalign aligned_alloc calloc realloc free memalign valloc malloc_usable_size"
    JEMALLOC_WRAPPER=replace_
    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

])