mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
7978cd2fe4
In conjunction with the cc crate changes in https://github.com/alexcrichton/cc-rs/pull/342 (which I'll land in https://phabricator.services.mozilla.com/D4699), this hides warnings generated by C code in Rust crates (by removing warnings flags from CFLAGS when compiling Rust libraries). MozReview-Commit-ID: 9CZgLGbWjbA Differential Revision: https://phabricator.services.mozilla.com/D3939 --HG-- extra : moz-landing-system : lando
174 lines
4.4 KiB
Python
174 lines
4.4 KiB
Python
# -*- 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.'''
|
|
|
|
# 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 AllowCompilerWarnings():
|
|
COMPILE_FLAGS['WARNINGS_AS_ERRORS'] = []
|
|
|
|
@template
|
|
def DisableCompilerWarnings():
|
|
COMPILE_FLAGS['WARNINGS_CFLAGS'] = []
|
|
|
|
@template
|
|
def RustLibrary(name, features=None, target_dir=None, output_category=None):
|
|
'''Template for Rust libraries.'''
|
|
Library(name)
|
|
|
|
IS_RUST_LIBRARY = True
|
|
# Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
|
|
AllowCompilerWarnings()
|
|
|
|
# And furthermore, don't even show warnings for them, so they don't regress
|
|
# the Compiler Warnings build metric
|
|
# <https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Automated_Performance_Testing_and_Sheriffing/Build_Metrics#compiler_warnings>.
|
|
DisableCompilerWarnings()
|
|
|
|
if features:
|
|
RUST_LIBRARY_FEATURES = features
|
|
|
|
if target_dir:
|
|
RUST_LIBRARY_TARGET_DIR = target_dir
|
|
|
|
if output_category:
|
|
RUST_LIBRARY_OUTPUT_CATEGORY = output_category
|
|
|
|
|
|
@template
|
|
def SharedLibrary(name, output_category=None):
|
|
'''Template for shared libraries.'''
|
|
Library(name)
|
|
|
|
FORCE_SHARED_LIB = True
|
|
|
|
if output_category:
|
|
SHARED_LIBRARY_OUTPUT_CATEGORY = output_category
|
|
|
|
Binary()
|
|
|
|
|
|
@template
|
|
def Framework(name, output_category=None):
|
|
'''Template for OSX Frameworks.'''
|
|
SharedLibrary(name, output_category)
|
|
|
|
IS_FRAMEWORK = True
|
|
|
|
|
|
@template
|
|
def HostProgram(name):
|
|
'''Template for build tools executables.'''
|
|
HOST_PROGRAM = name
|
|
|
|
|
|
@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]
|
|
|
|
|
|
@template
|
|
def HostSharedLibrary(name):
|
|
'''Template for build tools libraries.'''
|
|
if name != 'clang-plugin':
|
|
error('Please make sure host shared library support is complete '
|
|
'before using for something else than the clang plugin')
|
|
|
|
HOST_LIBRARY_NAME = name
|
|
|
|
FORCE_SHARED_LIB = True
|
|
|
|
@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
|
|
# Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
|
|
AllowCompilerWarnings()
|
|
|
|
if features:
|
|
HOST_RUST_LIBRARY_FEATURES = features
|
|
|
|
@template
|
|
def DisableStlWrapping():
|
|
COMPILE_FLAGS['STL'] = []
|
|
|
|
@template
|
|
def NoVisibilityFlags():
|
|
COMPILE_FLAGS['VISIBILITY'] = []
|
|
|
|
@template
|
|
def ForceInclude(*headers):
|
|
"""Force includes a set of header files in C++ compilations"""
|
|
if CONFIG['CC_TYPE'] in ('msvc', 'clang-cl'):
|
|
include_flag = '-FI'
|
|
else:
|
|
include_flag = '-include'
|
|
for header in headers:
|
|
CXXFLAGS += [include_flag, header]
|
|
|
|
include('gecko_templates.mozbuild')
|
|
include('test_templates.mozbuild')
|