| # Copyright 2016 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. |
| |
| # Generates the FeatureProviders files for extension features files. |
| # The following variables are required: |
| # sources: The features.json files to use. |
| # feature_type: The type of the features to generate, e.g. APIFeature. |
| # method_name: The name of the method to generate, e.g. AddChromeAPIFeatures. |
| # deps/public_deps/visibility: normal meaning |
| template("json_features") { |
| assert(defined(invoker.sources), |
| "\"sources\" must be defined for the $target_name template.") |
| assert(defined(invoker.feature_type), |
| "\"feature_type\" must be defined for the $target_name template.") |
| assert(defined(invoker.method_name), |
| "\"method_name\" must be defined for the $target_name template.") |
| feature_type = invoker.feature_type |
| method_name = invoker.method_name |
| |
| compiler_root = "//tools/json_schema_compiler" |
| base_filename = target_name |
| action_name = "${target_name}_json_features" |
| source_set_name = target_name |
| generated_files = [ |
| "$target_gen_dir/$base_filename.cc", |
| "$target_gen_dir/$base_filename.h", |
| ] |
| |
| action(action_name) { |
| visibility = [ ":$source_set_name" ] |
| sources = invoker.sources |
| script = "$compiler_root/feature_compiler.py" |
| inputs = [ |
| "$compiler_root/code.py", |
| "$compiler_root/json_parse.py", |
| ] |
| outputs = generated_files |
| rebased = rebase_path(sources, root_build_dir) |
| args = [ |
| ".", |
| "$feature_type", |
| "$method_name", |
| rebase_path(target_gen_dir, root_build_dir), |
| rebase_path(root_gen_dir, root_build_dir), |
| "$base_filename", |
| ] + rebased |
| |
| # Add the deps in for the action as well, in case the deps generate the |
| # inputs used by the action. |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| ]) |
| } |
| |
| source_set(target_name) { |
| sources = generated_files |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "visibility", |
| ]) |
| if (!defined(public_deps)) { |
| public_deps = [] |
| } |
| public_deps += [ ":$action_name" ] |
| |
| # Append a dependency on the extensions system. Headers in this target |
| # are included by the feature compiler automatically. |
| if (!defined(deps)) { |
| deps = [] |
| } |
| deps += [ "//extensions/common" ] |
| } |
| } |