1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 # Instantiate grit. This will produce a script target to run grit, and a
6 # static library that compiles the .cc files.
9 # grit("my_resources") {
10 # source = "myfile.grd" # source is required.
11 # grit_flags = [ "-E", "foo=bar" ] # Optional extra flags.
12 # # You can also put deps here if the grit source depends on generated
16 assert(defined(invoker.source),
17 "\"source\" must be defined for the grit template $target_name")
18 assert(!defined(invoker.sources) && !defined(invoker.outputs),
19 "Neither \"sources\" nor \"outputs\" can be defined for the grit " +
20 "template $target_name")
22 grit_info_script = "//tools/grit/grit_info.py"
24 # These are all passed as arguments to the script so have to be relative to
25 # the build directory.
27 rebase_path("//tools/gritsettings/resource_ids", root_build_dir)
28 output_dir = rebase_path(target_gen_dir, root_build_dir)
29 source_path = rebase_path(invoker.source, root_build_dir)
31 if (defined(invoker.grit_flags)) {
32 grit_flags = invoker.grit_flags
34 grit_flags = [] # These are optional so default to empty list.
37 grit_inputs_build_rel = exec_script(grit_info_script,
38 [ "--inputs", source_path, "-f", resource_ids] + grit_flags, "list lines")
39 # The inputs are relative to the current (build) directory, rebase to
41 grit_inputs = rebase_path(grit_inputs_build_rel, root_build_dir)
43 grit_outputs_build_rel = exec_script(grit_info_script,
44 [ "--outputs", "$output_dir", source_path, "-f", resource_ids ] +
47 # The inputs are relative to the current (build) directory, rebase to
49 grit_outputs = rebase_path(grit_outputs_build_rel, root_build_dir)
51 # The current grit setup makes an file in $target_gen_dir/grit/foo.h that
52 # the source code expects to include via "grit/foo.h". It would be nice to
53 # change this to including absolute paths relative to the root gen directory
54 # (like "mycomponent/foo.h"). This config sets up the include path.
55 grit_config = target_name + "_grit_config"
57 include_dirs = [ target_gen_dir ]
60 grit_custom_target = target_name + "_grit"
61 action(grit_custom_target) {
62 script = "//tools/grit/grit.py"
63 source_prereqs = grit_inputs
64 outputs = grit_outputs
66 # TODO(brettw) grit_defines.
68 "-i", source_path, "build",
73 # Inherit deps from template invocation if any.
76 # This is the thing that people actually link with, it must be named the
77 # same as the argument the template was invoked with.
78 static_library(target_name) {
79 # Since we generate a file, we need to be run before the targets that
82 sources = grit_outputs
84 # Deps set on the template invocation will go on the grit script running
85 # target rather than this library.
87 deps = [ ":$grit_custom_target" ]
88 direct_dependent_configs = [ ":$grit_config" ]