Chromium Code Reviews| Index: extensions/generated_extensions_api.gni |
| diff --git a/extensions/generated_extensions_api.gni b/extensions/generated_extensions_api.gni |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..662bf2c52de1bd01c43935e89bd32ca6b215c9a1 |
| --- /dev/null |
| +++ b/extensions/generated_extensions_api.gni |
| @@ -0,0 +1,138 @@ |
| +# 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. |
| + |
| +# Defines a static library corresponding to the output of schema compiler tools |
| +# over a set of extensions API schemas (IDL or JSON format.) The library target |
| +# has implicit hard dependencies on all schema files listed by the invoker and |
| +# is itself a hard dependency. |
| +# |
| +# Invocations of this template may use the following variables: |
| +# |
| +# schemas [required] A list of schema files to be compiled. |
|
brettw
2014/04/24 18:29:44
I'm thinking we should generally name this kind of
Ken Rockot(use gerrit already)
2014/04/24 19:39:54
Debated this for a while myself. I agree with your
|
| +# |
| +# root_namespace [required] The namespace in which generated API code is to be |
| +# wrapped. C++ namespace syntax is accepted for nested namespace |
| +# (e.g. "foo::bar::api"). |
| +# |
| +# impl_dir [required] The path containing C++ implementations of API functions. |
| +# This path is used as the root path when looking for |
| +# {schema}/{schema}_api.h headers during the API bundle generation phase. |
| +# Such headers, if found, are automatically included by the generated code. |
| +# |
| +# uncompiled_schemas [optional] A list of schema files which should not be |
| +# compiled, but which should still be processed for API bundle generation. |
| +# |
| +# deps [optional] If any deps are specified they will be inherited by the |
| +# static library target. |
| +# |
| +# The static libarary target also inherits the visibility and output_name |
| +# of its invoker. |
| + |
| +template("generated_extensions_api") { |
| + assert(defined(invoker.schemas), |
| + "\"schemas\" must be defined for the $target_name template.") |
| + assert(defined(invoker.root_namespace), |
| + "\"root_namespace\" must be defined for the $target_name template.") |
| + assert(defined(invoker.impl_dir), |
| + "\"impl_dir\" must be defined for the $target_name template.") |
| + |
| + # Keep a copy of the target_name here since it will be trampled |
| + # in nested targets. |
| + target_visibility = ":$target_name" |
| + |
| + generated_config_name = target_name + "_generated_config" |
| + config(generated_config_name) { |
| + include_dirs = [ target_gen_dir ] |
| + visibility = target_visibility |
| + } |
| + |
| + schemas = invoker.schemas |
| + root_namespace = invoker.root_namespace |
| + impl_dir = invoker.impl_dir |
| + uncompiled_schemas = [] |
| + if (defined(invoker.uncompiled_schemas)) { |
| + uncompiled_schemas = invoker.uncompiled_schemas |
| + } |
| + |
| + compiler_root = "//tools/json_schema_compiler" |
| + compiler_script = "$compiler_root/compiler.py" |
| + compiler_sources = [ |
| + "$compiler_root/cc_generator.py", |
|
brettw
2014/04/24 18:29:44
Be consistent with the indenting. I would use 2 sp
Ken Rockot(use gerrit already)
2014/04/24 19:39:54
Done. Force of habit from C++ style...
|
| + "$compiler_root/code.py", |
| + "$compiler_root/compiler.py", |
| + "$compiler_root/cpp_generator.py", |
| + "$compiler_root/cpp_type_generator.py", |
| + "$compiler_root/cpp_util.py", |
| + "$compiler_root/h_generator.py", |
| + "$compiler_root/idl_schema.py", |
| + "$compiler_root/model.py", |
| + "$compiler_root/util_cc_helper.py" ] |
|
brettw
2014/04/24 18:29:44
For these multiline lists, I put the ] on the next
Ken Rockot(use gerrit already)
2014/04/24 19:39:54
Done.
|
| + |
| + # This list mirrors the outputs that will be generated by the following |
| + # action_foreach. It's used by the static_library target. |
| + compiled_schema_outputs = process_file_template( |
| + schemas, |
| + [ "$target_gen_dir/{{source_name_part}}.cc", |
| + "$target_gen_dir/{{source_name_part}}.h" ]) |
| + |
| + schema_generator_name = target_name + "_schema_generator" |
| + action_foreach(schema_generator_name) { |
| + script = compiler_script |
| + hard_dep = true |
| + source_prereqs = compiler_sources |
| + sources = schemas |
| + outputs = [ |
| + "$target_gen_dir/{{source_name_part}}.cc", |
| + "$target_gen_dir/{{source_name_part}}.h" ] |
| + args = [ |
| + "{{source}}", |
| + "--root=" + rebase_path("//", root_build_dir), |
|
brettw
2014/04/24 18:29:44
FWIW I have no way to tell if this is correct othe
Ken Rockot(use gerrit already)
2014/04/24 19:39:54
Yep. I' pretty confident the arguments are concept
|
| + "--destdir=" + rebase_path(root_gen_dir, root_build_dir), |
| + "--namespace=$root_namespace", |
| + "--generator=cpp" ] |
| + visibility = target_visibility |
| + } |
| + |
| + bundle_generator_name = target_name + "_bundle_generator" |
| + bundle_outputs = [ |
| + "$target_gen_dir/generated_api.cc", |
|
brettw
2014/04/24 18:29:44
Ditto previous comments.
|
| + "$target_gen_dir/generated_api.h", |
| + "$target_gen_dir/generated_schemas.cc", |
| + "$target_gen_dir/generated_schemas.h" ] |
| + action(bundle_generator_name) { |
| + script = compiler_script |
| + hard_dep = true |
| + source_prereqs = compiler_sources + schemas + uncompiled_schemas |
| + outputs = bundle_outputs |
| + args = [ |
| + "--root=" + rebase_path("//", root_build_dir), |
| + "--destdir=" + rebase_path(root_gen_dir, root_build_dir), |
| + "--namespace=$root_namespace", |
| + "--generator=cpp-bundle", |
| + "--impl-dir=" + rebase_path(impl_dir, "//")] + |
| + rebase_path(schemas, root_build_dir) + |
| + rebase_path(uncompiled_schemas, root_build_dir) |
| + } |
| + |
| + static_library(target_name) { |
|
brettw
2014/04/24 18:29:44
CAn this be a source_set instead of a static_libra
Ken Rockot(use gerrit already)
2014/04/24 19:39:54
I guess I don't see why it couldn't. Done.
Some d
|
| + hard_dep = true |
| + sources = compiled_schema_outputs + bundle_outputs |
| + deps = [ |
| + ":$schema_generator_name", |
| + ":$bundle_generator_name", |
| + "//tools/json_schema_compiler:generated_api_util" ] |
| + |
| + if (defined(invoker.deps)) { |
| + deps += invoker.deps |
| + } |
| + direct_dependent_configs = [ ":$generated_config_name" ] |
| + |
| + if (defined(invoker.visibility)) { |
| + visibility = invoker.visibility |
| + } |
| + if (defined(invoker.output_name)) { |
| + output_name = invoker.output_name |
| + } |
| + } |
| +} |