# -*- 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/. @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)