Bug 1569017 [wpt PR 18089] - [ElementTiming] Set startTime, a=testonly
[gecko.git] / build / templates.mozbuild
blobf130e2b761fdf8d197bea8b55362d9b3945f8bcb
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
2 # vim: set filetype=python:
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 @template
8 def Binary():
9     '''Generic template for target binaries. Meant to be used by other
10     templates.'''
12     # Add -llog by default, since we use it all over the place.
13     if CONFIG['OS_TARGET'] == 'Android':
14         OS_LIBS += ['log']
17 @template
18 def Program(name):
19     '''Template for program executables.'''
20     PROGRAM = name
22     Binary()
25 @template
26 def SimplePrograms(names, ext='.cpp'):
27     '''Template for simple program executables.
29     Those have a single source with the same base name as the executable.
30     '''
31     SIMPLE_PROGRAMS += names
32     SOURCES += ['%s%s' % (name, ext) for name in names]
34     Binary()
37 @template
38 def CppUnitTests(names, ext='.cpp'):
39     '''Template for C++ unit tests.
41     Those have a single source with the same base name as the executable.
42     '''
43     COMPILE_FLAGS['EXTRA_INCLUDES'] = ['-I%s/dist/include' % TOPOBJDIR,
44                                        '-I%s/dist/include/testing' % TOPOBJDIR]
45     CPP_UNIT_TESTS += names
46     SOURCES += ['%s%s' % (name, ext) for name in names]
48     Binary()
51 @template
52 def Library(name):
53     '''Template for libraries.'''
54     LIBRARY_NAME = name
56 @template
57 def AllowCompilerWarnings():
58     COMPILE_FLAGS['WARNINGS_AS_ERRORS'] = []
60 @template
61 def DisableCompilerWarnings():
62     COMPILE_FLAGS['WARNINGS_CFLAGS'] = []
64 @template
65 def RustLibrary(name, features=None, output_category=None):
66     '''Template for Rust libraries.'''
67     Library(name)
69     IS_RUST_LIBRARY = True
70     # Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
71     AllowCompilerWarnings()
73     # And furthermore, don't even show warnings for them, so they don't regress
74     # the Compiler Warnings build metric
75     # <https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Automated_Performance_Testing_and_Sheriffing/Build_Metrics#compiler_warnings>.
76     DisableCompilerWarnings()
78     if features:
79         RUST_LIBRARY_FEATURES = features
81     if output_category:
82         RUST_LIBRARY_OUTPUT_CATEGORY = output_category
85 @template
86 def SharedLibrary(name, output_category=None):
87     '''Template for shared libraries.'''
88     Library(name)
90     FORCE_SHARED_LIB = True
92     if output_category:
93         SHARED_LIBRARY_OUTPUT_CATEGORY = output_category
95     Binary()
98 @template
99 def Framework(name, output_category=None):
100     '''Template for OSX Frameworks.'''
101     SharedLibrary(name, output_category)
103     IS_FRAMEWORK = True
106 @template
107 def HostProgram(name):
108     '''Template for build tools executables.'''
109     HOST_PROGRAM = name
112 @template
113 def HostSimplePrograms(names, ext='.cpp'):
114     '''Template for simple build tools executables.
116     Those have a single source with the same base name as the executable.
117     '''
118     HOST_SIMPLE_PROGRAMS += names
119     HOST_SOURCES += ['%s%s' % (name.replace('host_', ''), ext)
120         for name in names]
123 @template
124 def HostSharedLibrary(name):
125     '''Template for build tools libraries.'''
126     if name != 'clang-plugin':
127         error('Please make sure host shared library support is complete '
128               'before using for something else than the clang plugin')
130     HOST_LIBRARY_NAME = name
132     FORCE_SHARED_LIB = True
134 @template
135 def HostLibrary(name):
136     '''Template for build tools libraries.'''
137     HOST_LIBRARY_NAME = name
139 @template
140 def HostRustLibrary(name, features=None):
141     '''Template for host Rust libraries.'''
142     HostLibrary(name)
144     IS_RUST_LIBRARY = True
145     # Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
146     AllowCompilerWarnings()
148     if features:
149         HOST_RUST_LIBRARY_FEATURES = features
151 @template
152 def DisableStlWrapping():
153     COMPILE_FLAGS['STL'] = []
155 @template
156 def NoVisibilityFlags():
157     COMPILE_FLAGS['VISIBILITY'] = []
159 @template
160 def ForceInclude(*headers):
161     """Force includes a set of header files in C++ compilations"""
162     if CONFIG['CC_TYPE'] == 'clang-cl':
163         include_flag = '-FI'
164     else:
165         include_flag = '-include'
166     for header in headers:
167         CXXFLAGS += [include_flag, header]
169 include('gecko_templates.mozbuild')
170 include('test_templates.mozbuild')