46eaab3959
Ran the following commands: find -name "BUILD.bazel" -exec sed -i -e '1iload("//bazel:macros.bzl", "cc_library", "exports_files_legacy")\nexports_files_legacy()' {} + buildifier --lint=fix --mode=fix -r . This had the effect of making sure we can export all of our files in G3 (until we no longer have legacy targets) and making all of our cc_libraries shim-able. bazel/macros.bzl has the human-contributed changes, the rest were mechanical. Change-Id: I8e24e30e74b038cfd072cdbe4078bfd1d213dd46 Bug: skia:13211 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/535359 Reviewed-by: Ben Wagner <bungeman@google.com>
110 lines
4.3 KiB
Python
110 lines
4.3 KiB
Python
"""
|
|
This file contains general helper macros that make our BUILD.bazel files easier to read.
|
|
"""
|
|
|
|
# https://github.com/bazelbuild/bazel-skylib
|
|
load("@bazel_skylib//lib:selects.bzl", _selects = "selects")
|
|
load("@rules_python//python:defs.bzl", _py_binary = "py_binary")
|
|
load("@py_deps//:requirements.bzl", _requirement = "requirement")
|
|
load("@bazel_gazelle//:def.bzl", _gazelle = "gazelle")
|
|
|
|
# re-export symbols that are commonly used or that are not supported in G3
|
|
# (and thus we need to stub out)
|
|
selects = _selects
|
|
py_binary = _py_binary
|
|
requirement = _requirement
|
|
gazelle = _gazelle
|
|
|
|
def select_multi(values_map, default, name = ""):
|
|
"""select() but allowing multiple matches of the keys.
|
|
|
|
select_multi works around a restriction in native select() that prevents multiple
|
|
keys from being matched unless one is a strict subset of another. For some features,
|
|
we allow multiple of that component to be active. For example, with codecs, we let
|
|
the clients mix and match anywhere from 0 built in codecs to all of them.
|
|
|
|
select_multi takes a given map and turns it into several distinct select statements
|
|
that have the effect of using any values associated with any active keys.
|
|
For example, if the following parameters are passed in:
|
|
values_map = {
|
|
":alpha": ["apple", "apricot"],
|
|
":beta": ["banana"],
|
|
":gamma": ["grapefruit"],
|
|
},
|
|
default = []
|
|
it will be unrolled into the following select statements
|
|
[] + select({
|
|
":apple": ["apple", "apricot"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
":beta": ["banana"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
":gamma": ["grapefruit"],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
Args:
|
|
values_map: dictionary of labels to a list of labels, just like select()
|
|
default: list of labels, the value that should be used if any of the options do not match.
|
|
This is typically an empty list
|
|
name: string unused, https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#unnamed-macro
|
|
|
|
Returns:
|
|
A list of values that is filled in by the generated select statements.
|
|
"""
|
|
if len(values_map) == 0:
|
|
return default
|
|
rv = []
|
|
for key, value in values_map.items():
|
|
rv += select({
|
|
key: value,
|
|
"//conditions:default": default,
|
|
})
|
|
return rv
|
|
|
|
def generated_cc_atom(name, enforce_iwyu = False, **kwargs):
|
|
"""A self-annotating label for a generated cc_library for exactly one file.
|
|
|
|
Args:
|
|
name: string, the name of the cc_library
|
|
enforce_iwyu: boolean, if true, this file will fail to compile if the headers to not comply
|
|
with the include-what-you-use standards. This does not affect dependencies nor
|
|
dependents, only the file listed in srcs/hdrs.
|
|
**kwargs: All other arguments are passed verbatim to cc_library
|
|
"""
|
|
if len(kwargs.get("srcs", [])) > 1 or len(kwargs.get("hdrs", [])) > 1:
|
|
fail("Cannot have more than one src or hdr file in generated_cc_atom")
|
|
if len(kwargs.get("srcs", [])) > 0 and len(kwargs.get("hdrs", [])) > 0:
|
|
fail("Cannot set both srcs and hdrs in generated_cc_atom")
|
|
if len(kwargs.get("srcs", [])) == 0 and len(kwargs.get("hdrs", [])) == 0:
|
|
fail("Must set exactly one of srcs or hdrs in generated_cc_atom")
|
|
deps = kwargs.get("deps", [])
|
|
deps.append("//bazel:defines_from_flags")
|
|
kwargs["deps"] = deps
|
|
|
|
features = kwargs.get("features", [])
|
|
if enforce_iwyu:
|
|
features.append("skia_opt_file_into_iwyu")
|
|
native.cc_library(
|
|
name = name,
|
|
features = features,
|
|
**kwargs
|
|
)
|
|
|
|
# buildifier: disable=unnamed-macro
|
|
# buildifier: disable=native-package
|
|
def enforce_iwyu_on_package():
|
|
"""A self-annotating macro to set force_iwyu = True on all rules in this package."""
|
|
native.package(features = ["skia_opt_file_into_iwyu"])
|
|
|
|
# buildifier: disable=unnamed-macro
|
|
def cc_library(**kwargs):
|
|
"""A shim around cc_library that lets us tweak settings for G3 if necessary."""
|
|
native.cc_library(**kwargs)
|
|
|
|
# buildifier: disable=unnamed-macro
|
|
def exports_files_legacy():
|
|
"""A self-annotating macro to export all files in this package for legacy G3 rules."""
|
|
pass
|