Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: build/secondary/tools/grit/grit_rule.gni

Issue 407653003: Hook up .d files and outputs to grit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comments + grit pull Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/secondary/tools/grit/BUILD.gn ('k') | build/secondary/tools/grit/stamp_grit_sources.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/secondary/tools/grit/grit_rule.gni
diff --git a/build/secondary/tools/grit/grit_rule.gni b/build/secondary/tools/grit/grit_rule.gni
index 86a155a7fb12e00bc2a473952dbf431b63f1e4ed..ef3e3d454bf16e43eff00256bc95ebc8b832f964 100644
--- a/build/secondary/tools/grit/grit_rule.gni
+++ b/build/secondary/tools/grit/grit_rule.gni
@@ -10,6 +10,23 @@
# source
# Path to .grd file.
#
+# outputs (optional)
+# List of outputs from grit, relative to the target_gen_dir. If supplied,
+# a call to Grit to compute the outputs can be skipped which will make
+# GN run faster. Grit will verify at build time that this list is correct
+# and will fail if there is a mismatch between the outputs specified by
+# the .grd file and the outputs list here.
+#
+# To get this list, you can look in the .grd file for
+# <output filename="..." and put those filename here. The base directory
+# of the list in Grit and the output list specified in the GN grit target
+# are the same (the target_gen_dir) so you can generally copy the names
+# exactly.
+#
+# To get the list of outputs programatically, run:
+# python tools/grit/grit_info.py --outputs . path/to/your.grd
+# And strip the leading "./" from the output files.
+#
# grit_flags (optional)
# List of strings containing extra command-line flags to pass to Grit.
#
@@ -165,9 +182,6 @@ grit_info_script = "//tools/grit/grit_info.py"
template("grit") {
assert(defined(invoker.source),
"\"source\" must be defined for the grit template $target_name")
- assert(!defined(invoker.sources) && !defined(invoker.outputs),
- "Neither \"sources\" nor \"outputs\" can be defined for the grit " +
- "template $target_name")
if (defined(invoker.resource_ids)) {
resource_ids = invoker.resource_ids
@@ -195,25 +209,37 @@ template("grit") {
grit_flags = [] # These are optional so default to empty list.
}
- grit_inputs_build_rel = exec_script(grit_info_script,
- [ "--inputs", source_path, "-f", resource_ids] + grit_flags, "list lines")
- # The inputs are relative to the current (build) directory, rebase to
- # the current one.
- grit_inputs = rebase_path(grit_inputs_build_rel, ".", root_build_dir) + [
- grit_resource_id_file,
- ]
-
- grit_outputs_build_rel = exec_script(grit_info_script,
- [ "--outputs", "$rebased_output_dir", source_path, "-f", resource_ids ] +
- grit_flags,
- "list lines")
-
- # The names returned by grit are relative to the current (build) directory,
- # but references to files in this template are expected to be relative to the
- # invoking BUILD.gn file's directory. Make it absolute so there's no
- # ambiguity.
- grit_outputs = get_path_info(
- rebase_path(grit_outputs_build_rel, ".", root_build_dir), "abspath")
+ grit_inputs = [ invoker.source ]
+
+ assert_files_flags = []
+ if (defined(invoker.outputs)) {
+ # If the declaration specified outputs, we want to make sure that they
+ # actually match what Grit is writing. We write the list to a file (some
+ # of the output lists are long enough to not fit on a Windows command line)
+ # and ask Grit to verify those are the actual outputs at runtime.
+ asserted_list_file = "$target_out_dir/${target_name}_expected_outputs.txt"
+ write_file(asserted_list_file,
+ rebase_path(invoker.outputs, root_build_dir, target_gen_dir))
+ assert_files_flags += [
+ "--assert-file-list=" + rebase_path(asserted_list_file, root_build_dir),
+ ]
+ grit_outputs = get_path_info(
+ rebase_path(invoker.outputs, ".", target_gen_dir),
+ "abspath")
+ } else {
+ # Ask Grit for the output list.
+ grit_outputs_build_rel = exec_script(grit_info_script,
+ [ "--outputs", "$rebased_output_dir", source_path, "-f", resource_ids ] +
+ grit_flags,
+ "list lines")
+
+ # The names returned by grit are relative to the current (build) directory,
+ # but references to files in this template are expected to be relative to
+ # the invoking BUILD.gn file's directory. Make it absolute so there's no
+ # ambiguity.
+ grit_outputs = get_path_info(
+ rebase_path(grit_outputs_build_rel, ".", root_build_dir), "abspath")
+ }
# The config and the action below get this visibility son only the generated
# source set can depend on them. The variable "target_name" will get
@@ -235,17 +261,21 @@ template("grit") {
script = "//tools/grit/grit.py"
inputs = grit_inputs
outputs = grit_outputs
+ depfile = "$target_out_dir/${target_name}.d"
args = [
"-i", source_path, "build",
"-f", resource_ids,
"-o", rebased_output_dir,
- ] + grit_defines + grit_flags
+ "--depdir", ".",
+ "--depfile", rebase_path(depfile, root_build_dir),
+ ] + grit_defines + grit_flags + assert_files_flags
visibility = target_visibility
+ deps = [ "//tools/grit:grit_sources" ]
if (defined(invoker.deps)) {
- deps = invoker.deps
+ deps += invoker.deps
}
}
« no previous file with comments | « build/secondary/tools/grit/BUILD.gn ('k') | build/secondary/tools/grit/stamp_grit_sources.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698