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/.
9 '''Generic template for target binaries. Meant to be used by other
12 # Add -llog by default, since we use it all over the place.
13 if CONFIG['OS_TARGET'] == 'Android':
19 '''Template for program executables.'''
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.
31 SIMPLE_PROGRAMS += names
32 SOURCES += ['%s%s' % (name, ext) for name in names]
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.
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]
53 '''Template for libraries.'''
57 def AllowCompilerWarnings():
58 COMPILE_FLAGS['WARNINGS_AS_ERRORS'] = []
61 def DisableCompilerWarnings():
62 COMPILE_FLAGS['WARNINGS_CFLAGS'] = []
65 def RustLibrary(name, features=None, output_category=None):
66 '''Template for Rust libraries.'''
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()
79 RUST_LIBRARY_FEATURES = features
82 RUST_LIBRARY_OUTPUT_CATEGORY = output_category
86 def SharedLibrary(name, output_category=None):
87 '''Template for shared libraries.'''
90 FORCE_SHARED_LIB = True
93 SHARED_LIBRARY_OUTPUT_CATEGORY = output_category
99 def Framework(name, output_category=None):
100 '''Template for OSX Frameworks.'''
101 SharedLibrary(name, output_category)
107 def HostProgram(name):
108 '''Template for build tools executables.'''
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.
118 HOST_SIMPLE_PROGRAMS += names
119 HOST_SOURCES += ['%s%s' % (name.replace('host_', ''), ext)
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
135 def HostLibrary(name):
136 '''Template for build tools libraries.'''
137 HOST_LIBRARY_NAME = name
140 def HostRustLibrary(name, features=None):
141 '''Template for host Rust libraries.'''
144 IS_RUST_LIBRARY = True
145 # Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
146 AllowCompilerWarnings()
149 HOST_RUST_LIBRARY_FEATURES = features
152 def DisableStlWrapping():
153 COMPILE_FLAGS['STL'] = []
156 def NoVisibilityFlags():
157 COMPILE_FLAGS['VISIBILITY'] = []
160 def ForceInclude(*headers):
161 """Force includes a set of header files in C++ compilations"""
162 if CONFIG['CC_TYPE'] == 'clang-cl':
165 include_flag = '-include'
166 for header in headers:
167 CXXFLAGS += [include_flag, header]
169 include('gecko_templates.mozbuild')
170 include('test_templates.mozbuild')