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/.
|
|
|
|
|
|
|
|
|
2021-05-26 19:54:04 +03:00
|
|
|
@depends(target, js_package)
|
|
|
|
def jemalloc_default(target, js_package):
|
|
|
|
if js_package:
|
|
|
|
return False
|
2019-01-18 00:52:01 +03:00
|
|
|
return target.kernel in ("Darwin", "Linux", "WINNT")
|
2016-04-14 11:07:57 +03:00
|
|
|
|
2017-10-12 16:22:59 +03:00
|
|
|
|
2020-10-08 07:07:46 +03:00
|
|
|
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-12-27 07:34:33 +03:00
|
|
|
if milestone.is_early_beta_or_earlier 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
|
|
|
|
2020-10-08 07:07:46 +03:00
|
|
|
option(
|
|
|
|
"--enable-replace-malloc",
|
|
|
|
default=replace_malloc_default,
|
|
|
|
when="--enable-jemalloc",
|
|
|
|
help="{Enable|Disable} ability to dynamically replace the malloc implementation",
|
|
|
|
)
|
2019-01-18 00:52:01 +03:00
|
|
|
|
|
|
|
|
|
|
|
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
|
2019-08-03 03:20:09 +03:00
|
|
|
# crash reporter.
|
2019-12-10 08:28:58 +03:00
|
|
|
@depends(
|
|
|
|
milestone,
|
|
|
|
target,
|
|
|
|
replace_malloc_default,
|
|
|
|
"--enable-replace-malloc",
|
2019-07-03 02:26:11 +03:00
|
|
|
when="--enable-jemalloc",
|
|
|
|
)
|
2019-12-10 08:28:58 +03:00
|
|
|
def phc_default(milestone, target, replace_malloc_default, replace_malloc):
|
2019-07-03 02:26:11 +03:00
|
|
|
if not replace_malloc_default or (
|
|
|
|
replace_malloc.origin != "default" and not replace_malloc
|
|
|
|
):
|
|
|
|
return False
|
2019-12-27 07:34:33 +03:00
|
|
|
# Nightly or early beta only because PHC has a non-negligible performance cost.
|
|
|
|
if not milestone.is_early_beta_or_earlier:
|
2019-12-10 08:28:58 +03:00
|
|
|
return False
|
2019-08-03 03:20:09 +03:00
|
|
|
# Both Linux32 and Win32 have frequent crashes when stack tracing (for
|
|
|
|
# unclear reasons), so PHC is enabled only on 64-bit only in both cases.
|
2019-07-03 02:26:11 +03:00
|
|
|
return (
|
2021-09-10 04:08:53 +03:00
|
|
|
(target.os == "GNU" and target.kernel == "Linux" and target.bitness == 64)
|
|
|
|
or (target.kernel == "WINNT" and target.bitness == 64)
|
|
|
|
or (target.os == "OSX")
|
|
|
|
)
|
2019-07-03 02:26:11 +03:00
|
|
|
|
|
|
|
|
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")
|