summaryrefslogtreecommitdiffstats
path: root/build/templates.mozbuild
diff options
context:
space:
mode:
Diffstat (limited to 'build/templates.mozbuild')
-rw-r--r--build/templates.mozbuild131
1 files changed, 131 insertions, 0 deletions
diff --git a/build/templates.mozbuild b/build/templates.mozbuild
new file mode 100644
index 000000000..85b700c2a
--- /dev/null
+++ b/build/templates.mozbuild
@@ -0,0 +1,131 @@
+# -*- 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):
+ '''Template for Rust libraries.'''
+ Library(name)
+
+ IS_RUST_LIBRARY = True
+
+
+@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
+
+
+include('gecko_templates.mozbuild')
+include('test_templates.mozbuild')