2016-07-14 19:16:42 +03:00
|
|
|
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
2016-04-14 11:07:57 +03:00
|
|
|
# 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/.
|
|
|
|
|
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
@depends(target)
|
|
|
|
def jemalloc_default(target):
|
|
|
|
return target.kernel in ('Darwin', 'Linux', 'WINNT')
|
2016-04-14 11:07:57 +03:00
|
|
|
|
2017-10-12 16:22:59 +03:00
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
js_option('--enable-jemalloc', env='MOZ_MEMORY', default=jemalloc_default,
|
|
|
|
help='{Replace|Do not replace} memory allocator with jemalloc')
|
2016-04-14 11:07:57 +03:00
|
|
|
|
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
set_config('MOZ_MEMORY', True, when='--enable-jemalloc')
|
|
|
|
set_define('MOZ_MEMORY', True, when='--enable-jemalloc')
|
|
|
|
add_old_configure_assignment('MOZ_MEMORY', True, when='--enable-jemalloc')
|
2017-10-12 16:22:59 +03:00
|
|
|
|
2016-04-14 12:43:49 +03:00
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
@depends(milestone, build_project)
|
|
|
|
def replace_malloc_default(milestone, build_project):
|
2017-11-15 08:21:15 +03:00
|
|
|
if build_project == 'memory':
|
|
|
|
return True
|
2019-01-18 00:52:01 +03:00
|
|
|
if milestone.is_nightly and build_project != 'js':
|
2016-04-27 05:53:17 +03:00
|
|
|
return True
|
2016-04-14 12:55:01 +03:00
|
|
|
|
2017-10-12 16:22:59 +03:00
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
js_option('--enable-replace-malloc', default=replace_malloc_default,
|
|
|
|
when='--enable-jemalloc',
|
|
|
|
help='{Enable|Disable} ability to dynamically replace the malloc implementation')
|
|
|
|
|
|
|
|
|
|
|
|
set_config('MOZ_REPLACE_MALLOC', True, when='--enable-replace-malloc')
|
|
|
|
set_define('MOZ_REPLACE_MALLOC', True, when='--enable-replace-malloc')
|
2017-11-23 11:24:19 +03:00
|
|
|
|
|
|
|
|
2019-01-18 00:52:01 +03:00
|
|
|
@depends(build_project, when='--enable-replace-malloc')
|
|
|
|
def replace_malloc_static(build_project):
|
2017-11-23 11:24:19 +03:00
|
|
|
# Default to statically linking replace-malloc libraries that can be
|
|
|
|
# statically linked, except when building with --enable-project=memory.
|
2019-01-18 00:52:01 +03:00
|
|
|
if build_project != 'memory':
|
2017-11-23 11:24:19 +03:00
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
set_config('MOZ_REPLACE_MALLOC_STATIC', replace_malloc_static)
|
2019-07-03 02:26:11 +03:00
|
|
|
|
|
|
|
# PHC (Probabilistic Heap Checker)
|
|
|
|
# ==============================================================
|
|
|
|
|
|
|
|
# In general, it only makes sense for PHC to run on the platforms that have a
|
|
|
|
# crash reporter. Currently it only runs on Linux, but not on 32-bit Linux
|
|
|
|
# because stack tracing frequently crashes (for unclear reasons). In the
|
|
|
|
# future, we want it to run on Win64 and Mac as well.
|
|
|
|
@depends(milestone, target, replace_malloc_default, '--enable-replace-malloc',
|
|
|
|
when='--enable-jemalloc')
|
|
|
|
def phc_default(milestone, target, replace_malloc_default, replace_malloc):
|
|
|
|
if not replace_malloc_default or \
|
|
|
|
(replace_malloc.origin != 'default' and not replace_malloc):
|
|
|
|
return False
|
|
|
|
if not milestone.is_nightly:
|
|
|
|
return False
|
|
|
|
return (target.os == 'GNU' and target.kernel == 'Linux' and
|
|
|
|
target.bitness == 64)
|
|
|
|
|
|
|
|
|
2019-07-19 14:28:46 +03:00
|
|
|
option('--enable-phc', env='MOZ_PHC', default=phc_default,
|
2019-07-03 02:26:11 +03:00
|
|
|
when='--enable-jemalloc',
|
|
|
|
help='{Enable|Disable} PHC (Probabilistic Memory Checker). '
|
|
|
|
'Also enables replace-malloc and frame pointers')
|
|
|
|
imply_option('--enable-replace-malloc', True, when='--enable-phc')
|
|
|
|
imply_option('--enable-frame-pointers', True, when='--enable-phc')
|
|
|
|
|
|
|
|
|
|
|
|
set_config('MOZ_PHC', True, when='--enable-phc')
|
|
|
|
|