74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
"""
|
|
THIS IS THE EXTERNAL-ONLY VERSION OF THIS FILE. G3 HAS ITS OWN.
|
|
|
|
The macro defined in this file allows us to generate .cpp files for header files. The content
|
|
is a copy of the header file.
|
|
|
|
This allows us to actually "compile" the header file, which allows tools like IWYU to properly
|
|
analyze a header file on its own.
|
|
|
|
"""
|
|
|
|
def generate_cpp_files_for_headers(name, headers, to_generate):
|
|
"""Generate a filegroup containing generate .cpp files for the given header files
|
|
|
|
Args:
|
|
name: The name of the filegroup to hold the generated files.
|
|
headers: A list of labels that contain the files listed in to_generate (it can contain
|
|
more; they will be ignored).
|
|
to_generate: A list of header files, from anywhere in the Skia source tree, that should
|
|
have a .cpp file generated for them that includes the header. If a header already
|
|
has a .cpp file, it should not be in this list. The generated files will not be
|
|
checked into the Skia repo, they will exist in Bazel's cache folder.
|
|
"""
|
|
rules = []
|
|
for hdr in to_generate:
|
|
cpp = hdr + ".cpp"
|
|
native.genrule(
|
|
name = "gen_" + cpp,
|
|
srcs = headers,
|
|
outs = ["gen/" + cpp],
|
|
# Copy the header as the output .cpp file
|
|
# https://bazel.build/reference/be/make-variables#predefined_genrule_variables
|
|
cmd = "cp %s $@" % hdr,
|
|
)
|
|
rules.append(":gen/" + cpp)
|
|
|
|
native.filegroup(
|
|
name = name,
|
|
srcs = rules,
|
|
)
|
|
|
|
def generate_cpp_files_for_header_list(name, headers, visibility = None):
|
|
"""Generate a filegroup containing generate .cpp files for the given header files
|
|
|
|
Args:
|
|
name: The name of the filegroup to hold the generated files.
|
|
headers: A list of header files, from this package, that should have a .cpp file generated
|
|
for them that includes the header. If a header already has a .cpp file, it can be
|
|
generally be in this list, it will just get analyzed twice (although this sometimes
|
|
tickles bugs with IWYU). The generated files will not be checked into the Skia
|
|
repo, they will exist in Bazel's cache folder.
|
|
visibility: A list of packages which can use the generated filegroup. Defaults to private.
|
|
"""
|
|
if not visibility:
|
|
visibility = ["//visibility:private"]
|
|
rules = []
|
|
for hdr in headers:
|
|
cpp = hdr + ".cpp"
|
|
native.genrule(
|
|
name = "gen_" + name + cpp,
|
|
srcs = [hdr],
|
|
outs = ["gen_" + name + "/" + cpp],
|
|
# Copy the header as the output .cpp file
|
|
# https://bazel.build/reference/be/make-variables#predefined_genrule_variables
|
|
cmd = "cp $< $@",
|
|
)
|
|
rules.append(":gen_" + name + "/" + cpp)
|
|
|
|
native.filegroup(
|
|
name = name,
|
|
srcs = rules,
|
|
visibility = visibility,
|
|
)
|