DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (d38398e5144e)

VCS Links

Line Code
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.


option(env='MOZ_JEMALLOC4', help='Enable jemalloc 4')
imply_option('--enable-jemalloc', depends_if('MOZ_JEMALLOC4')(lambda x: '4'))


option('--enable-jemalloc', nargs='?', choices=('4', 'moz'), env='MOZ_MEMORY',
       help='Replace memory allocator with jemalloc')

@depends('--enable-jemalloc', target, build_project, c_compiler)
def jemalloc(value, target, build_project, c_compiler):
    if value.origin != 'default':
        return bool(value) or None

    if build_project == 'js':
        return True

    if target.kernel == 'Darwin' and target.cpu == 'x86_64':
        # Don't enable by default on 32-bits OSX. See bug 702250.
        return True

    if target.kernel == 'WINNT' and c_compiler.type in ('msvc', 'clang-cl'):
        return True

    if target.kernel == 'Linux':
        return True

@depends('--enable-jemalloc')
def jemalloc4(jemalloc):
    if len(jemalloc) and jemalloc[0] == '4':
        return True


set_config('MOZ_MEMORY', jemalloc)
set_define('MOZ_MEMORY', jemalloc)
add_old_configure_assignment('MOZ_MEMORY', jemalloc)

set_config('MOZ_JEMALLOC4', jemalloc4)
set_define('MOZ_JEMALLOC4', jemalloc4)
add_old_configure_assignment('MOZ_JEMALLOC4', jemalloc4)


# Because --enable-jemalloc doesn't use a default because of the dependency
# on the target, we can't use a js_option for it to propagate to js/src
# through the old-configure.
@depends(jemalloc, jemalloc4)
def jemalloc_for_old_configure(jemalloc, jemalloc4):
    if jemalloc:
        return '--enable-jemalloc=4' if jemalloc4 else '--enable-jemalloc'
    return '--disable-jemalloc'

add_old_configure_arg(jemalloc_for_old_configure)


@depends(jemalloc, jemalloc4, target)
def jemalloc_os_define(jemalloc, jemalloc4, target):
    if jemalloc and not jemalloc4:
        if target.kernel == 'WINNT':
            return 'MOZ_MEMORY_WINDOWS'
        if target.kernel == 'Linux':
            return 'MOZ_MEMORY_LINUX'
        if target.kernel == 'Darwin':
            return 'MOZ_MEMORY_DARWIN'
        if target.kernel in ('kFreeBSD', 'FreeBSD', 'NetBSD'):
            return 'MOZ_MEMORY_BSD'
        die('--enable-jemalloc is not supported on %s', target.kernel)

set_define(jemalloc_os_define, '1')

@depends(jemalloc, jemalloc4, target)
def jemalloc_os_define_android(jemalloc, jemalloc4, target):
    if jemalloc and not jemalloc4 and target.os == 'Android':
        return 'MOZ_MEMORY_ANDROID'

set_define(jemalloc_os_define_android, '1')


option('--enable-replace-malloc',
       help='Enable ability to dynamically replace the malloc implementation')

@depends('--enable-replace-malloc', jemalloc, milestone, build_project)
def replace_malloc(value, jemalloc, milestone, build_project):
    # Enable on central for the debugging opportunities it adds.
    if value and not jemalloc:
        die('--enable-replace-malloc requires --enable-jemalloc')
    if value.origin != 'default':
        return bool(value) or None
    if milestone.is_nightly and jemalloc and build_project != 'js':
        return True

set_config('MOZ_REPLACE_MALLOC', replace_malloc)
set_define('MOZ_REPLACE_MALLOC', replace_malloc)
add_old_configure_assignment('MOZ_REPLACE_MALLOC', replace_malloc)