diff options
Diffstat (limited to 'build/moz.configure/memory.configure')
-rw-r--r-- | build/moz.configure/memory.configure | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/build/moz.configure/memory.configure b/build/moz.configure/memory.configure new file mode 100644 index 0000000000..4368ad8c86 --- /dev/null +++ b/build/moz.configure/memory.configure @@ -0,0 +1,120 @@ +# -*- 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/. + + +@depends(target, js_package) +def jemalloc_default(target, js_package): + if js_package: + return False + return target.kernel in ("Darwin", "Linux", "WINNT") + + +option( + "--enable-jemalloc", + env="MOZ_MEMORY", + default=jemalloc_default, + help="{Replace|Do not replace} memory allocator with jemalloc", +) + + +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") + + +@depends(milestone, build_project) +def replace_malloc_default(milestone, build_project): + if build_project == "memory": + return True + if milestone.is_early_beta_or_earlier and build_project != "js": + return True + + +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") + + +@depends(build_project, when="--enable-replace-malloc") +def replace_malloc_static(build_project): + # Default to statically linking replace-malloc libraries that can be + # statically linked, except when building with --enable-project=memory. + if build_project != "memory": + return True + + +set_config("MOZ_REPLACE_MALLOC_STATIC", replace_malloc_static) + +# PHC (Probabilistic Heap Checker) +# ============================================================== + + +# In general, it only makes sense for PHC to run on the platforms that have a +# crash reporter. +@depends( + build_project, + target, + when="--enable-jemalloc", +) +def phc_default(build_project, target): + if build_project == "js": + return False + + # 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. + return (target.cpu in ("x86_64", "aarch64")) and ( + (target.os == "GNU" and target.kernel == "Linux") + or (target.kernel == "WINNT") + or (target.os == "OSX") + ) + + +option( + "--enable-phc", + env="MOZ_PHC", + default=phc_default, + when="--enable-jemalloc", + help="{Enable|Disable} PHC (Probabilistic Memory Checker). " + "Also enables frame pointers when needed", +) + +set_config("MOZ_PHC", True, when="--enable-phc") + + +# PHC parses stacks using frame pointers on these systems. +@depends("--enable-phc", target, have_unwind, when="--enable-jemalloc") +def phc_implies_frame_pointers(phc, target, have_unwind): + if not phc: + return False + + # This should be kept in sync with the ifdefs in memory/build/PHC.cpp + # that control stack walking. + # This is true for the first two options in PHC.cpp + if (target.os == "WINNT" and target.cpu == "x86") or target.kernel == "Darwin": + return True + + # This should match the #defines in mozglue/misc/StackWalk.cpp + if (target.cpu in ("x86", "ppc")) and (target.kernel in ("Darwin", "Linux")): + return not have_unwind + + return False + + +imply_option("--enable-frame-pointers", True, when=phc_implies_frame_pointers) + + +with only_when(depends(target.os)(lambda os: os != "WINNT")): + set_define("HAVE_STRNDUP", check_symbol("strndup")) + set_define("HAVE_POSIX_MEMALIGN", check_symbol("posix_memalign")) + set_define("HAVE_MEMALIGN", check_symbol("memalign")) + set_define("HAVE_MALLOC_USABLE_SIZE", check_symbol("malloc_usable_size")) |