js/ffi.configure
author Karl Tomlinson <karlt+@karlt.net>
Fri, 29 Mar 2019 16:12:08 +0000
changeset 467510 973f69d0a81036de9a73b4980755b9bfaa1873f1
parent 453355 3f00314f0fe03d7b9166323326a136349b17b736
permissions -rw-r--r--
Bug 1539039 finish worklet before destination stream is destroyed r=padenot AudioDestinationNode, AudioContext, and Worklet are part of the same cycle. Any of these may be unlinked before another. The unlink process for this cycle is the notification that the worklet will no longer be used, but the worklet uses the destination stream to send a message to release graph thread objects and so must do this before the stream is destroyed. Differential Revision: https://phabricator.services.mozilla.com/D25351

# -*- 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)
def force_system_ffi(target):
    # Pre-emptively move to system ffi for non-tier one platforms.
    if target.cpu not in ('x86', 'x86_64', 'arm', 'aarch64'):
        return True

imply_option('--with-system-ffi', force_system_ffi, "target")

js_option('--with-system-ffi',
          help='Use system libffi (located with pkgconfig)')

use_system_ffi = depends_if('--with-system-ffi')(lambda _: True)

system_ffi = pkg_check_modules('MOZ_FFI', 'libffi > 3.0.9',
                               when=use_system_ffi)

building_ffi = depends(system_ffi)(lambda v: v is None)

set_config('MOZ_SYSTEM_FFI', depends_if(system_ffi)(lambda _: True))

# Target selection, based on ffi/configure.ac.
@depends(target, when=building_ffi)
def ffi_target(target):
    if target.cpu not in ('x86', 'x86_64', 'arm', 'aarch64'):
        die('Building libffi from the tree is not supported on this platform. '
            'Use --with-system-ffi instead.')

    if target.os == 'WINNT':
        target_dir, target_name = {
            'x86_64': ('x86', 'X86_WIN64'),
            'x86': ('x86', 'X86_WIN32'),
            'aarch64': ('aarch64', 'ARM64_WIN64'),
        }[target.cpu]
    elif target.os == 'OSX':
        target_dir = 'x86'
        target_name = 'X86_DARWIN'
    elif target.cpu == 'arm':
        target_dir = 'arm'
        target_name = 'ARM'
    elif target.cpu == 'aarch64':
        target_dir = 'aarch64'
        target_name = 'AARCH64'
    else:
        target_dir = 'x86'
        target_name = target.cpu.upper()

    return namespace(
        name=target_name,
        dir=target_dir
    )

set_config('FFI_TARGET', ffi_target.name)
set_config('FFI_TARGET_DIR', ffi_target.dir)