OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 # Defines a static library corresponding to the output of schema compiler tools | 5 # Defines a static library corresponding to the output of schema compiler tools |
6 # over a set of extensions API schemas (IDL or JSON format.) The library target | 6 # over a set of extensions API schemas (IDL or JSON format.) The library target |
7 # has implicit hard dependencies on all schema files listed by the invoker and | 7 # has implicit hard dependencies on all schema files listed by the invoker and |
8 # is itself a hard dependency. | 8 # is itself a hard dependency. |
9 # | 9 # |
10 # Invocations of this template may use the following variables: | 10 # Invocations of this template may use the following variables: |
11 # | 11 # |
12 # sources [required] A list of schema files to be compiled. | 12 # sources [required] A list of schema files to be compiled. |
13 # | 13 # |
14 # root_namespace [required] The namespace in which generated API code is to be | 14 # root_namespace [required] |
| 15 # The namespace in which generated API code is to be |
15 # wrapped. C++ namespace syntax is accepted for nested namespace | 16 # wrapped. C++ namespace syntax is accepted for nested namespace |
16 # (e.g. "foo::bar::api"). | 17 # (e.g. "foo::bar::api"). |
17 # | 18 # |
18 # impl_dir [required] The path containing C++ implementations of API functions. | 19 # bundle [optional, default = false] |
19 # This path is used as the root path when looking for | 20 # Boolean indicating if the schema files should be bundled or not. |
20 # {schema}/{schema}_api.h headers during the API bundle generation phase. | |
21 # Such headers, if found, are automatically included by the generated code. | |
22 # | 21 # |
23 # uncompiled_sources [optional] A list of schema files which should not be | 22 # impl_dir [required if bundle = true, otherwise unused] |
24 # compiled, but which should still be processed for API bundle generation. | 23 # The path containing C++ implementations of API functions. This path is |
| 24 # used as the root path when looking for {schema}/{schema}_api.h headers |
| 25 # during the API bundle generation phase. Such headers, if found, are |
| 26 # automatically included by the generated code. |
25 # | 27 # |
26 # deps [optional] If any deps are specified they will be inherited by the | 28 # uncompiled_sources [optional, only used when bundle = true] |
27 # static library target. | 29 # A list of schema files which should not be compiled, but which should still |
| 30 # be processed for API bundle generation. |
| 31 # |
| 32 # deps [optional] |
| 33 # If any deps are specified they will be inherited by the static library |
| 34 # target. |
28 # | 35 # |
29 # The static libarary target also inherits the visibility and output_name | 36 # The static libarary target also inherits the visibility and output_name |
30 # of its invoker. | 37 # of its invoker. |
31 | 38 |
32 template("generated_extensions_api") { | 39 template("generated_extensions_api") { |
33 assert(defined(invoker.sources), | 40 assert(defined(invoker.sources), |
34 "\"sources\" must be defined for the $target_name template.") | 41 "\"sources\" must be defined for the $target_name template.") |
35 assert(defined(invoker.root_namespace), | 42 assert(defined(invoker.root_namespace), |
36 "\"root_namespace\" must be defined for the $target_name template.") | 43 "\"root_namespace\" must be defined for the $target_name template.") |
37 assert(defined(invoker.impl_dir), | 44 |
38 "\"impl_dir\" must be defined for the $target_name template.") | 45 bundle = defined(invoker.bundle) && invoker.bundle |
39 | 46 |
40 # Keep a copy of the target_name here since it will be trampled | 47 # Keep a copy of the target_name here since it will be trampled |
41 # in nested targets. | 48 # in nested targets. |
42 target_visibility = ":$target_name" | 49 target_visibility = ":$target_name" |
43 | 50 |
44 generated_config_name = target_name + "_generated_config" | 51 generated_config_name = target_name + "_generated_config" |
45 config(generated_config_name) { | 52 config(generated_config_name) { |
46 include_dirs = [ target_gen_dir ] | 53 include_dirs = [ target_gen_dir ] |
47 visibility = target_visibility | 54 visibility = target_visibility |
48 } | 55 } |
49 | 56 |
50 schemas = invoker.sources | 57 schemas = invoker.sources |
51 root_namespace = invoker.root_namespace | 58 root_namespace = invoker.root_namespace |
52 impl_dir = invoker.impl_dir | |
53 uncompiled_schemas = [] | |
54 if (defined(invoker.uncompiled_sources)) { | |
55 uncompiled_schemas = invoker.uncompiled_sources | |
56 } | |
57 | 59 |
58 compiler_root = "//tools/json_schema_compiler" | 60 compiler_root = "//tools/json_schema_compiler" |
59 compiler_script = "$compiler_root/compiler.py" | 61 compiler_script = "$compiler_root/compiler.py" |
60 compiler_sources = [ | 62 compiler_sources = [ |
61 "$compiler_root/cc_generator.py", | 63 "$compiler_root/cc_generator.py", |
62 "$compiler_root/code.py", | 64 "$compiler_root/code.py", |
63 "$compiler_root/compiler.py", | 65 "$compiler_root/compiler.py", |
64 "$compiler_root/cpp_generator.py", | 66 "$compiler_root/cpp_generator.py", |
65 "$compiler_root/cpp_type_generator.py", | 67 "$compiler_root/cpp_type_generator.py", |
66 "$compiler_root/cpp_util.py", | 68 "$compiler_root/cpp_util.py", |
(...skipping 14 matching lines...) Expand all Loading... |
81 ] | 83 ] |
82 args = [ | 84 args = [ |
83 "{{source}}", | 85 "{{source}}", |
84 "--root=" + rebase_path("//", root_build_dir), | 86 "--root=" + rebase_path("//", root_build_dir), |
85 "--destdir=" + rebase_path(root_gen_dir, root_build_dir), | 87 "--destdir=" + rebase_path(root_gen_dir, root_build_dir), |
86 "--namespace=$root_namespace", | 88 "--namespace=$root_namespace", |
87 "--generator=cpp" ] | 89 "--generator=cpp" ] |
88 visibility = target_visibility | 90 visibility = target_visibility |
89 } | 91 } |
90 | 92 |
91 bundle_generator_name = target_name + "_bundle_generator" | 93 if (bundle) { |
92 action(bundle_generator_name) { | 94 assert(defined(invoker.impl_dir), |
93 script = compiler_script | 95 "\"impl_dir\" must be defined for the $target_name template.") |
94 source_prereqs = compiler_sources + schemas + uncompiled_schemas | 96 impl_dir = invoker.impl_dir |
95 outputs = [ | 97 |
96 "$target_gen_dir/generated_api.cc", | 98 uncompiled_schemas = [] |
97 "$target_gen_dir/generated_api.h", | 99 if (defined(invoker.uncompiled_sources)) { |
98 "$target_gen_dir/generated_schemas.cc", | 100 uncompiled_schemas = invoker.uncompiled_sources |
99 "$target_gen_dir/generated_schemas.h", | 101 } |
100 ] | 102 |
101 args = [ | 103 bundle_generator_name = target_name + "_bundle_generator" |
102 "--root=" + rebase_path("//", root_build_dir), | 104 action(bundle_generator_name) { |
103 "--destdir=" + rebase_path(root_gen_dir, root_build_dir), | 105 script = compiler_script |
104 "--namespace=$root_namespace", | 106 source_prereqs = compiler_sources + schemas + uncompiled_schemas |
105 "--generator=cpp-bundle", | 107 outputs = [ |
106 "--impl-dir=" + rebase_path(impl_dir, "//"), | 108 "$target_gen_dir/generated_api.cc", |
107 ] + | 109 "$target_gen_dir/generated_api.h", |
108 rebase_path(schemas, root_build_dir) + | 110 "$target_gen_dir/generated_schemas.cc", |
109 rebase_path(uncompiled_schemas, root_build_dir) | 111 "$target_gen_dir/generated_schemas.h", |
| 112 ] |
| 113 args = [ |
| 114 "--root=" + rebase_path("//", root_build_dir), |
| 115 "--destdir=" + rebase_path(root_gen_dir, root_build_dir), |
| 116 "--namespace=$root_namespace", |
| 117 "--generator=cpp-bundle", |
| 118 "--impl-dir=" + rebase_path(impl_dir, "//"), |
| 119 ] + |
| 120 rebase_path(schemas, root_build_dir) + |
| 121 rebase_path(uncompiled_schemas, root_build_dir) |
| 122 } |
110 } | 123 } |
111 | 124 |
112 source_set(target_name) { | 125 source_set(target_name) { |
113 sources = | 126 sources = get_target_outputs(":$schema_generator_name") |
114 get_target_outputs(":$schema_generator_name") + | |
115 get_target_outputs(":$bundle_generator_name") | |
116 | 127 |
117 deps = [ | 128 deps = [ |
118 ":$schema_generator_name", | 129 ":$schema_generator_name", |
119 ":$bundle_generator_name", | |
120 "//tools/json_schema_compiler:generated_api_util", | 130 "//tools/json_schema_compiler:generated_api_util", |
121 ] | 131 ] |
122 | 132 |
| 133 if (bundle) { |
| 134 sources += get_target_outputs(":$bundle_generator_name") |
| 135 deps += [ ":$bundle_generator_name" ] |
| 136 } |
| 137 |
123 if (defined(invoker.deps)) { | 138 if (defined(invoker.deps)) { |
124 deps += invoker.deps | 139 deps += invoker.deps |
125 } | 140 } |
126 direct_dependent_configs = [ ":$generated_config_name" ] | 141 direct_dependent_configs = [ ":$generated_config_name" ] |
127 | 142 |
128 if (defined(invoker.visibility)) { | 143 if (defined(invoker.visibility)) { |
129 visibility = invoker.visibility | 144 visibility = invoker.visibility |
130 } | 145 } |
131 if (defined(invoker.output_name)) { | 146 if (defined(invoker.output_name)) { |
132 output_name = invoker.output_name | 147 output_name = invoker.output_name |
133 } | 148 } |
134 } | 149 } |
135 } | 150 } |
OLD | NEW |