xref: /aosp_15_r20/external/perfetto/gn/standalone/proto_library.gni (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker#
3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker#
7*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker#
9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerimport("../perfetto.gni")
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Workerif (host_os == "win") {
18*6dbdd20aSAndroid Build Coastguard Worker  _host_executable_suffix = ".exe"
19*6dbdd20aSAndroid Build Coastguard Worker} else {
20*6dbdd20aSAndroid Build Coastguard Worker  _host_executable_suffix = ""
21*6dbdd20aSAndroid Build Coastguard Worker}
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workertemplate("proto_library") {
24*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.sources))
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard Worker  # This is used in chromium build.
27*6dbdd20aSAndroid Build Coastguard Worker  not_needed(invoker, [ "proto_deps" ])
28*6dbdd20aSAndroid Build Coastguard Worker
29*6dbdd20aSAndroid Build Coastguard Worker  proto_sources = invoker.sources
30*6dbdd20aSAndroid Build Coastguard Worker
31*6dbdd20aSAndroid Build Coastguard Worker  # All the proto imports should be relative to the project root.
32*6dbdd20aSAndroid Build Coastguard Worker  proto_in_dir = "//"
33*6dbdd20aSAndroid Build Coastguard Worker  if (defined(invoker.proto_in_dir)) {
34*6dbdd20aSAndroid Build Coastguard Worker    proto_in_dir = invoker.proto_in_dir
35*6dbdd20aSAndroid Build Coastguard Worker  }
36*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.proto_out_dir),
37*6dbdd20aSAndroid Build Coastguard Worker         "proto_out_dir must be explicitly defined")
38*6dbdd20aSAndroid Build Coastguard Worker  proto_out_dir = invoker.proto_out_dir
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Worker  # We don't support generate_python in the standalone build, but still must
41*6dbdd20aSAndroid Build Coastguard Worker  # check that the caller sets this to false. This is because when building in
42*6dbdd20aSAndroid Build Coastguard Worker  # the chromium tree, chromium's proto_library.gni in chrome (!= this) defaults
43*6dbdd20aSAndroid Build Coastguard Worker  # generate_python = true.
44*6dbdd20aSAndroid Build Coastguard Worker  assert(defined(invoker.generate_python) && !invoker.generate_python)
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Worker  import_dirs = []
47*6dbdd20aSAndroid Build Coastguard Worker  if (defined(invoker.import_dirs)) {
48*6dbdd20aSAndroid Build Coastguard Worker    import_dirs = invoker.import_dirs
49*6dbdd20aSAndroid Build Coastguard Worker  }
50*6dbdd20aSAndroid Build Coastguard Worker
51*6dbdd20aSAndroid Build Coastguard Worker  # If false will not generate the default .pb.{cc,h} files. Used for custom
52*6dbdd20aSAndroid Build Coastguard Worker  # codegen plugins.
53*6dbdd20aSAndroid Build Coastguard Worker  generate_cc = true
54*6dbdd20aSAndroid Build Coastguard Worker  if (defined(invoker.generate_cc)) {
55*6dbdd20aSAndroid Build Coastguard Worker    generate_cc = invoker.generate_cc
56*6dbdd20aSAndroid Build Coastguard Worker  }
57*6dbdd20aSAndroid Build Coastguard Worker
58*6dbdd20aSAndroid Build Coastguard Worker  generate_descriptor = ""
59*6dbdd20aSAndroid Build Coastguard Worker  if (defined(invoker.generate_descriptor)) {
60*6dbdd20aSAndroid Build Coastguard Worker    generate_descriptor = invoker.generate_descriptor
61*6dbdd20aSAndroid Build Coastguard Worker
62*6dbdd20aSAndroid Build Coastguard Worker    # Include imports to descriptor by default, but use exclude_imports to omit
63*6dbdd20aSAndroid Build Coastguard Worker    # them if needed.
64*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.exclude_imports)) {
65*6dbdd20aSAndroid Build Coastguard Worker      exclude_imports = invoker.exclude_imports
66*6dbdd20aSAndroid Build Coastguard Worker    } else {
67*6dbdd20aSAndroid Build Coastguard Worker      exclude_imports = false
68*6dbdd20aSAndroid Build Coastguard Worker    }
69*6dbdd20aSAndroid Build Coastguard Worker  }
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker  if (defined(invoker.generator_plugin_label)) {
72*6dbdd20aSAndroid Build Coastguard Worker    plugin_host_label = invoker.generator_plugin_label + "($host_toolchain)"
73*6dbdd20aSAndroid Build Coastguard Worker    plugin_path =
74*6dbdd20aSAndroid Build Coastguard Worker        get_label_info(plugin_host_label, "root_out_dir") + "/" +
75*6dbdd20aSAndroid Build Coastguard Worker        get_label_info(plugin_host_label, "name") + _host_executable_suffix
76*6dbdd20aSAndroid Build Coastguard Worker    generate_with_plugin = true
77*6dbdd20aSAndroid Build Coastguard Worker  } else if (defined(invoker.generator_plugin_script)) {
78*6dbdd20aSAndroid Build Coastguard Worker    plugin_path = invoker.generator_plugin_script
79*6dbdd20aSAndroid Build Coastguard Worker    generate_with_plugin = true
80*6dbdd20aSAndroid Build Coastguard Worker  } else {
81*6dbdd20aSAndroid Build Coastguard Worker    generate_with_plugin = false
82*6dbdd20aSAndroid Build Coastguard Worker  }
83*6dbdd20aSAndroid Build Coastguard Worker
84*6dbdd20aSAndroid Build Coastguard Worker  if (generate_with_plugin) {
85*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.generator_plugin_suffix)) {
86*6dbdd20aSAndroid Build Coastguard Worker      generator_plugin_suffixes = [
87*6dbdd20aSAndroid Build Coastguard Worker        "${invoker.generator_plugin_suffix}.h",
88*6dbdd20aSAndroid Build Coastguard Worker        "${invoker.generator_plugin_suffix}.cc",
89*6dbdd20aSAndroid Build Coastguard Worker      ]
90*6dbdd20aSAndroid Build Coastguard Worker    } else {
91*6dbdd20aSAndroid Build Coastguard Worker      generator_plugin_suffixes = invoker.generator_plugin_suffixes
92*6dbdd20aSAndroid Build Coastguard Worker    }
93*6dbdd20aSAndroid Build Coastguard Worker  }
94*6dbdd20aSAndroid Build Coastguard Worker
95*6dbdd20aSAndroid Build Coastguard Worker  out_dir = "$root_gen_dir/" + proto_out_dir
96*6dbdd20aSAndroid Build Coastguard Worker  rel_out_dir = rebase_path(out_dir, root_build_dir)
97*6dbdd20aSAndroid Build Coastguard Worker
98*6dbdd20aSAndroid Build Coastguard Worker  # Prevent unused errors when generating descriptor only.
99*6dbdd20aSAndroid Build Coastguard Worker  if (generate_descriptor != "") {
100*6dbdd20aSAndroid Build Coastguard Worker    not_needed([ "rel_out_dir" ])
101*6dbdd20aSAndroid Build Coastguard Worker  }
102*6dbdd20aSAndroid Build Coastguard Worker
103*6dbdd20aSAndroid Build Coastguard Worker  protos = rebase_path(proto_sources, proto_in_dir)
104*6dbdd20aSAndroid Build Coastguard Worker  protogens = []
105*6dbdd20aSAndroid Build Coastguard Worker
106*6dbdd20aSAndroid Build Coastguard Worker  if (generate_descriptor != "") {
107*6dbdd20aSAndroid Build Coastguard Worker    protogens += [ "$out_dir/${generate_descriptor}" ]
108*6dbdd20aSAndroid Build Coastguard Worker  }
109*6dbdd20aSAndroid Build Coastguard Worker
110*6dbdd20aSAndroid Build Coastguard Worker  foreach(proto, protos) {
111*6dbdd20aSAndroid Build Coastguard Worker    proto_dir = get_path_info(proto, "dir")
112*6dbdd20aSAndroid Build Coastguard Worker    proto_name = get_path_info(proto, "name")
113*6dbdd20aSAndroid Build Coastguard Worker    proto_path = proto_dir + "/" + proto_name
114*6dbdd20aSAndroid Build Coastguard Worker
115*6dbdd20aSAndroid Build Coastguard Worker    # Prevent unused errors when generating descriptor only.
116*6dbdd20aSAndroid Build Coastguard Worker    if (generate_descriptor != "") {
117*6dbdd20aSAndroid Build Coastguard Worker      not_needed([ "proto_path" ])
118*6dbdd20aSAndroid Build Coastguard Worker    }
119*6dbdd20aSAndroid Build Coastguard Worker
120*6dbdd20aSAndroid Build Coastguard Worker    if (generate_cc) {
121*6dbdd20aSAndroid Build Coastguard Worker      protogens += [
122*6dbdd20aSAndroid Build Coastguard Worker        "$out_dir/$proto_path.pb.h",
123*6dbdd20aSAndroid Build Coastguard Worker        "$out_dir/$proto_path.pb.cc",
124*6dbdd20aSAndroid Build Coastguard Worker      ]
125*6dbdd20aSAndroid Build Coastguard Worker    }
126*6dbdd20aSAndroid Build Coastguard Worker    if (generate_with_plugin) {
127*6dbdd20aSAndroid Build Coastguard Worker      foreach(suffix, generator_plugin_suffixes) {
128*6dbdd20aSAndroid Build Coastguard Worker        protogens += [ "$out_dir/${proto_path}${suffix}" ]
129*6dbdd20aSAndroid Build Coastguard Worker      }
130*6dbdd20aSAndroid Build Coastguard Worker    }
131*6dbdd20aSAndroid Build Coastguard Worker  }
132*6dbdd20aSAndroid Build Coastguard Worker
133*6dbdd20aSAndroid Build Coastguard Worker  config_name = "${target_name}_config"
134*6dbdd20aSAndroid Build Coastguard Worker  if (generate_descriptor == "") {
135*6dbdd20aSAndroid Build Coastguard Worker    action_name = "${target_name}_gen"
136*6dbdd20aSAndroid Build Coastguard Worker    source_set_name = target_name
137*6dbdd20aSAndroid Build Coastguard Worker  } else {
138*6dbdd20aSAndroid Build Coastguard Worker    action_name = target_name
139*6dbdd20aSAndroid Build Coastguard Worker  }
140*6dbdd20aSAndroid Build Coastguard Worker
141*6dbdd20aSAndroid Build Coastguard Worker  config(config_name) {
142*6dbdd20aSAndroid Build Coastguard Worker    include_dirs = [ out_dir ]
143*6dbdd20aSAndroid Build Coastguard Worker  }
144*6dbdd20aSAndroid Build Coastguard Worker
145*6dbdd20aSAndroid Build Coastguard Worker  # The XXX_gen action that generates the .pb.{cc,h} files.
146*6dbdd20aSAndroid Build Coastguard Worker  action(action_name) {
147*6dbdd20aSAndroid Build Coastguard Worker    if (generate_descriptor == "") {
148*6dbdd20aSAndroid Build Coastguard Worker      visibility = [ ":$source_set_name" ]
149*6dbdd20aSAndroid Build Coastguard Worker    }
150*6dbdd20aSAndroid Build Coastguard Worker    sources = proto_sources
151*6dbdd20aSAndroid Build Coastguard Worker    outputs = get_path_info(protogens, "abspath")
152*6dbdd20aSAndroid Build Coastguard Worker
153*6dbdd20aSAndroid Build Coastguard Worker    if (perfetto_use_system_protobuf) {
154*6dbdd20aSAndroid Build Coastguard Worker      protoc_rebased_path = "protoc" + _host_executable_suffix  # from PATH
155*6dbdd20aSAndroid Build Coastguard Worker    } else {
156*6dbdd20aSAndroid Build Coastguard Worker      protoc_label = "//gn:protoc($host_toolchain)"
157*6dbdd20aSAndroid Build Coastguard Worker      protoc_path = get_label_info(protoc_label, "root_out_dir") + "/protoc" +
158*6dbdd20aSAndroid Build Coastguard Worker                    _host_executable_suffix
159*6dbdd20aSAndroid Build Coastguard Worker      protoc_rebased_path = "./" + rebase_path(protoc_path, root_build_dir)
160*6dbdd20aSAndroid Build Coastguard Worker    }
161*6dbdd20aSAndroid Build Coastguard Worker    script = "//gn/standalone/protoc.py"
162*6dbdd20aSAndroid Build Coastguard Worker    args = [
163*6dbdd20aSAndroid Build Coastguard Worker      # Path should be rebased because |root_build_dir| for current toolchain
164*6dbdd20aSAndroid Build Coastguard Worker      # may be different from |root_out_dir| of protoc built on host toolchain.
165*6dbdd20aSAndroid Build Coastguard Worker      protoc_rebased_path,
166*6dbdd20aSAndroid Build Coastguard Worker      "--proto_path",
167*6dbdd20aSAndroid Build Coastguard Worker      rebase_path(proto_in_dir, root_build_dir),
168*6dbdd20aSAndroid Build Coastguard Worker    ]
169*6dbdd20aSAndroid Build Coastguard Worker
170*6dbdd20aSAndroid Build Coastguard Worker    foreach(path, import_dirs) {
171*6dbdd20aSAndroid Build Coastguard Worker      args += [
172*6dbdd20aSAndroid Build Coastguard Worker        "--proto_path",
173*6dbdd20aSAndroid Build Coastguard Worker        rebase_path(path, root_build_dir),
174*6dbdd20aSAndroid Build Coastguard Worker      ]
175*6dbdd20aSAndroid Build Coastguard Worker    }
176*6dbdd20aSAndroid Build Coastguard Worker
177*6dbdd20aSAndroid Build Coastguard Worker    metadata = {
178*6dbdd20aSAndroid Build Coastguard Worker      proto_import_dirs = import_dirs
179*6dbdd20aSAndroid Build Coastguard Worker    }
180*6dbdd20aSAndroid Build Coastguard Worker
181*6dbdd20aSAndroid Build Coastguard Worker    if (generate_cc) {
182*6dbdd20aSAndroid Build Coastguard Worker      cc_generator_options_ = ""
183*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.cc_generator_options)) {
184*6dbdd20aSAndroid Build Coastguard Worker        cc_generator_options_ = invoker.cc_generator_options
185*6dbdd20aSAndroid Build Coastguard Worker      }
186*6dbdd20aSAndroid Build Coastguard Worker      args += [
187*6dbdd20aSAndroid Build Coastguard Worker        "--cpp_out",
188*6dbdd20aSAndroid Build Coastguard Worker        cc_generator_options_ + rel_out_dir,
189*6dbdd20aSAndroid Build Coastguard Worker      ]
190*6dbdd20aSAndroid Build Coastguard Worker    }
191*6dbdd20aSAndroid Build Coastguard Worker    if (generate_descriptor != "") {
192*6dbdd20aSAndroid Build Coastguard Worker      depfile = "$root_gen_dir/$generate_descriptor.d"
193*6dbdd20aSAndroid Build Coastguard Worker
194*6dbdd20aSAndroid Build Coastguard Worker      if (!exclude_imports) {
195*6dbdd20aSAndroid Build Coastguard Worker        args += [ "--include_imports" ]
196*6dbdd20aSAndroid Build Coastguard Worker      }
197*6dbdd20aSAndroid Build Coastguard Worker      args += [
198*6dbdd20aSAndroid Build Coastguard Worker        "--descriptor_set_out",
199*6dbdd20aSAndroid Build Coastguard Worker        rebase_path("$root_gen_dir/$generate_descriptor", root_build_dir),
200*6dbdd20aSAndroid Build Coastguard Worker        "--dependency_out",
201*6dbdd20aSAndroid Build Coastguard Worker        rebase_path(depfile, root_build_dir),
202*6dbdd20aSAndroid Build Coastguard Worker      ]
203*6dbdd20aSAndroid Build Coastguard Worker    }
204*6dbdd20aSAndroid Build Coastguard Worker
205*6dbdd20aSAndroid Build Coastguard Worker    if (generate_with_plugin) {
206*6dbdd20aSAndroid Build Coastguard Worker      plugin_path_rebased = rebase_path(plugin_path, root_build_dir)
207*6dbdd20aSAndroid Build Coastguard Worker      plugin_out_args = ""
208*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.generator_plugin_options)) {
209*6dbdd20aSAndroid Build Coastguard Worker        plugin_out_args += invoker.generator_plugin_options
210*6dbdd20aSAndroid Build Coastguard Worker      }
211*6dbdd20aSAndroid Build Coastguard Worker      plugin_out_args += ":$rel_out_dir"
212*6dbdd20aSAndroid Build Coastguard Worker
213*6dbdd20aSAndroid Build Coastguard Worker      args += [
214*6dbdd20aSAndroid Build Coastguard Worker        "--plugin=protoc-gen-plugin=$plugin_path_rebased",
215*6dbdd20aSAndroid Build Coastguard Worker        "--plugin_out=$plugin_out_args",
216*6dbdd20aSAndroid Build Coastguard Worker      ]
217*6dbdd20aSAndroid Build Coastguard Worker    }
218*6dbdd20aSAndroid Build Coastguard Worker
219*6dbdd20aSAndroid Build Coastguard Worker    args += rebase_path(proto_sources, root_build_dir)
220*6dbdd20aSAndroid Build Coastguard Worker
221*6dbdd20aSAndroid Build Coastguard Worker    if (!perfetto_use_system_protobuf) {
222*6dbdd20aSAndroid Build Coastguard Worker      inputs = [ protoc_path ]
223*6dbdd20aSAndroid Build Coastguard Worker      deps = [ protoc_label ]
224*6dbdd20aSAndroid Build Coastguard Worker    } else {
225*6dbdd20aSAndroid Build Coastguard Worker      inputs = []
226*6dbdd20aSAndroid Build Coastguard Worker      deps = []
227*6dbdd20aSAndroid Build Coastguard Worker    }
228*6dbdd20aSAndroid Build Coastguard Worker
229*6dbdd20aSAndroid Build Coastguard Worker    if (generate_with_plugin) {
230*6dbdd20aSAndroid Build Coastguard Worker      inputs += [ plugin_path ]
231*6dbdd20aSAndroid Build Coastguard Worker      if (defined(plugin_host_label)) {
232*6dbdd20aSAndroid Build Coastguard Worker        # Action depends on native generator plugin but for host toolchain only.
233*6dbdd20aSAndroid Build Coastguard Worker        deps += [ plugin_host_label ]
234*6dbdd20aSAndroid Build Coastguard Worker      }
235*6dbdd20aSAndroid Build Coastguard Worker    }
236*6dbdd20aSAndroid Build Coastguard Worker
237*6dbdd20aSAndroid Build Coastguard Worker    if (generate_descriptor != "") {
238*6dbdd20aSAndroid Build Coastguard Worker      deps += invoker.deps
239*6dbdd20aSAndroid Build Coastguard Worker    }
240*6dbdd20aSAndroid Build Coastguard Worker    if (defined(invoker.link_deps)) {
241*6dbdd20aSAndroid Build Coastguard Worker      deps += invoker.link_deps
242*6dbdd20aSAndroid Build Coastguard Worker    }
243*6dbdd20aSAndroid Build Coastguard Worker  }  # action(action_name)
244*6dbdd20aSAndroid Build Coastguard Worker
245*6dbdd20aSAndroid Build Coastguard Worker  # The source_set that builds the generated .pb.cc files.
246*6dbdd20aSAndroid Build Coastguard Worker  if (generate_descriptor == "") {
247*6dbdd20aSAndroid Build Coastguard Worker    source_set(source_set_name) {
248*6dbdd20aSAndroid Build Coastguard Worker      forward_variables_from(invoker,
249*6dbdd20aSAndroid Build Coastguard Worker                             [
250*6dbdd20aSAndroid Build Coastguard Worker                               "defines",
251*6dbdd20aSAndroid Build Coastguard Worker                               "include_dirs",
252*6dbdd20aSAndroid Build Coastguard Worker                               "public_configs",
253*6dbdd20aSAndroid Build Coastguard Worker                               "testonly",
254*6dbdd20aSAndroid Build Coastguard Worker                               "visibility",
255*6dbdd20aSAndroid Build Coastguard Worker                             ])
256*6dbdd20aSAndroid Build Coastguard Worker
257*6dbdd20aSAndroid Build Coastguard Worker      sources = get_target_outputs(":$action_name")
258*6dbdd20aSAndroid Build Coastguard Worker
259*6dbdd20aSAndroid Build Coastguard Worker      configs -= [ "//gn/standalone:extra_warnings" ]
260*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.extra_configs)) {
261*6dbdd20aSAndroid Build Coastguard Worker        configs += invoker.extra_configs
262*6dbdd20aSAndroid Build Coastguard Worker      }
263*6dbdd20aSAndroid Build Coastguard Worker
264*6dbdd20aSAndroid Build Coastguard Worker      if (!defined(invoker.public_configs)) {
265*6dbdd20aSAndroid Build Coastguard Worker        public_configs = []
266*6dbdd20aSAndroid Build Coastguard Worker      }
267*6dbdd20aSAndroid Build Coastguard Worker
268*6dbdd20aSAndroid Build Coastguard Worker      public_configs += [ ":$config_name" ]
269*6dbdd20aSAndroid Build Coastguard Worker
270*6dbdd20aSAndroid Build Coastguard Worker      # Only include the protobuf_gen_config when generating .pb.cc files.
271*6dbdd20aSAndroid Build Coastguard Worker      # Note that |generate_cc| is false for .{pbzero,ipc,gen etc.}.cc
272*6dbdd20aSAndroid Build Coastguard Worker      if (generate_cc) {
273*6dbdd20aSAndroid Build Coastguard Worker        public_configs += [ "//gn:protobuf_gen_config" ]
274*6dbdd20aSAndroid Build Coastguard Worker      }
275*6dbdd20aSAndroid Build Coastguard Worker
276*6dbdd20aSAndroid Build Coastguard Worker      # By default, propagate the config for |include_dirs| to dependent
277*6dbdd20aSAndroid Build Coastguard Worker      # targets, so that public imports can be resolved to corresponding header
278*6dbdd20aSAndroid Build Coastguard Worker      # files. In some cases, the embedder target handles include directory
279*6dbdd20aSAndroid Build Coastguard Worker      # propagation itself, e.g. via a common config.
280*6dbdd20aSAndroid Build Coastguard Worker      propagate_imports_configs = !defined(invoker.propagate_imports_configs) ||
281*6dbdd20aSAndroid Build Coastguard Worker                                  invoker.propagate_imports_configs
282*6dbdd20aSAndroid Build Coastguard Worker      if (propagate_imports_configs) {
283*6dbdd20aSAndroid Build Coastguard Worker        public_configs += [ ":$config_name" ]
284*6dbdd20aSAndroid Build Coastguard Worker      } else {
285*6dbdd20aSAndroid Build Coastguard Worker        configs += [ ":$config_name" ]
286*6dbdd20aSAndroid Build Coastguard Worker      }
287*6dbdd20aSAndroid Build Coastguard Worker
288*6dbdd20aSAndroid Build Coastguard Worker      # Use protobuf_full only for tests.
289*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.use_protobuf_full) &&
290*6dbdd20aSAndroid Build Coastguard Worker          invoker.use_protobuf_full == true) {
291*6dbdd20aSAndroid Build Coastguard Worker        deps = [ "//gn:protobuf_full" ]
292*6dbdd20aSAndroid Build Coastguard Worker      } else if (generate_cc) {
293*6dbdd20aSAndroid Build Coastguard Worker        deps = [ "//gn:protobuf_lite" ]
294*6dbdd20aSAndroid Build Coastguard Worker      } else {
295*6dbdd20aSAndroid Build Coastguard Worker        deps = []
296*6dbdd20aSAndroid Build Coastguard Worker      }
297*6dbdd20aSAndroid Build Coastguard Worker
298*6dbdd20aSAndroid Build Coastguard Worker      deps += [ ":$action_name" ]
299*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.deps)) {
300*6dbdd20aSAndroid Build Coastguard Worker        deps += invoker.deps
301*6dbdd20aSAndroid Build Coastguard Worker      }
302*6dbdd20aSAndroid Build Coastguard Worker      if (defined(invoker.link_deps)) {
303*6dbdd20aSAndroid Build Coastguard Worker        deps += invoker.link_deps
304*6dbdd20aSAndroid Build Coastguard Worker      }
305*6dbdd20aSAndroid Build Coastguard Worker    }  # source_set(source_set_name)
306*6dbdd20aSAndroid Build Coastguard Worker  }
307*6dbdd20aSAndroid Build Coastguard Worker}  # template
308