Index: build/json_schema.gni |
diff --git a/build/json_schema.gni b/build/json_schema.gni |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4f5c712c7163166c32037c05e02f4d20639c1c5a |
--- /dev/null |
+++ b/build/json_schema.gni |
@@ -0,0 +1,140 @@ |
+# 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. |
+ |
+# TODO(brettw) this should maybe be moved to tools/json_schema_compiler/ where |
+# the script is. Currently, we keep it in the build directory with the gyp |
+# version to make it easier to find. |
+# |
+# Or, considering the fact that it references the chrome/extensions directory, |
+# it should possibly be moved there. |
jamesr
2014/06/20 21:45:08
that would be my vote
|
+ |
+_api_gen_dir = "//tools/json_schema_compiler" |
+_api_gen = "$_api_gen_dir/compiler.py" |
+_impl_dir = "chrome/browser/extensions/api" |
+ |
+_python_files = [ |
+ "$_api_gen_dir/cc_generator.py", |
+ "$_api_gen_dir/code.py", |
+ "$_api_gen_dir/compiler.py", |
+ "$_api_gen_dir/cpp_bundle_generator.py", |
+ "$_api_gen_dir/cpp_type_generator.py", |
+ "$_api_gen_dir/cpp_util.py", |
+ "$_api_gen_dir/h_generator.py", |
+ "$_api_gen_dir/idl_schema.py", |
+ "$_api_gen_dir/json_schema.py", |
+ "$_api_gen_dir/model.py", |
+ "$_api_gen_dir/util_cc_helper.py", |
+] |
+ |
+# Runs the schema compiler over a list of sources. |
+# |
+# Parameters: |
+# sources |
+# The .json and .idl files to compile. |
+# |
+# root_namespace |
+# The C++ namespace that all generated files go under. |
+# |
+# deps, visibility (optional) |
+template("json_schema_compile") { |
+ assert(defined(invoker.sources), "Need sources for $target_name") |
+ assert(defined(invoker.root_namespace), |
+ "Need root_namespace defined for $target_name") |
+ |
+ action_name = "${target_name}_action" |
+ source_set_name = target_name |
+ |
+ action_foreach(action_name) { |
+ visibility = ":$source_set_name" |
+ script = _api_gen |
+ |
+ source_prereqs = _python_files |
+ sources = invoker.sources |
+ |
+ # TODO(GYP) We should probably be using {{source_gen_dir}} instead of |
+ # $target_gen_dir but support for this string isn't pushed out in GN |
+ # binaries yet. Replace this when it is. |
+ outputs = [ |
+ "$target_gen_dir/{{source_name_part}}.cc", |
+ "$target_gen_dir/{{source_name_part}}.h", |
+ ] |
+ |
+ args = [ |
+ "--root", rebase_path("//", root_build_dir), |
+ "--destdir", rebase_path(root_gen_dir, root_build_dir), |
+ "--namespace", invoker.root_namespace, |
+ "--generator=cpp", |
+ "--impl-dir", _impl_dir, |
+ "{{source}}", |
+ ] |
+ } |
+ |
+ source_set(source_set_name) { |
+ if (defined(invoker.visibility)) { |
+ visibility = invoker.visibility |
+ } |
+ |
+ sources = get_target_outputs(":$action_name") |
+ |
+ deps = [ ":$action_name" ] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ } |
+} |
+ |
+# Runs the schema bundler. |
+# |
+# Parameters: |
+# sources |
+# The .json and .idl files to bundle. |
+# |
+# root_namespace |
+# The C++ namespace that all generated files go under. |
+# |
+# deps, visibility (optional) |
+template("json_schema_bundle") { |
+ assert(defined(invoker.sources), "Need sources for $target_name") |
+ assert(defined(invoker.root_namespace), |
+ "Need root_namespace defined for $target_name") |
+ |
+ action_name = "${target_name}_action" |
+ source_set_name = target_name |
+ |
+ action(action_name) { |
+ visibility = ":$source_set_name" |
+ script = _api_gen |
+ |
+ source_prereqs = _python_files |
+ source_prereqs += invoker.sources |
+ |
+ outputs = [ |
+ "$target_gen_dir/generated_api.h", |
+ "$target_gen_dir/generated_api.cc", |
+ "$target_gen_dir/generated_schemas.h", |
+ "$target_gen_dir/generated_schemas.cc", |
+ ] |
+ |
+ args = [ |
+ "--root", rebase_path("//", root_build_dir), |
+ "--destdir", rebase_path(root_gen_dir, root_build_dir), |
+ "--namespace", invoker.root_namespace, |
+ "--generator=cpp-bundle", |
+ "--impl-dir", _impl_dir, |
+ ] + rebase_path(invoker.sources, root_build_dir) |
+ } |
+ |
+ source_set(source_set_name) { |
+ if (defined(invoker.visibility)) { |
+ visibility = invoker.visibility |
+ } |
+ |
+ sources = get_target_outputs(":$action_name") |
+ |
+ deps = [ ":$action_name" ] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ } |
+} |