build/templates.mozbuild
author sotaro <sotaro.ikeda.g@gmail.com>
Thu, 23 Mar 2017 11:26:24 +0900
changeset 349186 436d2138f6fa64f53b8822a3295f78ee6a4f91c2
parent 344596 3c3ffbed3a4b22e613f0912c2ecb0378e7f8a35e
child 367451 6293a69590dcbd03df360907a671eb67750f3755
permissions -rw-r--r--
Bug 1349465 - Ensure we don't enable WebRender if the GPU process is disabled r=kats gfxWindowsPlatform overrides InitAcceleration, and the override calls InitGPUProcessSupport, which may disable the GPU process. Therefore, in order to capture this scenario, we need to initialize WebRender after the subclass implementation has run, rather than at the end of the base class implementation, which is before InitGPUProcessSupport has run.

# -*- 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/.

@template
def Binary():
    '''Generic template for target binaries. Meant to be used by other
    templates.'''

    if CONFIG['MOZ_LIBSTDCXX_TARGET_VERSION']:
        USE_LIBS += ['stdc++compat']

    # Ideally, we'd support not adding this to the LIB_IS_C_ONLY case,
    # but that variable is actually only set in db/sqlite/src, which
    # doesn't build a shared library on the relevant platforms anyways.
    # Eventually, though, we should detect LIB_IS_C_ONLY based on the
    # associated SOURCES (and there might actually be places where we
    # haven't set it but should have).
    if CONFIG['STLPORT_LIBS']:
        OS_LIBS += [CONFIG['STLPORT_LIBS']]


@template
def Program(name):
    '''Template for program executables.'''
    PROGRAM = name

    Binary()


@template
def SimplePrograms(names, ext='.cpp'):
    '''Template for simple program executables.

    Those have a single source with the same base name as the executable.
    '''
    SIMPLE_PROGRAMS += names
    SOURCES += ['%s%s' % (name, ext) for name in names]

    Binary()


@template
def CppUnitTests(names, ext='.cpp'):
    '''Template for C++ unit tests.

    Those have a single source with the same base name as the executable.
    '''
    CPP_UNIT_TESTS += names
    SOURCES += ['%s%s' % (name, ext) for name in names]

    Binary()


@template
def Library(name):
    '''Template for libraries.'''
    LIBRARY_NAME = name


@template
def RustLibrary(name, features=None, target_dir=None):
    '''Template for Rust libraries.'''
    Library(name)

    IS_RUST_LIBRARY = True

    if features:
        RUST_LIBRARY_FEATURES = features

    if target_dir:
        RUST_LIBRARY_TARGET_DIR = target_dir


@template
def SharedLibrary(name):
    '''Template for shared libraries.'''
    Library(name)

    FORCE_SHARED_LIB = True

    Binary()


@template
def Framework(name):
    '''Template for OSX Frameworks.'''
    SharedLibrary(name)

    IS_FRAMEWORK = True


@template
def HostStdCppCompat():
    '''Template for libstdc++ compatibility for host binaries.'''

    if CONFIG['MOZ_LIBSTDCXX_HOST_VERSION']:
        HOST_USE_LIBS += ['host_stdc++compat']


@template
def HostProgram(name, c_only=False):
    '''Template for build tools executables.'''
    HOST_PROGRAM = name

    # With context-based templates, this won't be needed anymore, and will
    # work better than relying on the caller setting it, but at the moment,
    # this is the best we have. And it doesn't matter /that/ much, so there's
    # really only one place using this, where it does matter to avoid the
    # extra dependency (because it creates a circular one).
    if not c_only:
        HostStdCppCompat()


@template
def HostSimplePrograms(names, ext='.cpp'):
    '''Template for simple build tools executables.

    Those have a single source with the same base name as the executable.
    '''
    HOST_SIMPLE_PROGRAMS += names
    HOST_SOURCES += ['%s%s' % (name.replace('host_', ''), ext)
        for name in names]

    HostStdCppCompat()


@template
def HostLibrary(name):
    '''Template for build tools libraries.'''
    HOST_LIBRARY_NAME = name

@template
def HostRustLibrary(name, features=None):
    '''Template for host Rust libraries.'''
    HostLibrary(name)

    IS_RUST_LIBRARY = True

    if features:
        HOST_RUST_LIBRARY_FEATURES = features


include('gecko_templates.mozbuild')
include('test_templates.mozbuild')