dawn-cmake/generator/dawn_generator.gni
Corentin Wallez a9a84dfe1e BUILD.gn: Delete stale generated files in Dawn's gen dir.
This normalizes even more the directory structure of generated files in
Dawn and removes stale autogenerated files that could be included
wrongly using a GN action.

See comment on top of dawn_generator.gni in this commit for more
context.

BUG=dawn:22

Change-Id: I8ec038f949c048431b2b643af4462f98c4ae610b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/11361
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2019-09-19 23:30:42 +00:00

119 lines
4.1 KiB
Plaintext

# Copyright 2019 The Dawn Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("../scripts/dawn_overrides_with_defaults.gni")
import("generator_lib.gni")
# Dawn used to put autogenerated files in a lot of different places. When we
# started to move them around, some compilation issues arised because some
# stale include files stayed in the build directory and were picked up.
# To counter this, now Dawn does the following:
#
# 1. The generated output file directory structure has to match the structure
# of the source tree, starting at dawn_gen_root (gen/ or
# gen/third_party/dawn depending on where we are).
# 2. src/include and dawn_gen_root/src/include has to match the structure of
# the source tree too.
# 3. Dawn files must use include relative to src/ or src/include such as
# "dawn/dawn.h" or "dawn_native/backend/BackendStuff.h".
#
# The allowed list below ensure 1). Include directory rules for Dawn ensure 3)
# and 2) is something we need to enforce in code review.
#
# However GN's toolchains automatically add some include directories for us
# which breaks 3) slightly. To avoid stale headers in for example
# dawn_gen_root/src/dawn/dawn/ to be picked up (instead of
# dawn_gen_root/src/dawn), we have a special action that removes files in
# disallowed gen directories.
dawn_allowed_gen_output_dirs = [
"src/dawn/",
"src/dawn_native/",
"src/dawn_native/opengl/",
"src/dawn_wire/client/",
"src/dawn_wire/server/",
"src/dawn_wire/",
"src/include/dawn/",
]
# Template to help invoking Dawn code generators based on generator_lib
#
# dawn_generator("my_target_gen") {
# # The script and generator specific arguments
# script = [ "my_awesome_generator.py" ]
# args = [
# "--be-awesome",
# "yes"
# ]
#
# # The list of expected outputs, generation fails if there's a mismatch
# outputs = [
# "MyAwesomeTarget.cpp",
# "MyAwesomeTarget.h",
# ]
# }
#
# Using the generated files is done like so:
#
# shared_library("my_target") {
# deps = [ ":my_target_gen "]
# sources = get_target_outputs(":my_target_gen")
# }
#
template("dawn_generator") {
generator_lib_action(target_name) {
forward_variables_from(invoker, "*")
# Set arguments required to find the python libraries for the generator
generator_lib_dir = "${dawn_root}/generator"
jinja2_path = dawn_jinja2_dir
# Force Dawn's autogenerated file structure to mirror exactly the source
# tree but start at ${dawn_gen_root} instead of ${dawn_root}
allowed_output_dirs = dawn_allowed_gen_output_dirs
custom_gen_dir = dawn_gen_root
# Make sure that we delete stale autogenerated file in directories that are
# no longer used by code generation to avoid include conflicts.
deps = [ "${dawn_root}/generator:remove_stale_autogen_files" ]
}
}
# Helper generator for calling the generator from dawn.json
#
# dawn_json_generator("my_target_gen") {
# # Which generator target to output
# target = "my_target"
#
# # Also supports `outputs` and `custom_gen_dir` like dawn_generator.
# }
template("dawn_json_generator") {
dawn_generator(target_name) {
script = "${dawn_root}/generator/dawn_json_generator.py"
# The base arguments for the generator: from this dawn.json, generate this
# target using templates in this directory.
args = [
"--dawn-json",
rebase_path("${dawn_root}/dawn.json", root_build_dir),
"--wire-json",
rebase_path("${dawn_root}/dawn_wire.json", root_build_dir),
"--targets",
invoker.target,
]
forward_variables_from(invoker, "*", [ "target" ])
}
}