""" 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, )