DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (cdf352f02ac4)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
# -*- Mode: python; c-basic-offset: 4; 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/.

# We support C++14, but we don't want to enable the sized deallocation
# facilities in C++14 yet.
check_and_add_gcc_flag('-fno-sized-deallocation', compiler=cxx_compiler)
# Likewise for C++17 and aligned allocation.  It's not immediately obvious
# from the clang and GCC documentation, but they both support this.
check_and_add_gcc_flag('-fno-aligned-new', compiler=cxx_compiler)

# Please keep these last in this file.
add_old_configure_assignment('_COMPILATION_CFLAGS', compilation_flags.cflags)
add_old_configure_assignment(
    '_COMPILATION_CXXFLAGS', compilation_flags.cxxflags)
add_old_configure_assignment(
    '_COMPILATION_HOST_CFLAGS', compilation_flags.host_cflags)
add_old_configure_assignment(
    '_COMPILATION_HOST_CXXFLAGS', compilation_flags.host_cxxflags)


@depends(rust_compile_flags, rust_warning_flags)
def rust_flags(compile_flags, warning_flags):
    return compile_flags + warning_flags

set_config('MOZ_RUST_DEFAULT_FLAGS', rust_flags)


js_option('--disable-new-pass-manager',
          help='Use the legacy LLVM pass manager in clang builds')

@depends('--enable-new-pass-manager', c_compiler, host, target, 'MOZ_PGO', lto.enabled,
         enable_fuzzing)
def new_pass_manager_flags(enabled, compiler, host, target, pgo, lto, enable_fuzzing):
    if host.os == 'OSX':
        # Some native Mac builds hang with the new pass manager. Given the
        # inability to test in CI, don't take the risk of further breakage.
        return None
    if target.os == 'OSX' and not pgo:
        # Also disable when cross-compiling to Mac, because plain-ish opt
        # builds hang. Variants like asan and ccov work fine, but it would be
        # too tedious to test them all here. PGO is the only thing that matters
        # enough to make an exception for.
        return None
    if target.os == 'WINNT' and target.cpu == 'aarch64' and not lto:
        # Building without LTO on aarch64-windows fails on some large functions
        # because clang doesn't know how to split SEH unwind info.
        return None
    if enable_fuzzing and compiler.version < '10.0.0':
        # Clang 9 does not seem to play well with libFuzzer
        return None
    if enabled and compiler.version >= '9.0.0':
        if compiler.type == 'clang':
            return ['-fexperimental-new-pass-manager']
        elif compiler.type == 'clang-cl':
            return ['-Xclang', '-fexperimental-new-pass-manager']

set_config('MOZ_NEW_PASS_MANAGER_FLAGS', new_pass_manager_flags)