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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..652053501544abbee127eee8cfdf36b94c298b5f |
--- /dev/null |
+++ b/build/secondary/tools/grit/grit_rule.gni |
@@ -0,0 +1,482 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+# Instantiate grit. This will produce a script target to run grit, and a |
+# static library that compiles the .cc files. |
+# |
+# Parameters |
+# |
+# source (required) |
+# Path to .grd file. |
+# |
+# outputs (required) |
+# List of outputs from grit, relative to the target_gen_dir. 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. |
+# |
+# defines (optional) |
+# Extra defines to pass to grit (on top of the global grit_defines list). |
+# |
+# grit_flags (optional) |
+# List of strings containing extra command-line flags to pass to Grit. |
+# |
+# resource_ids (optional) |
+# Path to a grit "firstidsfile". Default is |
+# //tools/gritsettings/resource_ids. Set to "" to use the value specified |
+# in the <grit> nodes of the processed files. |
+# |
+# output_dir (optional) |
+# Directory for generated files. If you specify this, you will often |
+# want to specify output_name if the target name is not particularly |
+# unique, since this can cause files from multiple grit targets to |
+# overwrite each other. |
+# |
+# output_name (optiona) |
+# Provide an alternate base name for the generated files, like the .d |
+# files. Normally these are based on the target name and go in the |
+# output_dir, but if multiple targets with the same name end up in |
+# the same output_dir, they can collide. |
+# |
+# depfile_dir (optional) |
+# If set, used to store the depfile and corresponding stamp file. |
+# Defaults to output_dir |
+# |
+# use_qualified_include (optional) |
+# If set, output_dir is not added to include_dirs. |
+# |
+# configs (optional) |
+# List of additional configs to be applied to the generated target. |
+# deps (optional) |
+# inputs (optional) |
+# List of additional files, required for grit to process source file. |
+# visibility (optional) |
+# Normal meaning. |
+# |
+# Example |
+# |
+# grit("my_resources") { |
+# # Source and outputs are required. |
+# source = "myfile.grd" |
+# outputs = [ |
+# "foo_strings.h", |
+# "foo_strings.pak", |
+# ] |
+# |
+# grit_flags = [ "-E", "foo=bar" ] # Optional extra flags. |
+# # You can also put deps here if the grit source depends on generated |
+# # files. |
+# } |
+import("//build/config/chrome_build.gni") |
+import("//build/config/crypto.gni") |
+import("//build/config/features.gni") |
+import("//build/config/ui.gni") |
+ |
+grit_defines = [] |
+ |
+# Mac and iOS want Title Case strings. |
+use_titlecase_in_grd_files = is_mac || is_ios |
+if (use_titlecase_in_grd_files) { |
+ grit_defines += [ |
+ "-D", |
+ "use_titlecase", |
+ ] |
+} |
+ |
+if (is_chrome_branded) { |
+ grit_defines += [ |
+ "-D", |
+ "_google_chrome", |
+ "-E", |
+ "CHROMIUM_BUILD=google_chrome", |
+ ] |
+} else { |
+ grit_defines += [ |
+ "-D", |
+ "_chromium", |
+ "-E", |
+ "CHROMIUM_BUILD=chromium", |
+ ] |
+} |
+ |
+if (is_chromeos) { |
+ grit_defines += [ |
+ "-D", |
+ "chromeos", |
+ "-D", |
+ "scale_factors=2x", |
+ ] |
+} |
+ |
+if (is_desktop_linux) { |
+ grit_defines += [ |
+ "-D", |
+ "desktop_linux", |
+ ] |
+} |
+ |
+if (toolkit_views) { |
+ grit_defines += [ |
+ "-D", |
+ "toolkit_views", |
+ ] |
+} |
+ |
+if (use_aura) { |
+ grit_defines += [ |
+ "-D", |
+ "use_aura", |
+ ] |
+} |
+ |
+if (use_ash) { |
+ grit_defines += [ |
+ "-D", |
+ "use_ash", |
+ ] |
+} |
+ |
+if (use_nss_certs) { |
+ grit_defines += [ |
+ "-D", |
+ "use_nss_certs", |
+ ] |
+} |
+ |
+if (use_ozone) { |
+ grit_defines += [ |
+ "-D", |
+ "use_ozone", |
+ ] |
+} |
+ |
+if (enable_image_loader_extension) { |
+ grit_defines += [ |
+ "-D", |
+ "image_loader_extension", |
+ ] |
+} |
+ |
+if (is_android) { |
+ grit_defines += [ |
+ "-t", |
+ "android", |
+ "-E", |
+ "ANDROID_JAVA_TAGGED_ONLY=true", |
+ ] |
+} |
+ |
+if (is_mac || is_ios) { |
+ grit_defines += [ |
+ "-D", |
+ "scale_factors=2x", |
+ ] |
+} |
+ |
+if (is_ios) { |
+ grit_defines += [ |
+ "-t", |
+ "ios", |
+ |
+ # iOS uses a whitelist to filter resources. |
+ "-w", |
+ rebase_path("//build/ios/grit_whitelist.txt", root_build_dir), |
+ ] |
+} |
+ |
+if (enable_extensions) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_extensions", |
+ ] |
+} |
+if (enable_media_router) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_media_router", |
+ ] |
+} |
+if (enable_plugins) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_plugins", |
+ ] |
+} |
+if (enable_basic_printing || enable_print_preview) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_printing", |
+ ] |
+ if (enable_print_preview) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_print_preview", |
+ ] |
+ } |
+} |
+if (enable_themes) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_themes", |
+ ] |
+} |
+if (enable_app_list) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_app_list", |
+ ] |
+} |
+if (enable_settings_app) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_settings_app", |
+ ] |
+} |
+if (enable_google_now) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_google_now", |
+ ] |
+} |
+ |
+# Note: use_concatenated_impulse_responses is omitted. It is never used and |
+# should probably be removed from GYP build. |
+if (enable_webrtc) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_webrtc", |
+ ] |
+} |
+if (enable_hangout_services_extension) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_hangout_services_extension", |
+ ] |
+} |
+if (enable_task_manager) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_task_manager", |
+ ] |
+} |
+if (enable_notifications) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_notifications", |
+ ] |
+} |
+if (enable_wifi_bootstrapping) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_wifi_bootstrapping", |
+ ] |
+} |
+if (enable_service_discovery) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_service_discovery", |
+ ] |
+} |
+if (mac_views_browser) { |
+ grit_defines += [ |
+ "-D", |
+ "mac_views_browser", |
+ ] |
+} |
+if (enable_topchrome_md) { |
+ grit_defines += [ |
+ "-D", |
+ "enable_topchrome_md", |
+ ] |
+} |
+ |
+grit_resource_id_file = "//tools/gritsettings/resource_ids" |
+grit_info_script = "//tools/grit/grit_info.py" |
+ |
+template("grit") { |
+ assert(defined(invoker.source), |
+ "\"source\" must be defined for the grit template $target_name") |
+ |
+ grit_inputs = [ invoker.source ] |
+ |
+ if (defined(invoker.resource_ids)) { |
+ resource_ids = invoker.resource_ids |
+ } else { |
+ resource_ids = grit_resource_id_file |
+ } |
+ if (resource_ids != "") { |
+ # The script depends on the ID file. Only add this dependency if the ID |
+ # file is specified. |
+ grit_inputs += [ resource_ids ] |
+ } |
+ |
+ if (defined(invoker.output_dir)) { |
+ output_dir = invoker.output_dir |
+ } else { |
+ output_dir = target_gen_dir |
+ } |
+ |
+ if (defined(invoker.output_name)) { |
+ grit_output_name = invoker.output_name |
+ } else { |
+ grit_output_name = target_name |
+ } |
+ |
+ if (defined(invoker.depfile_dir)) { |
+ depfile_dir = invoker.depfile_dir |
+ } else { |
+ depfile_dir = output_dir |
+ } |
+ |
+ # These are all passed as arguments to the script so have to be relative to |
+ # the build directory. |
+ if (resource_ids != "") { |
+ resource_ids = rebase_path(resource_ids, root_build_dir) |
+ } |
+ rebased_output_dir = rebase_path(output_dir, root_build_dir) |
+ source_path = rebase_path(invoker.source, root_build_dir) |
+ |
+ if (defined(invoker.grit_flags)) { |
+ grit_flags = invoker.grit_flags |
+ } else { |
+ grit_flags = [] # These are optional so default to empty list. |
+ } |
+ |
+ assert_files_flags = [] |
+ |
+ # We want to make sure the declared outputs 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/${grit_output_name}_expected_outputs.txt" |
+ write_file(asserted_list_file, |
+ rebase_path(invoker.outputs, root_build_dir, output_dir)) |
+ assert_files_flags += [ "--assert-file-list=" + |
+ rebase_path(asserted_list_file, root_build_dir) ] |
+ grit_outputs = |
+ get_path_info(rebase_path(invoker.outputs, ".", output_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 |
+ # overwritten inside the inner classes so we need to compute it here. |
+ target_visibility = [ ":$target_name" ] |
+ |
+ # The current grit setup makes an file in $output_dir/grit/foo.h that |
+ # the source code expects to include via "grit/foo.h". It would be nice to |
+ # change this to including absolute paths relative to the root gen directory |
+ # (like "mycomponent/foo.h"). This config sets up the include path. |
+ grit_config = target_name + "_grit_config" |
+ config(grit_config) { |
+ if (!defined(invoker.use_qualified_include) || |
+ !invoker.use_qualified_include) { |
+ include_dirs = [ output_dir ] |
+ } |
+ visibility = target_visibility |
+ } |
+ |
+ grit_custom_target = target_name + "_grit" |
+ action(grit_custom_target) { |
+ script = "//tools/grit/grit.py" |
+ inputs = grit_inputs |
+ |
+ depfile = "$depfile_dir/${grit_output_name}_stamp.d" |
+ outputs = [ "${depfile}.stamp" ] + grit_outputs |
+ |
+ args = [ |
+ "-i", |
+ source_path, |
+ "build", |
+ ] |
+ if (resource_ids != "") { |
+ args += [ |
+ "-f", |
+ resource_ids, |
+ ] |
+ } |
+ args += [ |
+ "-o", |
+ rebased_output_dir, |
+ "--depdir", |
+ ".", |
+ "--depfile", |
+ rebase_path(depfile, root_build_dir), |
+ "--write-only-new=1", |
+ "--depend-on-stamp", |
+ ] + grit_defines |
+ |
+ # Add extra defines with -D flags. |
+ if (defined(invoker.defines)) { |
+ foreach(i, invoker.defines) { |
+ args += [ |
+ "-D", |
+ i, |
+ ] |
+ } |
+ } |
+ |
+ args += grit_flags + assert_files_flags |
+ |
+ if (defined(invoker.visibility)) { |
+ # This needs to include both what the invoker specified (since they |
+ # probably include generated headers from this target), as well as the |
+ # generated source set (since there's no guarantee that the visibility |
+ # specified by the invoker includes our target). |
+ # |
+ # Only define visibility at all if the invoker specified it. Otherwise, |
+ # we want to keep the public "no visibility specified" default. |
+ visibility = target_visibility + invoker.visibility |
+ } |
+ |
+ deps = [ |
+ "//tools/grit:grit_sources", |
+ ] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ if (defined(invoker.inputs)) { |
+ inputs += invoker.inputs |
+ } |
+ } |
+ |
+ # This is the thing that people actually link with, it must be named the |
+ # same as the argument the template was invoked with. |
+ source_set(target_name) { |
+ # Since we generate a file, we need to be run before the targets that |
+ # depend on us. |
+ sources = grit_outputs |
+ |
+ # Deps set on the template invocation will go on the action that runs |
+ # grit above rather than this library. This target needs to depend on the |
+ # action publicly so other scripts can take the outputs from the grit |
+ # script as inputs. |
+ public_deps = [ |
+ ":$grit_custom_target", |
+ ] |
+ public_configs = [ ":$grit_config" ] |
+ |
+ if (defined(invoker.public_configs)) { |
+ public_configs += invoker.public_configs |
+ } |
+ |
+ if (defined(invoker.configs)) { |
+ configs += invoker.configs |
+ } |
+ |
+ if (defined(invoker.visibility)) { |
+ visibility = invoker.visibility |
+ } |
+ output_name = grit_output_name |
+ } |
+} |