12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
- # 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/.
- @deprecated_option(env='MOZ_JEMALLOC4')
- def moz_jemalloc4(value):
- die('MOZ_JEMALLOC4 is no longer supported')
- option('--enable-jemalloc', env='MOZ_MEMORY',
- help='Replace system 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
- set_config('MOZ_MEMORY', jemalloc)
- set_define('MOZ_MEMORY', jemalloc)
- add_old_configure_assignment('MOZ_MEMORY', jemalloc)
- # 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)
- def jemalloc_for_old_configure(jemalloc):
- return '--%s-jemalloc' % ('enable' if jemalloc else 'disable')
- add_old_configure_arg(jemalloc_for_old_configure)
- @depends(jemalloc, target)
- def jemalloc_os_define(jemalloc, target):
- if jemalloc:
- 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'
- if target.kernel == 'SunOS':
- return 'MOZ_MEMORY_SOLARIS'
- die('--enable-jemalloc is not supported on %s', target.kernel)
- set_define(jemalloc_os_define, '1')
- @depends(jemalloc, target)
- def jemalloc_os_define_android(jemalloc, target):
- if jemalloc 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)
|