OLD | NEW |
1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 import("//build/config/dcheck_always_on.gni") |
5 import("//services/service_manager/public/constants.gni") | 6 import("//services/service_manager/public/constants.gni") |
6 | 7 |
7 # Used to produce a Service Manifest for a Service. | 8 # Used to produce a Service Manifest for a Service. |
8 # | 9 # |
9 # Parameters: | 10 # Parameters: |
10 # | 11 # |
11 # source | 12 # source |
12 # The manifest file template for this service, must be valid JSON with | 13 # The manifest file template for this service, must be valid JSON with |
13 # a valid 'url' key matching name. | 14 # a valid 'url' key matching name. |
14 # | 15 # |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 | 98 |
98 rebase_parent = rebase_path(invoker.source, root_build_dir) | 99 rebase_parent = rebase_path(invoker.source, root_build_dir) |
99 rebase_output = rebase_path(output, root_build_dir) | 100 rebase_output = rebase_path(output, root_build_dir) |
100 | 101 |
101 args = [ | 102 args = [ |
102 "--name=$name", | 103 "--name=$name", |
103 "--parent=$rebase_parent", | 104 "--parent=$rebase_parent", |
104 "--output=$rebase_output", | 105 "--output=$rebase_output", |
105 ] | 106 ] |
106 | 107 |
| 108 if (is_debug || dcheck_always_on) { |
| 109 args += [ "--pretty" ] |
| 110 } |
| 111 |
107 if (defined(invoker.overlays)) { | 112 if (defined(invoker.overlays)) { |
108 args += [ "--overlays" ] | 113 args += [ "--overlays" ] |
109 foreach(overlay_path, invoker.overlays) { | 114 foreach(overlay_path, invoker.overlays) { |
110 args += [ rebase_path(overlay_path, root_build_dir) ] | 115 args += [ rebase_path(overlay_path, root_build_dir) ] |
111 } | 116 } |
112 } | 117 } |
113 | 118 |
114 if (defined(invoker.packaged_services)) { | 119 if (defined(invoker.packaged_services)) { |
| 120 args += [ "--packaged-services" ] |
115 foreach(name, invoker.packaged_services) { | 121 foreach(name, invoker.packaged_services) { |
116 input = "$root_out_dir/$packages_directory/$name/manifest.json" | 122 input = "$root_out_dir/$packages_directory/$name/manifest.json" |
117 inputs += [ input ] | 123 inputs += [ input ] |
118 args += [ rebase_path(input, root_build_dir) ] | 124 args += [ rebase_path(input, root_build_dir) ] |
119 } | 125 } |
120 } | 126 } |
121 deps = [] | 127 deps = [] |
122 data_deps = [] | 128 data_deps = [] |
123 if (defined(invoker.deps)) { | 129 if (defined(invoker.deps)) { |
124 deps += invoker.deps | 130 deps += invoker.deps |
125 data_deps += invoker.deps | 131 data_deps += invoker.deps |
126 } | 132 } |
127 } | 133 } |
128 | 134 |
129 all_deps = [] | 135 all_deps = [] |
130 if (defined(invoker.deps)) { | 136 if (defined(invoker.deps)) { |
131 all_deps += invoker.deps | 137 all_deps += invoker.deps |
132 } | 138 } |
133 | 139 |
134 group("${target_name}__is_service_manifest") { | 140 group("${target_name}__is_service_manifest_or_overlay") { |
135 } | 141 } |
136 | 142 |
137 # Explicitly ensure that all dependencies are service_manifest | 143 # Explicitly ensure that all dependencies are service_manifest |
138 # targets themselves. | 144 # or service_manifest_overlay targets themselves. |
139 group("${target_name}__check_deps_are_all_service_manifest") { | 145 group("${target_name}__check_deps_are_all_service_manifest") { |
140 deps = [] | 146 deps = [] |
141 foreach(d, all_deps) { | 147 foreach(d, all_deps) { |
142 name = get_label_info(d, "label_no_toolchain") | 148 name = get_label_info(d, "label_no_toolchain") |
143 toolchain = get_label_info(d, "toolchain") | 149 toolchain = get_label_info(d, "toolchain") |
144 deps += [ "${name}__is_service_manifest(${toolchain})" ] | 150 deps += [ "${name}__is_service_manifest_or_overlay(${toolchain})" ] |
145 } | 151 } |
146 } | 152 } |
147 } | 153 } |
| 154 |
| 155 # A simple derivative of the service_manifest template above. This allows for |
| 156 # embedding of packaged services into a manifest overlay. |
| 157 # |
| 158 # Parameters: |
| 159 # |
| 160 # source |
| 161 # The manifest overlay file to procss. |
| 162 # |
| 163 # overlays (optional) |
| 164 # A list of partial manifests to overlay onto the source manifest before |
| 165 # emitting the final output. Overlays are applied as the last step, after |
| 166 # any packaged manifests are embedded. |
| 167 # |
| 168 # output_name (optional) |
| 169 # The output name of the manifest. Defaults to the target name. |
| 170 # |
| 171 # deps (optional) |
| 172 # An array of the service_manifest targets this overlay depends on. |
| 173 # |
| 174 # packaged_services (optional) |
| 175 # An array of names of the services packaged into this overlay. |
| 176 # |
| 177 # Outputs: |
| 178 # |
| 179 # An instantiation of this template produces in |
| 180 # ${root_gen_dir}/${output_name}.json |
| 181 # |
| 182 template("service_manifest_overlay") { |
| 183 assert(defined(invoker.source), |
| 184 "\"source\" must be defined for the $target_name template") |
| 185 if (defined(invoker.deps)) { |
| 186 assert(defined(invoker.packaged_services) || defined(invoker.overlays), |
| 187 "\"deps\" implies that you also want \"packaged_services\" and/or" + |
| 188 "\"overlays\", but you have neither.") |
| 189 } |
| 190 if (defined(invoker.packaged_services)) { |
| 191 assert(defined(invoker.deps), |
| 192 "\"deps\" building the dependent packaged services must be " + |
| 193 "provided.") |
| 194 } |
| 195 if (defined(invoker.type)) { |
| 196 assert(invoker.type == "mojo" || invoker.type == "exe", |
| 197 "\"type\" must be one of \"mojo\" or \"exe\".") |
| 198 } |
| 199 |
| 200 action(target_name) { |
| 201 script = |
| 202 "//services/service_manager/public/tools/manifest/manifest_collator.py" |
| 203 |
| 204 inputs = [ |
| 205 invoker.source, |
| 206 ] |
| 207 if (defined(invoker.overlays)) { |
| 208 inputs += invoker.overlays |
| 209 } |
| 210 |
| 211 output_name = target_name |
| 212 if (defined(invoker.output_name)) { |
| 213 output_name = invoker.output_name |
| 214 } |
| 215 output = "${root_gen_dir}/${output_name}.json" |
| 216 |
| 217 outputs = [ |
| 218 output, |
| 219 ] |
| 220 |
| 221 rebase_parent = rebase_path(invoker.source, root_build_dir) |
| 222 rebase_output = rebase_path(output, root_build_dir) |
| 223 |
| 224 args = [ |
| 225 "--parent=$rebase_parent", |
| 226 "--output=$rebase_output", |
| 227 ] |
| 228 |
| 229 if (is_debug || dcheck_always_on) { |
| 230 args += [ "--pretty" ] |
| 231 } |
| 232 |
| 233 if (defined(invoker.overlays)) { |
| 234 args += [ "--overlays" ] |
| 235 foreach(overlay_path, invoker.overlays) { |
| 236 args += [ rebase_path(overlay_path, root_build_dir) ] |
| 237 } |
| 238 } |
| 239 |
| 240 if (defined(invoker.packaged_services)) { |
| 241 args += [ "--packaged-services" ] |
| 242 foreach(name, invoker.packaged_services) { |
| 243 input = "$root_out_dir/$packages_directory/$name/manifest.json" |
| 244 inputs += [ input ] |
| 245 args += [ rebase_path(input, root_build_dir) ] |
| 246 } |
| 247 } |
| 248 |
| 249 deps = [] |
| 250 data_deps = [] |
| 251 if (defined(invoker.deps)) { |
| 252 deps += invoker.deps |
| 253 data_deps += invoker.deps |
| 254 } |
| 255 } |
| 256 |
| 257 group("${target_name}__is_service_manifest_or_overlay") { |
| 258 } |
| 259 |
| 260 # Explicitly ensure that all dependencies are service_manifest |
| 261 # or service_manifest_overlay targets themselves. |
| 262 group("${target_name}__check_deps_are_all_service_manifest") { |
| 263 deps = [] |
| 264 foreach(d, all_deps) { |
| 265 name = get_label_info(d, "label_no_toolchain") |
| 266 toolchain = get_label_info(d, "toolchain") |
| 267 deps += [ "${name}__is_service_manifest_or_overlay(${toolchain})" ] |
| 268 } |
| 269 } |
| 270 } |
OLD | NEW |