# -*- 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']] # Add -llog by default, since we use it all over the place. if CONFIG['OS_TARGET'] == 'Android': OS_LIBS += ['log'] @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. ''' COMPILE_FLAGS['EXTRA_INCLUDES'] = ['-I%s/dist/include' % TOPOBJDIR, '-I%s/dist/include/testing' % TOPOBJDIR] 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 @template def DisableStlWrapping(): COMPILE_FLAGS['STL'] = [] @template def NoVisibilityFlags(): COMPILE_FLAGS['VISIBILITY'] = [] @template def RustTest(name, features=None): RUST_TEST = name if features: RUST_TEST_FEATURES = features include('gecko_templates.mozbuild') include('test_templates.mozbuild')