xref: /aosp_15_r20/external/cronet/third_party/protobuf/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Workerimport("//build/config/linux/gtk/gtk.gni")
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/sanitizers/sanitizers.gni")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker# Includes default args like 'enable_js_protobuf'.
8*6777b538SAndroid Build Coastguard Workerimport("proto_library.gni")
9*6777b538SAndroid Build Coastguard Workerimport("proto_sources.gni")
10*6777b538SAndroid Build Coastguard Workerif (enable_js_protobuf) {
11*6777b538SAndroid Build Coastguard Worker  import("//third_party/closure_compiler/compile_js.gni")
12*6777b538SAndroid Build Coastguard Worker}
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Workerconfig("protobuf_config") {
15*6777b538SAndroid Build Coastguard Worker  include_dirs = [ "src" ]
16*6777b538SAndroid Build Coastguard Worker  defines = [
17*6777b538SAndroid Build Coastguard Worker    "GOOGLE_PROTOBUF_NO_RTTI",
18*6777b538SAndroid Build Coastguard Worker    "GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER",
19*6777b538SAndroid Build Coastguard Worker    "GOOGLE_PROTOBUF_INTERNAL_DONATE_STEAL_INLINE=0",
20*6777b538SAndroid Build Coastguard Worker  ]
21*6777b538SAndroid Build Coastguard Worker  if (!is_win) {
22*6777b538SAndroid Build Coastguard Worker    defines += [ "HAVE_PTHREAD" ]
23*6777b538SAndroid Build Coastguard Worker  }
24*6777b538SAndroid Build Coastguard Worker}
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard Workerconfig("protobuf_warnings") {
27*6777b538SAndroid Build Coastguard Worker  cflags = []
28*6777b538SAndroid Build Coastguard Worker  if (is_clang) {
29*6777b538SAndroid Build Coastguard Worker    # protobuf-3 contains a few functions that are unused.
30*6777b538SAndroid Build Coastguard Worker    cflags += [ "-Wno-unused-function" ]
31*6777b538SAndroid Build Coastguard Worker  }
32*6777b538SAndroid Build Coastguard Worker}
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Workerconfig("protoc_warnings") {
35*6777b538SAndroid Build Coastguard Worker  cflags = []
36*6777b538SAndroid Build Coastguard Worker  if (is_clang) {
37*6777b538SAndroid Build Coastguard Worker    # Some generates contain a few fields that are not used.
38*6777b538SAndroid Build Coastguard Worker    cflags += [ "-Wno-unused-private-field" ]
39*6777b538SAndroid Build Coastguard Worker  }
40*6777b538SAndroid Build Coastguard Worker}
41*6777b538SAndroid Build Coastguard Worker
42*6777b538SAndroid Build Coastguard Workerif (is_component_build) {
43*6777b538SAndroid Build Coastguard Worker  config("protobuf_use_dlls") {
44*6777b538SAndroid Build Coastguard Worker    defines = [ "PROTOBUF_USE_DLLS" ]
45*6777b538SAndroid Build Coastguard Worker  }
46*6777b538SAndroid Build Coastguard Worker}
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker# This config should be applied to targets using generated code from the proto
49*6777b538SAndroid Build Coastguard Worker# compiler. It sets up the include directories properly.
50*6777b538SAndroid Build Coastguard Workerconfig("using_proto") {
51*6777b538SAndroid Build Coastguard Worker  include_dirs = [
52*6777b538SAndroid Build Coastguard Worker    "src",
53*6777b538SAndroid Build Coastguard Worker    "$root_gen_dir/protoc_out",
54*6777b538SAndroid Build Coastguard Worker  ]
55*6777b538SAndroid Build Coastguard Worker}
56*6777b538SAndroid Build Coastguard Worker
57*6777b538SAndroid Build Coastguard Workerconfig("allow_deprecated_proto_fields") {
58*6777b538SAndroid Build Coastguard Worker  if (is_clang) {
59*6777b538SAndroid Build Coastguard Worker    cflags = [ "-DPROTOBUF_ALLOW_DEPRECATED=1" ]
60*6777b538SAndroid Build Coastguard Worker  }
61*6777b538SAndroid Build Coastguard Worker}
62*6777b538SAndroid Build Coastguard Worker
63*6777b538SAndroid Build Coastguard Workerprotobuf_lite_cflags = []
64*6777b538SAndroid Build Coastguard Workerif (is_win) {
65*6777b538SAndroid Build Coastguard Worker  protobuf_lite_cflags = [
66*6777b538SAndroid Build Coastguard Worker    "/wd4018",  # signed/unsigned mismatch in comparison
67*6777b538SAndroid Build Coastguard Worker    "/wd4065",  # switch statement contains 'default' but no 'case' labels
68*6777b538SAndroid Build Coastguard Worker    "/wd4146",  # unary minus operator applied to unsigned type
69*6777b538SAndroid Build Coastguard Worker    "/wd4244",  # implicit conversion, possible loss of data
70*6777b538SAndroid Build Coastguard Worker    "/wd4267",  # size_t to int truncation
71*6777b538SAndroid Build Coastguard Worker    "/wd4291",  # no matching operator delete for a placement new.
72*6777b538SAndroid Build Coastguard Worker    "/wd4305",  # double to float truncation
73*6777b538SAndroid Build Coastguard Worker    "/wd4355",  # 'this' used in base member initializer list
74*6777b538SAndroid Build Coastguard Worker    "/wd4506",  # no definition for inline function (protobuf issue #240)
75*6777b538SAndroid Build Coastguard Worker    "/wd4715",  # not all control paths return a value (fixed in trunk)
76*6777b538SAndroid Build Coastguard Worker  ]
77*6777b538SAndroid Build Coastguard Worker}
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Workercomponent("protobuf_lite") {
80*6777b538SAndroid Build Coastguard Worker  sources = protobuf_lite_sources + protobuf_headers
81*6777b538SAndroid Build Coastguard Worker
82*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
83*6777b538SAndroid Build Coastguard Worker  configs += [
84*6777b538SAndroid Build Coastguard Worker    "//build/config/compiler:no_chromium_code",
85*6777b538SAndroid Build Coastguard Worker
86*6777b538SAndroid Build Coastguard Worker    # Must be after no_chromium_code for warning flags to be ordered
87*6777b538SAndroid Build Coastguard Worker    # correctly.
88*6777b538SAndroid Build Coastguard Worker    ":protobuf_warnings",
89*6777b538SAndroid Build Coastguard Worker  ]
90*6777b538SAndroid Build Coastguard Worker
91*6777b538SAndroid Build Coastguard Worker  # Build protobuf_lite with full optimizations so Clang can optimize the
92*6777b538SAndroid Build Coastguard Worker  # initializer out. See 0029-make-initializers-optimizable.patch.
93*6777b538SAndroid Build Coastguard Worker  if (!is_debug && is_android) {
94*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
95*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_max" ]
96*6777b538SAndroid Build Coastguard Worker  }
97*6777b538SAndroid Build Coastguard Worker
98*6777b538SAndroid Build Coastguard Worker  # Remove coverage and Sanitizers other than ASan for a performance boost when
99*6777b538SAndroid Build Coastguard Worker  # fuzzing. ASan can't be removed here because of a bug preventing unsanitized
100*6777b538SAndroid Build Coastguard Worker  # code from using libc++, which protobuf_full uses.
101*6777b538SAndroid Build Coastguard Worker  configs -= not_fuzzed_remove_nonasan_configs
102*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/sanitizers:not_fuzzed" ]
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker  if (is_win) {
105*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/win:lean_and_mean" ]
106*6777b538SAndroid Build Coastguard Worker  }
107*6777b538SAndroid Build Coastguard Worker
108*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":protobuf_config" ]
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Worker  if (is_android) {
111*6777b538SAndroid Build Coastguard Worker    libs = [ "log" ]  # Used by src/google/protobuf/stubs/common.cc
112*6777b538SAndroid Build Coastguard Worker  }
113*6777b538SAndroid Build Coastguard Worker
114*6777b538SAndroid Build Coastguard Worker  cflags = protobuf_lite_cflags
115*6777b538SAndroid Build Coastguard Worker
116*6777b538SAndroid Build Coastguard Worker  # Required for component builds. See http://crbug.com/172800.
117*6777b538SAndroid Build Coastguard Worker  if (is_component_build) {
118*6777b538SAndroid Build Coastguard Worker    public_configs += [ ":protobuf_use_dlls" ]
119*6777b538SAndroid Build Coastguard Worker    defines = [ "LIBPROTOBUF_EXPORTS" ]
120*6777b538SAndroid Build Coastguard Worker  }
121*6777b538SAndroid Build Coastguard Worker}
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Worker# This is the full, heavy protobuf lib that's needed for c++ .protos that don't
124*6777b538SAndroid Build Coastguard Worker# specify the LITE_RUNTIME option. The protocol compiler itself (protoc) falls
125*6777b538SAndroid Build Coastguard Worker# into that category. Do not use in Chrome code.
126*6777b538SAndroid Build Coastguard Workerstatic_library("protobuf_full") {
127*6777b538SAndroid Build Coastguard Worker  if (defined(build_with_chromium) && build_with_chromium) {
128*6777b538SAndroid Build Coastguard Worker    # Prevent people from depending on this outside our file.
129*6777b538SAndroid Build Coastguard Worker    visibility = [
130*6777b538SAndroid Build Coastguard Worker      ":*",
131*6777b538SAndroid Build Coastguard Worker
132*6777b538SAndroid Build Coastguard Worker      # Used for testing protobuf generation.
133*6777b538SAndroid Build Coastguard Worker      "//base/test:proto_test_support",
134*6777b538SAndroid Build Coastguard Worker
135*6777b538SAndroid Build Coastguard Worker      # requires descriptors & reflection; testonly.
136*6777b538SAndroid Build Coastguard Worker      "//third_party/libprotobuf-mutator:*",
137*6777b538SAndroid Build Coastguard Worker
138*6777b538SAndroid Build Coastguard Worker      # Chromecast requires descriptors and reflection.
139*6777b538SAndroid Build Coastguard Worker      "//chromecast/*",
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Worker      # libassistant requires descriptors and reflection for testing.
142*6777b538SAndroid Build Coastguard Worker      "//libassistant/*",
143*6777b538SAndroid Build Coastguard Worker
144*6777b538SAndroid Build Coastguard Worker      # Perfetto uses the full library for testing.
145*6777b538SAndroid Build Coastguard Worker      "//third_party/perfetto/gn:protobuf_full",
146*6777b538SAndroid Build Coastguard Worker
147*6777b538SAndroid Build Coastguard Worker      # Some tests inside ChromeOS need reflection to parse golden files.
148*6777b538SAndroid Build Coastguard Worker      # Not included in production code.
149*6777b538SAndroid Build Coastguard Worker      "//chrome/test:usage_time_limit_unittests",
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker      # The protobuf-based SQLite and GPU fuzzers need protobuf_full and are not
152*6777b538SAndroid Build Coastguard Worker      # included in Chrome.
153*6777b538SAndroid Build Coastguard Worker      "//gpu:gl_lpm_fuzzer_proto",
154*6777b538SAndroid Build Coastguard Worker      "//gpu:gl_lpm_fuzzer_proto_gen",
155*6777b538SAndroid Build Coastguard Worker      "//gpu:gl_lpm_shader_to_string_unittest",
156*6777b538SAndroid Build Coastguard Worker      "//testing/libfuzzer/fuzzers:command_buffer_lpm_fuzzer_proto",
157*6777b538SAndroid Build Coastguard Worker      "//testing/libfuzzer/fuzzers:command_buffer_lpm_fuzzer_proto_gen",
158*6777b538SAndroid Build Coastguard Worker      "//third_party/sqlite:sqlite3_lpm_corpus_gen",
159*6777b538SAndroid Build Coastguard Worker
160*6777b538SAndroid Build Coastguard Worker      # The protobuf-based Mojo LPM fuzzer needs protobuf_full and is not included
161*6777b538SAndroid Build Coastguard Worker      # in Chrome.
162*6777b538SAndroid Build Coastguard Worker      "//mojo/public/tools/fuzzers:mojolpm",
163*6777b538SAndroid Build Coastguard Worker
164*6777b538SAndroid Build Coastguard Worker      # The root store tool is not part of Chrome itself, and needs to parse
165*6777b538SAndroid Build Coastguard Worker      # human-readable protobufs. Protobuf is stored in //net/cert however as
166*6777b538SAndroid Build Coastguard Worker      # browser needs to be able to parse serialized protobuf (which is exposed
167*6777b538SAndroid Build Coastguard Worker      # as a separate lite BUILD rule).
168*6777b538SAndroid Build Coastguard Worker      "//net/cert:root_store_proto_full",
169*6777b538SAndroid Build Coastguard Worker
170*6777b538SAndroid Build Coastguard Worker      # The spirv-fuzz fuzzer tool needs protobuf_full and is not included in
171*6777b538SAndroid Build Coastguard Worker      # Chrome.
172*6777b538SAndroid Build Coastguard Worker      "//third_party/vulkan-deps/spirv-tools/src:spirv-fuzz",
173*6777b538SAndroid Build Coastguard Worker      "//third_party/vulkan-deps/spirv-tools/src:spvtools_fuzz",
174*6777b538SAndroid Build Coastguard Worker      "//third_party/vulkan-deps/spirv-tools/src:spvtools_fuzz_proto",
175*6777b538SAndroid Build Coastguard Worker
176*6777b538SAndroid Build Coastguard Worker      # Some fuzzers for tint need protobuf_full and are not included in Chrome.
177*6777b538SAndroid Build Coastguard Worker      "//third_party/dawn/src/tint/*",
178*6777b538SAndroid Build Coastguard Worker
179*6777b538SAndroid Build Coastguard Worker      # Dawn LPM Fuzzers
180*6777b538SAndroid Build Coastguard Worker      "//third_party/dawn/src/dawn/fuzzers:dawn_lpm_proto",
181*6777b538SAndroid Build Coastguard Worker      "//third_party/dawn/src/dawn/fuzzers:dawn_lpm_proto_gen",
182*6777b538SAndroid Build Coastguard Worker
183*6777b538SAndroid Build Coastguard Worker      # The Cast Core gRPC generator tool.
184*6777b538SAndroid Build Coastguard Worker      "//third_party/cast_core/public/src/build/chromium:cast_core_grpc_generator",
185*6777b538SAndroid Build Coastguard Worker    ]
186*6777b538SAndroid Build Coastguard Worker  }
187*6777b538SAndroid Build Coastguard Worker
188*6777b538SAndroid Build Coastguard Worker  deps = [ "//third_party/zlib" ]
189*6777b538SAndroid Build Coastguard Worker
190*6777b538SAndroid Build Coastguard Worker  # In component build, protobuf_full can't depend on protobuf_lite because
191*6777b538SAndroid Build Coastguard Worker  # it uses non-PROTOBUF_EXPORT symbols; in non-component build, protobuf_full
192*6777b538SAndroid Build Coastguard Worker  # must have protobuf_lite as a dependency instead of building
193*6777b538SAndroid Build Coastguard Worker  # protobuf_lite_sources to avoid ODR violations in targets that link both.
194*6777b538SAndroid Build Coastguard Worker  # See crbug.com/1338164.
195*6777b538SAndroid Build Coastguard Worker  if (is_component_build) {
196*6777b538SAndroid Build Coastguard Worker    sources = protobuf_lite_sources + protobuf_sources + protobuf_headers
197*6777b538SAndroid Build Coastguard Worker  } else {
198*6777b538SAndroid Build Coastguard Worker    sources = protobuf_sources + protobuf_headers
199*6777b538SAndroid Build Coastguard Worker    deps += [ ":protobuf_lite" ]
200*6777b538SAndroid Build Coastguard Worker  }
201*6777b538SAndroid Build Coastguard Worker
202*6777b538SAndroid Build Coastguard Worker  if (is_android) {
203*6777b538SAndroid Build Coastguard Worker    libs = [ "log" ]  # Used by src/google/protobuf/stubs/common.cc
204*6777b538SAndroid Build Coastguard Worker  }
205*6777b538SAndroid Build Coastguard Worker
206*6777b538SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
207*6777b538SAndroid Build Coastguard Worker  configs += [
208*6777b538SAndroid Build Coastguard Worker    "//build/config/compiler:no_chromium_code",
209*6777b538SAndroid Build Coastguard Worker
210*6777b538SAndroid Build Coastguard Worker    # Must be after no_chromium_code for warning flags to be ordered
211*6777b538SAndroid Build Coastguard Worker    # correctly.
212*6777b538SAndroid Build Coastguard Worker    ":protobuf_warnings",
213*6777b538SAndroid Build Coastguard Worker  ]
214*6777b538SAndroid Build Coastguard Worker
215*6777b538SAndroid Build Coastguard Worker  # Remove coverage and Sanitizers other than ASan for a performance boost when
216*6777b538SAndroid Build Coastguard Worker  # fuzzing. ASan can't be removed here because of a bug preventing unsanitized
217*6777b538SAndroid Build Coastguard Worker  # code from using libc++, which protobuf_full uses.
218*6777b538SAndroid Build Coastguard Worker  configs -= not_fuzzed_remove_nonasan_configs
219*6777b538SAndroid Build Coastguard Worker  configs += [ "//build/config/sanitizers:not_fuzzed" ]
220*6777b538SAndroid Build Coastguard Worker
221*6777b538SAndroid Build Coastguard Worker  if (is_win) {
222*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/win:lean_and_mean" ]
223*6777b538SAndroid Build Coastguard Worker  }
224*6777b538SAndroid Build Coastguard Worker  public_configs = [ ":protobuf_config" ]
225*6777b538SAndroid Build Coastguard Worker
226*6777b538SAndroid Build Coastguard Worker  cflags = protobuf_lite_cflags
227*6777b538SAndroid Build Coastguard Worker
228*6777b538SAndroid Build Coastguard Worker  defines = [ "HAVE_ZLIB" ]
229*6777b538SAndroid Build Coastguard Worker}
230*6777b538SAndroid Build Coastguard Worker
231*6777b538SAndroid Build Coastguard Worker# Only compile the compiler for the host architecture.
232*6777b538SAndroid Build Coastguard Workerif (current_toolchain == host_toolchain) {
233*6777b538SAndroid Build Coastguard Worker  # protoc compiler is separated into protoc library and executable targets to
234*6777b538SAndroid Build Coastguard Worker  # support protoc plugins that need to link libprotoc, but not the main()
235*6777b538SAndroid Build Coastguard Worker  # itself. See src/google/protobuf/compiler/plugin.h
236*6777b538SAndroid Build Coastguard Worker  source_set("protoc_java") {
237*6777b538SAndroid Build Coastguard Worker    sources = protoc_java_sources + protoc_java_headers
238*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
239*6777b538SAndroid Build Coastguard Worker    configs += [
240*6777b538SAndroid Build Coastguard Worker      "//build/config/compiler:no_chromium_code",
241*6777b538SAndroid Build Coastguard Worker
242*6777b538SAndroid Build Coastguard Worker      # Must be after no_chromium_code for warning flags to be ordered
243*6777b538SAndroid Build Coastguard Worker      # correctly.
244*6777b538SAndroid Build Coastguard Worker      ":protobuf_warnings",
245*6777b538SAndroid Build Coastguard Worker      ":protoc_warnings",
246*6777b538SAndroid Build Coastguard Worker    ]
247*6777b538SAndroid Build Coastguard Worker
248*6777b538SAndroid Build Coastguard Worker    public_configs = [ ":protobuf_config" ]
249*6777b538SAndroid Build Coastguard Worker
250*6777b538SAndroid Build Coastguard Worker    cflags = protobuf_lite_cflags
251*6777b538SAndroid Build Coastguard Worker
252*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":protobuf_full" ]
253*6777b538SAndroid Build Coastguard Worker  }
254*6777b538SAndroid Build Coastguard Worker  source_set("protoc_python") {
255*6777b538SAndroid Build Coastguard Worker    sources = protoc_python_sources + protoc_python_headers
256*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
257*6777b538SAndroid Build Coastguard Worker    configs += [
258*6777b538SAndroid Build Coastguard Worker      "//build/config/compiler:no_chromium_code",
259*6777b538SAndroid Build Coastguard Worker
260*6777b538SAndroid Build Coastguard Worker      # Must be after no_chromium_code for warning flags to be ordered
261*6777b538SAndroid Build Coastguard Worker      # correctly.
262*6777b538SAndroid Build Coastguard Worker      ":protobuf_warnings",
263*6777b538SAndroid Build Coastguard Worker      ":protoc_warnings",
264*6777b538SAndroid Build Coastguard Worker    ]
265*6777b538SAndroid Build Coastguard Worker
266*6777b538SAndroid Build Coastguard Worker    public_configs = [ ":protobuf_config" ]
267*6777b538SAndroid Build Coastguard Worker
268*6777b538SAndroid Build Coastguard Worker    cflags = protobuf_lite_cflags
269*6777b538SAndroid Build Coastguard Worker
270*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":protobuf_full" ]
271*6777b538SAndroid Build Coastguard Worker  }
272*6777b538SAndroid Build Coastguard Worker  static_library("protoc_lib") {
273*6777b538SAndroid Build Coastguard Worker    sources = protoc_sources + protoc_headers
274*6777b538SAndroid Build Coastguard Worker
275*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
276*6777b538SAndroid Build Coastguard Worker    configs += [
277*6777b538SAndroid Build Coastguard Worker      "//build/config/compiler:no_chromium_code",
278*6777b538SAndroid Build Coastguard Worker
279*6777b538SAndroid Build Coastguard Worker      # Must be after no_chromium_code for warning flags to be ordered
280*6777b538SAndroid Build Coastguard Worker      # correctly.
281*6777b538SAndroid Build Coastguard Worker      ":protobuf_warnings",
282*6777b538SAndroid Build Coastguard Worker      ":protoc_warnings",
283*6777b538SAndroid Build Coastguard Worker    ]
284*6777b538SAndroid Build Coastguard Worker    if (is_win) {
285*6777b538SAndroid Build Coastguard Worker      # This is defined internally, don't warn on duplicate.
286*6777b538SAndroid Build Coastguard Worker      configs -= [ "//build/config/win:lean_and_mean" ]
287*6777b538SAndroid Build Coastguard Worker    }
288*6777b538SAndroid Build Coastguard Worker
289*6777b538SAndroid Build Coastguard Worker    public_configs = [ ":protobuf_config" ]
290*6777b538SAndroid Build Coastguard Worker
291*6777b538SAndroid Build Coastguard Worker    cflags = protobuf_lite_cflags
292*6777b538SAndroid Build Coastguard Worker
293*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":protobuf_full" ]
294*6777b538SAndroid Build Coastguard Worker    deps = [
295*6777b538SAndroid Build Coastguard Worker      ":protoc_java",
296*6777b538SAndroid Build Coastguard Worker      ":protoc_python",
297*6777b538SAndroid Build Coastguard Worker    ]
298*6777b538SAndroid Build Coastguard Worker  }
299*6777b538SAndroid Build Coastguard Worker
300*6777b538SAndroid Build Coastguard Worker  executable("protoc") {
301*6777b538SAndroid Build Coastguard Worker    sources = [ "src/google/protobuf/compiler/main.cc" ]
302*6777b538SAndroid Build Coastguard Worker
303*6777b538SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
304*6777b538SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:no_chromium_code" ]
305*6777b538SAndroid Build Coastguard Worker
306*6777b538SAndroid Build Coastguard Worker    cflags = protobuf_lite_cflags
307*6777b538SAndroid Build Coastguard Worker
308*6777b538SAndroid Build Coastguard Worker    deps = [
309*6777b538SAndroid Build Coastguard Worker      ":protoc_lib",
310*6777b538SAndroid Build Coastguard Worker
311*6777b538SAndroid Build Coastguard Worker      # Default manifest on Windows (a no-op elsewhere).
312*6777b538SAndroid Build Coastguard Worker      "//build/win:default_exe_manifest",
313*6777b538SAndroid Build Coastguard Worker    ]
314*6777b538SAndroid Build Coastguard Worker    if (enable_js_protobuf) {
315*6777b538SAndroid Build Coastguard Worker      deps += [ "//third_party/protobuf-javascript:protoc-gen-js" ]
316*6777b538SAndroid Build Coastguard Worker    }
317*6777b538SAndroid Build Coastguard Worker  }
318*6777b538SAndroid Build Coastguard Worker}
319*6777b538SAndroid Build Coastguard Worker
320*6777b538SAndroid Build Coastguard Workergoogle_python_dir = "$root_out_dir/pyproto/google"
321*6777b538SAndroid Build Coastguard Worker
322*6777b538SAndroid Build Coastguard Workercopy("copy_google_protobuf") {
323*6777b538SAndroid Build Coastguard Worker  # TODO(ncarter): protoc's python generator treats descriptor.proto
324*6777b538SAndroid Build Coastguard Worker  # specially, but only when the input path is exactly
325*6777b538SAndroid Build Coastguard Worker  # "google/protobuf/descriptor.proto".  I'm not sure how to execute a rule
326*6777b538SAndroid Build Coastguard Worker  # from a different directory.  For now, use a manually-generated copy of
327*6777b538SAndroid Build Coastguard Worker  # descriptor_pb2.py.
328*6777b538SAndroid Build Coastguard Worker  sources = pyproto_sources + [ "python/google/protobuf/descriptor_pb2.py" ]
329*6777b538SAndroid Build Coastguard Worker  outputs = [ "$google_python_dir/protobuf/{{source_file_part}}" ]
330*6777b538SAndroid Build Coastguard Worker}
331*6777b538SAndroid Build Coastguard Worker
332*6777b538SAndroid Build Coastguard Workercopy("copy_google_protobuf_internal") {
333*6777b538SAndroid Build Coastguard Worker  sources = pyproto_internal_sources
334*6777b538SAndroid Build Coastguard Worker  outputs = [ "$google_python_dir/protobuf/internal/{{source_file_part}}" ]
335*6777b538SAndroid Build Coastguard Worker}
336*6777b538SAndroid Build Coastguard Worker
337*6777b538SAndroid Build Coastguard Worker# Build time dependency for action rules.
338*6777b538SAndroid Build Coastguard Workergroup("py_proto") {
339*6777b538SAndroid Build Coastguard Worker  public_deps = [
340*6777b538SAndroid Build Coastguard Worker    ":copy_google_protobuf",
341*6777b538SAndroid Build Coastguard Worker    ":copy_google_protobuf_internal",
342*6777b538SAndroid Build Coastguard Worker  ]
343*6777b538SAndroid Build Coastguard Worker}
344*6777b538SAndroid Build Coastguard Worker
345*6777b538SAndroid Build Coastguard Worker# Runtime dependency if the target needs the python scripts.
346*6777b538SAndroid Build Coastguard Workergroup("py_proto_runtime") {
347*6777b538SAndroid Build Coastguard Worker  deps = [ ":py_proto" ]
348*6777b538SAndroid Build Coastguard Worker
349*6777b538SAndroid Build Coastguard Worker  # Targets that depend on this should depend on the copied data files.
350*6777b538SAndroid Build Coastguard Worker  data = get_target_outputs(":copy_google_protobuf")
351*6777b538SAndroid Build Coastguard Worker  data += get_target_outputs(":copy_google_protobuf_internal")
352*6777b538SAndroid Build Coastguard Worker}
353*6777b538SAndroid Build Coastguard Worker
354*6777b538SAndroid Build Coastguard Worker# JS protobuf library.
355*6777b538SAndroid Build Coastguard Workerif (enable_js_protobuf) {
356*6777b538SAndroid Build Coastguard Worker  js_library("js_proto") {
357*6777b538SAndroid Build Coastguard Worker    sources = [
358*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/array/array.js",
359*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/asserts/asserts.js",
360*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/base.js",
361*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/crypt/base64.js",
362*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/crypt/crypt.js",
363*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/debug/error.js",
364*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/asserts.js",
365*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/browserfeature.js",
366*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/dom.js",
367*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/htmlelement.js",
368*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/nodetype.js",
369*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/safe.js",
370*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/tagname.js",
371*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/dom/tags.js",
372*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/fs/blob.js",
373*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/fs/url.js",
374*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/functions/functions.js",
375*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/goog.js",
376*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/safehtml.js",
377*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/safescript.js",
378*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/safestyle.js",
379*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/safestylesheet.js",
380*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/safeurl.js",
381*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/trustedresourceurl.js",
382*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/trustedtypes.js",
383*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/html/uncheckedconversions.js",
384*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/i18n/bidi.js",
385*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/labs/useragent/browser.js",
386*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/labs/useragent/engine.js",
387*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/labs/useragent/platform.js",
388*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/labs/useragent/useragent.js",
389*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/labs/useragent/util.js",
390*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/math/coordinate.js",
391*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/math/math.js",
392*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/math/size.js",
393*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/memoize/memoize.js",
394*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/object/object.js",
395*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/reflect/reflect.js",
396*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/string/const.js",
397*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/string/internal.js",
398*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/string/string.js",
399*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/string/typedstring.js",
400*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/useragent/product.js",
401*6777b538SAndroid Build Coastguard Worker      "//third_party/google-closure-library/closure/goog/useragent/useragent.js",
402*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/asserts.js",
403*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/arith.js",
404*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/constants.js",
405*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/decoder.js",
406*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/encoder.js",
407*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/reader.js",
408*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/utils.js",
409*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/binary/writer.js",
410*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/map.js",
411*6777b538SAndroid Build Coastguard Worker      "//third_party/protobuf-javascript/src/message.js",
412*6777b538SAndroid Build Coastguard Worker    ]
413*6777b538SAndroid Build Coastguard Worker  }
414*6777b538SAndroid Build Coastguard Worker}
415