# 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 # Path to .grd file. # # grit_flags (optional) # List of strings containing extra command-line flags to pass to Grit. # # deps (optional) # visibility (optional) # Normal meaning. # # Example # # grit("my_resources") { # source = "myfile.grd" # source is required. # 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/features.gni") import ("//build/config/ui.gni") grit_defines = [] if (is_chromeos) { grit_defines += [ "-D", "chromeos", "-D", "scale_factors=2x" ] } if (is_desktop_linux) { grit_defines += [ "-D", "desktop_linux" ] } if (is_android) { grit_defines += [ "-t", "android", "-E", "ANDROID_JAVA_TAGGED_ONLY=true", ] } if (enable_extensions) { grit_defines += [ "-D", "enable_extensions" ] } if (enable_plugins) { grit_defines += [ "-D", "enable_plugins" ] } # TODO(GYP) the rest of the grit_defines from the gyp build. 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") assert(!defined(invoker.sources) && !defined(invoker.outputs), "Neither \"sources\" nor \"outputs\" can be defined for the grit " + "template $target_name") # These are all passed as arguments to the script so have to be relative to # the build directory. resource_ids = rebase_path(grit_resource_id_file, root_build_dir) output_dir = rebase_path(target_gen_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. } 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", "$output_dir", source_path, "-f", resource_ids ] + grit_flags, "list lines") # The inputs are relative to the current (build) directory, rebase to # the current one. grit_outputs = rebase_path(grit_outputs_build_rel, ".", root_build_dir) # 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 innter classes so we need to compute it here. target_visibility = ":$target_name" # The current grit setup makes an file in $target_gen_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) { include_dirs = [ target_gen_dir ] visibility = target_visibility } grit_custom_target = target_name + "_grit" action(grit_custom_target) { script = "//tools/grit/grit.py" source_prereqs = grit_inputs outputs = grit_outputs args = [ "-i", source_path, "build", "-f", resource_ids, "-o", output_dir, ] + grit_defines + grit_flags visibility = target_visibility if (defined(invoker.deps)) { deps = invoker.deps } } # 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 grit script running # target rather than this library. deps = [ ":$grit_custom_target" ] direct_dependent_configs = [ ":$grit_config" ] if (defined(invoker.visibility)) { visibility = invoker.visibility } if (defined(invoker.output_name)) { output_name = invoker.output_name } } }