a b/third_party/protobuf.BUILD
1
# Bazel (https://bazel.build/) BUILD file for Protobuf.
2
3
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library")
4
load("@rules_java//java:defs.bzl", "java_library")
5
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
6
load(":compiler_config_setting.bzl", "create_compiler_config_setting")
7
load(
8
    ":protobuf.bzl",
9
    "cc_proto_library",
10
    "internal_copied_filegroup",
11
    "internal_gen_well_known_protos_java",
12
    "internal_protobuf_py_tests",
13
    "py_proto_library",
14
)
15
16
licenses(["notice"])
17
18
exports_files(["LICENSE"])
19
20
################################################################################
21
# Java 9 configuration
22
################################################################################
23
24
config_setting(
25
    name = "jdk9",
26
    values = {
27
        "java_toolchain": "@bazel_tools//tools/jdk:toolchain_jdk9",
28
    },
29
)
30
31
################################################################################
32
# ZLIB configuration
33
################################################################################
34
35
ZLIB_DEPS = ["@zlib//:zlib"]
36
37
################################################################################
38
# Protobuf Runtime Library
39
################################################################################
40
41
MSVC_COPTS = [
42
    "/DHAVE_PTHREAD",
43
    "/wd4018",  # -Wno-sign-compare
44
    "/wd4065",  # switch statement contains 'default' but no 'case' labels
45
    "/wd4146",  # unary minus operator applied to unsigned type, result still unsigned
46
    "/wd4244",  # 'conversion' conversion from 'type1' to 'type2', possible loss of data
47
    "/wd4251",  # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
48
    "/wd4267",  # 'var' : conversion from 'size_t' to 'type', possible loss of data
49
    "/wd4305",  # 'identifier' : truncation from 'type1' to 'type2'
50
    "/wd4307",  # 'operator' : integral constant overflow
51
    "/wd4309",  # 'conversion' : truncation of constant value
52
    "/wd4334",  # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)
53
    "/wd4355",  # 'this' : used in base member initializer list
54
    "/wd4506",  # no definition for inline function 'function'
55
    "/wd4514",  # -Wno-unused-function
56
    "/wd4800",  # 'type' : forcing value to bool 'true' or 'false' (performance warning)
57
    "/wd4996",  # The compiler encountered a deprecated declaration.
58
]
59
60
COPTS = select({
61
    ":msvc": MSVC_COPTS,
62
    "//conditions:default": [
63
        "-DHAVE_PTHREAD",
64
        "-DHAVE_ZLIB",
65
        "-Woverloaded-virtual",
66
        "-Wno-sign-compare",
67
        "-Wno-unused-function",
68
        # Prevents ISO C++ const string assignment warnings for pyext sources.
69
        "-Wno-write-strings",
70
    ],
71
})
72
73
create_compiler_config_setting(
74
    name = "msvc",
75
    value = "msvc-cl",
76
)
77
78
config_setting(
79
    name = "android",
80
    values = {
81
        "crosstool_top": "//external:android/crosstool",
82
    },
83
)
84
85
config_setting(
86
    name = "android-libcpp",
87
    values = {
88
        "crosstool_top": "@androidndk//:toolchain-libcpp",
89
    },
90
)
91
92
config_setting(
93
    name = "android-gnu-libstdcpp",
94
    values = {
95
        "crosstool_top": "@androidndk//:toolchain-gnu-libstdcpp",
96
    },
97
)
98
99
# Android and MSVC builds do not need to link in a separate pthread library.
100
LINK_OPTS = select({
101
    ":android": [],
102
    ":android-libcpp": [],
103
    ":android-gnu-libstdcpp": [],
104
    ":msvc": [
105
        # Suppress linker warnings about files with no symbols defined.
106
        "-ignore:4221",
107
    ],
108
    "//conditions:default": [
109
        "-lpthread",
110
        "-lm",
111
    ],
112
})
113
114
cc_library(
115
    name = "protobuf_lite",
116
    srcs = [
117
        # AUTOGEN(protobuf_lite_srcs)
118
        "src/google/protobuf/any_lite.cc",
119
        "src/google/protobuf/arena.cc",
120
        "src/google/protobuf/extension_set.cc",
121
        "src/google/protobuf/generated_enum_util.cc",
122
        "src/google/protobuf/generated_message_table_driven_lite.cc",
123
        "src/google/protobuf/generated_message_util.cc",
124
        "src/google/protobuf/implicit_weak_message.cc",
125
        "src/google/protobuf/io/coded_stream.cc",
126
        "src/google/protobuf/io/io_win32.cc",
127
        "src/google/protobuf/io/strtod.cc",
128
        "src/google/protobuf/io/zero_copy_stream.cc",
129
        "src/google/protobuf/io/zero_copy_stream_impl.cc",
130
        "src/google/protobuf/io/zero_copy_stream_impl_lite.cc",
131
        "src/google/protobuf/message_lite.cc",
132
        "src/google/protobuf/parse_context.cc",
133
        "src/google/protobuf/repeated_field.cc",
134
        "src/google/protobuf/stubs/bytestream.cc",
135
        "src/google/protobuf/stubs/common.cc",
136
        "src/google/protobuf/stubs/int128.cc",
137
        "src/google/protobuf/stubs/status.cc",
138
        "src/google/protobuf/stubs/statusor.cc",
139
        "src/google/protobuf/stubs/stringpiece.cc",
140
        "src/google/protobuf/stubs/stringprintf.cc",
141
        "src/google/protobuf/stubs/structurally_valid.cc",
142
        "src/google/protobuf/stubs/strutil.cc",
143
        "src/google/protobuf/stubs/time.cc",
144
        "src/google/protobuf/wire_format_lite.cc",
145
    ],
146
    hdrs = glob([
147
        "src/google/protobuf/**/*.h",
148
        "src/google/protobuf/**/*.inc",
149
    ]),
150
    copts = COPTS,
151
    includes = ["src/"],
152
    linkopts = LINK_OPTS,
153
    visibility = ["//visibility:public"],
154
)
155
156
PROTOBUF_DEPS = select({
157
    ":msvc": [],
158
    "//conditions:default": ZLIB_DEPS,
159
})
160
161
cc_library(
162
    name = "protobuf",
163
    srcs = [
164
        # AUTOGEN(protobuf_srcs)
165
        "src/google/protobuf/any.cc",
166
        "src/google/protobuf/any.pb.cc",
167
        "src/google/protobuf/api.pb.cc",
168
        "src/google/protobuf/compiler/importer.cc",
169
        "src/google/protobuf/compiler/parser.cc",
170
        "src/google/protobuf/descriptor.cc",
171
        "src/google/protobuf/descriptor.pb.cc",
172
        "src/google/protobuf/descriptor_database.cc",
173
        "src/google/protobuf/duration.pb.cc",
174
        "src/google/protobuf/dynamic_message.cc",
175
        "src/google/protobuf/empty.pb.cc",
176
        "src/google/protobuf/extension_set_heavy.cc",
177
        "src/google/protobuf/field_mask.pb.cc",
178
        "src/google/protobuf/generated_message_reflection.cc",
179
        "src/google/protobuf/generated_message_table_driven.cc",
180
        "src/google/protobuf/io/gzip_stream.cc",
181
        "src/google/protobuf/io/printer.cc",
182
        "src/google/protobuf/io/tokenizer.cc",
183
        "src/google/protobuf/map_field.cc",
184
        "src/google/protobuf/message.cc",
185
        "src/google/protobuf/reflection_ops.cc",
186
        "src/google/protobuf/service.cc",
187
        "src/google/protobuf/source_context.pb.cc",
188
        "src/google/protobuf/struct.pb.cc",
189
        "src/google/protobuf/stubs/mathlimits.cc",
190
        "src/google/protobuf/stubs/substitute.cc",
191
        "src/google/protobuf/text_format.cc",
192
        "src/google/protobuf/timestamp.pb.cc",
193
        "src/google/protobuf/type.pb.cc",
194
        "src/google/protobuf/unknown_field_set.cc",
195
        "src/google/protobuf/util/delimited_message_util.cc",
196
        "src/google/protobuf/util/field_comparator.cc",
197
        "src/google/protobuf/util/field_mask_util.cc",
198
        "src/google/protobuf/util/internal/datapiece.cc",
199
        "src/google/protobuf/util/internal/default_value_objectwriter.cc",
200
        "src/google/protobuf/util/internal/error_listener.cc",
201
        "src/google/protobuf/util/internal/field_mask_utility.cc",
202
        "src/google/protobuf/util/internal/json_escaping.cc",
203
        "src/google/protobuf/util/internal/json_objectwriter.cc",
204
        "src/google/protobuf/util/internal/json_stream_parser.cc",
205
        "src/google/protobuf/util/internal/object_writer.cc",
206
        "src/google/protobuf/util/internal/proto_writer.cc",
207
        "src/google/protobuf/util/internal/protostream_objectsource.cc",
208
        "src/google/protobuf/util/internal/protostream_objectwriter.cc",
209
        "src/google/protobuf/util/internal/type_info.cc",
210
        "src/google/protobuf/util/internal/type_info_test_helper.cc",
211
        "src/google/protobuf/util/internal/utility.cc",
212
        "src/google/protobuf/util/json_util.cc",
213
        "src/google/protobuf/util/message_differencer.cc",
214
        "src/google/protobuf/util/time_util.cc",
215
        "src/google/protobuf/util/type_resolver_util.cc",
216
        "src/google/protobuf/wire_format.cc",
217
        "src/google/protobuf/wrappers.pb.cc",
218
    ],
219
    hdrs = glob([
220
        "src/**/*.h",
221
        "src/**/*.inc",
222
    ]),
223
    copts = COPTS,
224
    includes = ["src/"],
225
    linkopts = LINK_OPTS,
226
    visibility = ["//visibility:public"],
227
    deps = [":protobuf_lite"] + PROTOBUF_DEPS,
228
)
229
230
# This provides just the header files for use in projects that need to build
231
# shared libraries for dynamic loading. This target is available until Bazel
232
# adds native support for such use cases.
233
# TODO: Remove this target once the support gets added to Bazel.
234
cc_library(
235
    name = "protobuf_headers",
236
    hdrs = glob([
237
        "src/**/*.h",
238
        "src/**/*.inc",
239
    ]),
240
    includes = ["src/"],
241
    visibility = ["//visibility:public"],
242
)
243
244
# Map of all well known protos.
245
# name => (include path, imports)
246
WELL_KNOWN_PROTO_MAP = {
247
    "any": ("google/protobuf/any.proto", []),
248
    "api": (
249
        "google/protobuf/api.proto",
250
        [
251
            "source_context",
252
            "type",
253
        ],
254
    ),
255
    "compiler_plugin": (
256
        "google/protobuf/compiler/plugin.proto",
257
        ["descriptor"],
258
    ),
259
    "descriptor": ("google/protobuf/descriptor.proto", []),
260
    "duration": ("google/protobuf/duration.proto", []),
261
    "empty": ("google/protobuf/empty.proto", []),
262
    "field_mask": ("google/protobuf/field_mask.proto", []),
263
    "source_context": ("google/protobuf/source_context.proto", []),
264
    "struct": ("google/protobuf/struct.proto", []),
265
    "timestamp": ("google/protobuf/timestamp.proto", []),
266
    "type": (
267
        "google/protobuf/type.proto",
268
        [
269
            "any",
270
            "source_context",
271
        ],
272
    ),
273
    "wrappers": ("google/protobuf/wrappers.proto", []),
274
}
275
276
RELATIVE_WELL_KNOWN_PROTOS = [proto[1][0] for proto in WELL_KNOWN_PROTO_MAP.items()]
277
278
WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
279
280
filegroup(
281
    name = "well_known_protos",
282
    srcs = WELL_KNOWN_PROTOS,
283
    visibility = ["//visibility:public"],
284
)
285
286
cc_proto_library(
287
    name = "cc_wkt_protos",
288
    srcs = WELL_KNOWN_PROTOS,
289
    include = "src",
290
    default_runtime = ":protobuf",
291
    internal_bootstrap_hack = 1,
292
    protoc = ":protoc",
293
    visibility = ["//visibility:public"],
294
)
295
296
################################################################################
297
# Well Known Types Proto Library Rules
298
#
299
# These proto_library rules can be used with one of the language specific proto
300
# library rules i.e. java_proto_library:
301
#
302
# java_proto_library(
303
#   name = "any_java_proto",
304
#   deps = ["@com_google_protobuf//:any_proto],
305
# )
306
################################################################################
307
308
internal_copied_filegroup(
309
    name = "_internal_wkt_protos",
310
    srcs = WELL_KNOWN_PROTOS,
311
    dest = "",
312
    strip_prefix = "src",
313
    visibility = ["//visibility:private"],
314
)
315
316
[proto_library(
317
    name = proto[0] + "_proto",
318
    srcs = [proto[1][0]],
319
    visibility = ["//visibility:public"],
320
    deps = [dep + "_proto" for dep in proto[1][1]],
321
) for proto in WELL_KNOWN_PROTO_MAP.items()]
322
323
################################################################################
324
# Protocol Buffers Compiler
325
################################################################################
326
327
cc_library(
328
    name = "protoc_lib",
329
    srcs = [
330
        # AUTOGEN(protoc_lib_srcs)
331
        "src/google/protobuf/compiler/code_generator.cc",
332
        "src/google/protobuf/compiler/command_line_interface.cc",
333
        "src/google/protobuf/compiler/cpp/cpp_enum.cc",
334
        "src/google/protobuf/compiler/cpp/cpp_enum_field.cc",
335
        "src/google/protobuf/compiler/cpp/cpp_extension.cc",
336
        "src/google/protobuf/compiler/cpp/cpp_field.cc",
337
        "src/google/protobuf/compiler/cpp/cpp_file.cc",
338
        "src/google/protobuf/compiler/cpp/cpp_generator.cc",
339
        "src/google/protobuf/compiler/cpp/cpp_helpers.cc",
340
        "src/google/protobuf/compiler/cpp/cpp_map_field.cc",
341
        "src/google/protobuf/compiler/cpp/cpp_message.cc",
342
        "src/google/protobuf/compiler/cpp/cpp_message_field.cc",
343
        "src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc",
344
        "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc",
345
        "src/google/protobuf/compiler/cpp/cpp_service.cc",
346
        "src/google/protobuf/compiler/cpp/cpp_string_field.cc",
347
        "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc",
348
        "src/google/protobuf/compiler/csharp/csharp_enum.cc",
349
        "src/google/protobuf/compiler/csharp/csharp_enum_field.cc",
350
        "src/google/protobuf/compiler/csharp/csharp_field_base.cc",
351
        "src/google/protobuf/compiler/csharp/csharp_generator.cc",
352
        "src/google/protobuf/compiler/csharp/csharp_helpers.cc",
353
        "src/google/protobuf/compiler/csharp/csharp_map_field.cc",
354
        "src/google/protobuf/compiler/csharp/csharp_message.cc",
355
        "src/google/protobuf/compiler/csharp/csharp_message_field.cc",
356
        "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc",
357
        "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc",
358
        "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc",
359
        "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc",
360
        "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc",
361
        "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc",
362
        "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc",
363
        "src/google/protobuf/compiler/java/java_context.cc",
364
        "src/google/protobuf/compiler/java/java_doc_comment.cc",
365
        "src/google/protobuf/compiler/java/java_enum.cc",
366
        "src/google/protobuf/compiler/java/java_enum_field.cc",
367
        "src/google/protobuf/compiler/java/java_enum_field_lite.cc",
368
        "src/google/protobuf/compiler/java/java_enum_lite.cc",
369
        "src/google/protobuf/compiler/java/java_extension.cc",
370
        "src/google/protobuf/compiler/java/java_extension_lite.cc",
371
        "src/google/protobuf/compiler/java/java_field.cc",
372
        "src/google/protobuf/compiler/java/java_file.cc",
373
        "src/google/protobuf/compiler/java/java_generator.cc",
374
        "src/google/protobuf/compiler/java/java_generator_factory.cc",
375
        "src/google/protobuf/compiler/java/java_helpers.cc",
376
        "src/google/protobuf/compiler/java/java_map_field.cc",
377
        "src/google/protobuf/compiler/java/java_map_field_lite.cc",
378
        "src/google/protobuf/compiler/java/java_message.cc",
379
        "src/google/protobuf/compiler/java/java_message_builder.cc",
380
        "src/google/protobuf/compiler/java/java_message_builder_lite.cc",
381
        "src/google/protobuf/compiler/java/java_message_field.cc",
382
        "src/google/protobuf/compiler/java/java_message_field_lite.cc",
383
        "src/google/protobuf/compiler/java/java_message_lite.cc",
384
        "src/google/protobuf/compiler/java/java_name_resolver.cc",
385
        "src/google/protobuf/compiler/java/java_primitive_field.cc",
386
        "src/google/protobuf/compiler/java/java_primitive_field_lite.cc",
387
        "src/google/protobuf/compiler/java/java_service.cc",
388
        "src/google/protobuf/compiler/java/java_shared_code_generator.cc",
389
        "src/google/protobuf/compiler/java/java_string_field.cc",
390
        "src/google/protobuf/compiler/java/java_string_field_lite.cc",
391
        "src/google/protobuf/compiler/js/js_generator.cc",
392
        "src/google/protobuf/compiler/js/well_known_types_embed.cc",
393
        "src/google/protobuf/compiler/objectivec/objectivec_enum.cc",
394
        "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc",
395
        "src/google/protobuf/compiler/objectivec/objectivec_extension.cc",
396
        "src/google/protobuf/compiler/objectivec/objectivec_field.cc",
397
        "src/google/protobuf/compiler/objectivec/objectivec_file.cc",
398
        "src/google/protobuf/compiler/objectivec/objectivec_generator.cc",
399
        "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc",
400
        "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc",
401
        "src/google/protobuf/compiler/objectivec/objectivec_message.cc",
402
        "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc",
403
        "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc",
404
        "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc",
405
        "src/google/protobuf/compiler/php/php_generator.cc",
406
        "src/google/protobuf/compiler/plugin.cc",
407
        "src/google/protobuf/compiler/plugin.pb.cc",
408
        "src/google/protobuf/compiler/python/python_generator.cc",
409
        "src/google/protobuf/compiler/ruby/ruby_generator.cc",
410
        "src/google/protobuf/compiler/subprocess.cc",
411
        "src/google/protobuf/compiler/zip_writer.cc",
412
    ],
413
    copts = COPTS,
414
    includes = ["src/"],
415
    linkopts = LINK_OPTS + select({
416
        ":msvc": [
417
            # Linking to setargv.obj makes the default command line argument
418
            # parser expand wildcards, so the main method's argv will contain the
419
            # expanded list instead of the wildcards.
420
            #
421
            # Adding placeholder "-DEFAULTLIB:kernel32.lib", because:
422
            # - Microsoft ships this object file next to default libraries
423
            # - but this file is not a library, just a precompiled object
424
            # - "-WHOLEARCHIVE" and "-DEFAULTLIB" only accept library,
425
            #   not precompiled object.
426
            # - Bazel would assume linkopt that does not start with "-" or "$"
427
            #   as a label to a target, so we add a harmless "-DEFAULTLIB:kernel32.lib"
428
            #   before "setargv.obj".
429
            # See https://msdn.microsoft.com/en-us/library/8bch7bkk.aspx
430
            "-DEFAULTLIB:kernel32.lib setargv.obj",
431
        ],
432
        "//conditions:default": [],
433
    }),
434
    visibility = ["//visibility:public"],
435
    deps = [":protobuf"],
436
)
437
438
cc_binary(
439
    name = "protoc",
440
    srcs = ["src/google/protobuf/compiler/main.cc"],
441
    linkopts = LINK_OPTS,
442
    visibility = ["//visibility:public"],
443
    deps = [":protoc_lib"],
444
)
445
446
################################################################################
447
# Tests
448
################################################################################
449
450
RELATIVE_LITE_TEST_PROTOS = [
451
    # AUTOGEN(lite_test_protos)
452
    "google/protobuf/map_lite_unittest.proto",
453
    "google/protobuf/unittest_import_lite.proto",
454
    "google/protobuf/unittest_import_public_lite.proto",
455
    "google/protobuf/unittest_lite.proto",
456
    "google/protobuf/unittest_no_arena_lite.proto",
457
]
458
459
LITE_TEST_PROTOS = ["src/" + s for s in RELATIVE_LITE_TEST_PROTOS]
460
461
RELATIVE_TEST_PROTOS = [
462
    # AUTOGEN(test_protos)
463
    "google/protobuf/any_test.proto",
464
    "google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto",
465
    "google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto",
466
    "google/protobuf/map_proto2_unittest.proto",
467
    "google/protobuf/map_unittest.proto",
468
    "google/protobuf/unittest.proto",
469
    "google/protobuf/unittest_arena.proto",
470
    "google/protobuf/unittest_custom_options.proto",
471
    "google/protobuf/unittest_drop_unknown_fields.proto",
472
    "google/protobuf/unittest_embed_optimize_for.proto",
473
    "google/protobuf/unittest_empty.proto",
474
    "google/protobuf/unittest_enormous_descriptor.proto",
475
    "google/protobuf/unittest_import.proto",
476
    "google/protobuf/unittest_import_public.proto",
477
    "google/protobuf/unittest_lazy_dependencies.proto",
478
    "google/protobuf/unittest_lazy_dependencies_custom_option.proto",
479
    "google/protobuf/unittest_lazy_dependencies_enum.proto",
480
    "google/protobuf/unittest_lite_imports_nonlite.proto",
481
    "google/protobuf/unittest_mset.proto",
482
    "google/protobuf/unittest_mset_wire_format.proto",
483
    "google/protobuf/unittest_no_arena.proto",
484
    "google/protobuf/unittest_no_arena_import.proto",
485
    "google/protobuf/unittest_no_field_presence.proto",
486
    "google/protobuf/unittest_no_generic_services.proto",
487
    "google/protobuf/unittest_optimize_for.proto",
488
    "google/protobuf/unittest_preserve_unknown_enum.proto",
489
    "google/protobuf/unittest_preserve_unknown_enum2.proto",
490
    "google/protobuf/unittest_proto3.proto",
491
    "google/protobuf/unittest_proto3_arena.proto",
492
    "google/protobuf/unittest_proto3_arena_lite.proto",
493
    "google/protobuf/unittest_proto3_lite.proto",
494
    "google/protobuf/unittest_well_known_types.proto",
495
    "google/protobuf/util/internal/testdata/anys.proto",
496
    "google/protobuf/util/internal/testdata/books.proto",
497
    "google/protobuf/util/internal/testdata/default_value.proto",
498
    "google/protobuf/util/internal/testdata/default_value_test.proto",
499
    "google/protobuf/util/internal/testdata/field_mask.proto",
500
    "google/protobuf/util/internal/testdata/maps.proto",
501
    "google/protobuf/util/internal/testdata/oneofs.proto",
502
    "google/protobuf/util/internal/testdata/proto3.proto",
503
    "google/protobuf/util/internal/testdata/struct.proto",
504
    "google/protobuf/util/internal/testdata/timestamp_duration.proto",
505
    "google/protobuf/util/internal/testdata/wrappers.proto",
506
    "google/protobuf/util/json_format.proto",
507
    "google/protobuf/util/json_format_proto3.proto",
508
    "google/protobuf/util/message_differencer_unittest.proto",
509
]
510
511
TEST_PROTOS = ["src/" + s for s in RELATIVE_TEST_PROTOS]
512
513
cc_proto_library(
514
    name = "cc_test_protos",
515
    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
516
    include = "src",
517
    default_runtime = ":protobuf",
518
    protoc = ":protoc",
519
    deps = [":cc_wkt_protos"],
520
)
521
522
COMMON_TEST_SRCS = [
523
    # AUTOGEN(common_test_srcs)
524
    "src/google/protobuf/arena_test_util.cc",
525
    "src/google/protobuf/map_test_util.cc",
526
    "src/google/protobuf/test_util.cc",
527
    "src/google/protobuf/test_util.inc",
528
    "src/google/protobuf/testing/file.cc",
529
    "src/google/protobuf/testing/googletest.cc",
530
]
531
532
cc_binary(
533
    name = "test_plugin",
534
    srcs = [
535
        # AUTOGEN(test_plugin_srcs)
536
        "src/google/protobuf/compiler/mock_code_generator.cc",
537
        "src/google/protobuf/compiler/test_plugin.cc",
538
        "src/google/protobuf/testing/file.cc",
539
    ],
540
    deps = [
541
        ":protobuf",
542
        ":protoc_lib",
543
        "//external:gtest",
544
    ],
545
)
546
547
cc_test(
548
    name = "win32_test",
549
    srcs = ["src/google/protobuf/io/io_win32_unittest.cc"],
550
    tags = [
551
        "manual",
552
        "windows",
553
    ],
554
    deps = [
555
        ":protobuf_lite",
556
        "//external:gtest_main",
557
    ],
558
)
559
560
cc_test(
561
    name = "protobuf_test",
562
    srcs = COMMON_TEST_SRCS + [
563
        # AUTOGEN(test_srcs)
564
        "src/google/protobuf/any_test.cc",
565
        "src/google/protobuf/arena_unittest.cc",
566
        "src/google/protobuf/arenastring_unittest.cc",
567
        "src/google/protobuf/compiler/annotation_test_util.cc",
568
        "src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc",
569
        "src/google/protobuf/compiler/cpp/cpp_move_unittest.cc",
570
        "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc",
571
        "src/google/protobuf/compiler/cpp/cpp_unittest.cc",
572
        "src/google/protobuf/compiler/cpp/cpp_unittest.inc",
573
        "src/google/protobuf/compiler/cpp/metadata_test.cc",
574
        "src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc",
575
        "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc",
576
        "src/google/protobuf/compiler/importer_unittest.cc",
577
        "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc",
578
        "src/google/protobuf/compiler/java/java_plugin_unittest.cc",
579
        "src/google/protobuf/compiler/mock_code_generator.cc",
580
        "src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc",
581
        "src/google/protobuf/compiler/parser_unittest.cc",
582
        "src/google/protobuf/compiler/python/python_plugin_unittest.cc",
583
        "src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc",
584
        "src/google/protobuf/descriptor_database_unittest.cc",
585
        "src/google/protobuf/descriptor_unittest.cc",
586
        "src/google/protobuf/drop_unknown_fields_test.cc",
587
        "src/google/protobuf/dynamic_message_unittest.cc",
588
        "src/google/protobuf/extension_set_unittest.cc",
589
        "src/google/protobuf/generated_message_reflection_unittest.cc",
590
        "src/google/protobuf/io/coded_stream_unittest.cc",
591
        "src/google/protobuf/io/io_win32_unittest.cc",
592
        "src/google/protobuf/io/printer_unittest.cc",
593
        "src/google/protobuf/io/tokenizer_unittest.cc",
594
        "src/google/protobuf/io/zero_copy_stream_unittest.cc",
595
        "src/google/protobuf/map_field_test.cc",
596
        "src/google/protobuf/map_test.cc",
597
        "src/google/protobuf/message_unittest.cc",
598
        "src/google/protobuf/message_unittest.inc",
599
        "src/google/protobuf/no_field_presence_test.cc",
600
        "src/google/protobuf/preserve_unknown_enum_test.cc",
601
        "src/google/protobuf/proto3_arena_lite_unittest.cc",
602
        "src/google/protobuf/proto3_arena_unittest.cc",
603
        "src/google/protobuf/proto3_lite_unittest.cc",
604
        "src/google/protobuf/proto3_lite_unittest.inc",
605
        "src/google/protobuf/reflection_ops_unittest.cc",
606
        "src/google/protobuf/repeated_field_reflection_unittest.cc",
607
        "src/google/protobuf/repeated_field_unittest.cc",
608
        "src/google/protobuf/stubs/bytestream_unittest.cc",
609
        "src/google/protobuf/stubs/common_unittest.cc",
610
        "src/google/protobuf/stubs/int128_unittest.cc",
611
        "src/google/protobuf/stubs/status_test.cc",
612
        "src/google/protobuf/stubs/statusor_test.cc",
613
        "src/google/protobuf/stubs/stringpiece_unittest.cc",
614
        "src/google/protobuf/stubs/stringprintf_unittest.cc",
615
        "src/google/protobuf/stubs/structurally_valid_unittest.cc",
616
        "src/google/protobuf/stubs/strutil_unittest.cc",
617
        "src/google/protobuf/stubs/template_util_unittest.cc",
618
        "src/google/protobuf/stubs/time_test.cc",
619
        "src/google/protobuf/text_format_unittest.cc",
620
        "src/google/protobuf/unknown_field_set_unittest.cc",
621
        "src/google/protobuf/util/delimited_message_util_test.cc",
622
        "src/google/protobuf/util/field_comparator_test.cc",
623
        "src/google/protobuf/util/field_mask_util_test.cc",
624
        "src/google/protobuf/util/internal/default_value_objectwriter_test.cc",
625
        "src/google/protobuf/util/internal/json_objectwriter_test.cc",
626
        "src/google/protobuf/util/internal/json_stream_parser_test.cc",
627
        "src/google/protobuf/util/internal/protostream_objectsource_test.cc",
628
        "src/google/protobuf/util/internal/protostream_objectwriter_test.cc",
629
        "src/google/protobuf/util/internal/type_info_test_helper.cc",
630
        "src/google/protobuf/util/json_util_test.cc",
631
        "src/google/protobuf/util/message_differencer_unittest.cc",
632
        "src/google/protobuf/util/time_util_test.cc",
633
        "src/google/protobuf/util/type_resolver_util_test.cc",
634
        "src/google/protobuf/well_known_types_unittest.cc",
635
        "src/google/protobuf/wire_format_unittest.cc",
636
    ] + select({
637
        "//conditions:default": [
638
            # Doesn't pass on Windows with MSVC
639
            "src/google/protobuf/compiler/command_line_interface_unittest.cc",
640
        ],
641
        ":msvc": [],
642
    }),
643
    copts = COPTS,
644
    data = [
645
        ":test_plugin",
646
    ] + glob([
647
        "src/google/protobuf/**/*",
648
        # Files for csharp_bootstrap_unittest.cc.
649
        "conformance/**/*",
650
        "csharp/src/**/*",
651
    ]),
652
    includes = [
653
        "src/",
654
    ],
655
    linkopts = LINK_OPTS,
656
    deps = [
657
        ":cc_test_protos",
658
        ":protobuf",
659
        ":protoc_lib",
660
        "//external:gtest_main",
661
    ] + PROTOBUF_DEPS,
662
)
663
664
################################################################################
665
# Java support
666
################################################################################
667
internal_gen_well_known_protos_java(
668
    srcs = WELL_KNOWN_PROTOS,
669
)
670
671
java_library(
672
    name = "protobuf_java",
673
    srcs = glob([
674
        "java/core/src/main/java/com/google/protobuf/*.java",
675
    ]) + [
676
        ":gen_well_known_protos_java",
677
    ],
678
    javacopts = select({
679
        "//:jdk9": ["--add-modules=jdk.unsupported"],
680
        "//conditions:default": [
681
            "-source 7",
682
            "-target 7",
683
        ],
684
    }),
685
    visibility = ["//visibility:public"],
686
)
687
688
java_library(
689
    name = "protobuf_javalite",
690
    srcs = [
691
        # Keep in sync with java/lite/pom.xml
692
        "java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java",
693
        "java/core/src/main/java/com/google/protobuf/AbstractParser.java",
694
        "java/core/src/main/java/com/google/protobuf/AbstractProtobufList.java",
695
        "java/core/src/main/java/com/google/protobuf/AllocatedBuffer.java",
696
        "java/core/src/main/java/com/google/protobuf/Android.java",
697
        "java/core/src/main/java/com/google/protobuf/ArrayDecoders.java",
698
        "java/core/src/main/java/com/google/protobuf/BinaryReader.java",
699
        "java/core/src/main/java/com/google/protobuf/BinaryWriter.java",
700
        "java/core/src/main/java/com/google/protobuf/BooleanArrayList.java",
701
        "java/core/src/main/java/com/google/protobuf/BufferAllocator.java",
702
        "java/core/src/main/java/com/google/protobuf/ByteBufferWriter.java",
703
        "java/core/src/main/java/com/google/protobuf/ByteOutput.java",
704
        "java/core/src/main/java/com/google/protobuf/ByteString.java",
705
        "java/core/src/main/java/com/google/protobuf/CodedInputStream.java",
706
        "java/core/src/main/java/com/google/protobuf/CodedInputStreamReader.java",
707
        "java/core/src/main/java/com/google/protobuf/CodedOutputStream.java",
708
        "java/core/src/main/java/com/google/protobuf/CodedOutputStreamWriter.java",
709
        "java/core/src/main/java/com/google/protobuf/DoubleArrayList.java",
710
        "java/core/src/main/java/com/google/protobuf/ExperimentalApi.java",
711
        "java/core/src/main/java/com/google/protobuf/ExtensionLite.java",
712
        "java/core/src/main/java/com/google/protobuf/ExtensionRegistryFactory.java",
713
        "java/core/src/main/java/com/google/protobuf/ExtensionRegistryLite.java",
714
        "java/core/src/main/java/com/google/protobuf/ExtensionSchema.java",
715
        "java/core/src/main/java/com/google/protobuf/ExtensionSchemaLite.java",
716
        "java/core/src/main/java/com/google/protobuf/ExtensionSchemas.java",
717
        "java/core/src/main/java/com/google/protobuf/FieldInfo.java",
718
        "java/core/src/main/java/com/google/protobuf/FieldSet.java",
719
        "java/core/src/main/java/com/google/protobuf/FieldType.java",
720
        "java/core/src/main/java/com/google/protobuf/FloatArrayList.java",
721
        "java/core/src/main/java/com/google/protobuf/GeneratedMessageInfoFactory.java",
722
        "java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java",
723
        "java/core/src/main/java/com/google/protobuf/IntArrayList.java",
724
        "java/core/src/main/java/com/google/protobuf/Internal.java",
725
        "java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java",
726
        "java/core/src/main/java/com/google/protobuf/IterableByteBufferInputStream.java",
727
        "java/core/src/main/java/com/google/protobuf/JavaType.java",
728
        "java/core/src/main/java/com/google/protobuf/LazyField.java",
729
        "java/core/src/main/java/com/google/protobuf/LazyFieldLite.java",
730
        "java/core/src/main/java/com/google/protobuf/LazyStringArrayList.java",
731
        "java/core/src/main/java/com/google/protobuf/LazyStringList.java",
732
        "java/core/src/main/java/com/google/protobuf/ListFieldSchema.java",
733
        "java/core/src/main/java/com/google/protobuf/LongArrayList.java",
734
        "java/core/src/main/java/com/google/protobuf/ManifestSchemaFactory.java",
735
        "java/core/src/main/java/com/google/protobuf/MapEntryLite.java",
736
        "java/core/src/main/java/com/google/protobuf/MapFieldLite.java",
737
        "java/core/src/main/java/com/google/protobuf/MapFieldSchema.java",
738
        "java/core/src/main/java/com/google/protobuf/MapFieldSchemaLite.java",
739
        "java/core/src/main/java/com/google/protobuf/MapFieldSchemas.java",
740
        "java/core/src/main/java/com/google/protobuf/MessageInfo.java",
741
        "java/core/src/main/java/com/google/protobuf/MessageInfoFactory.java",
742
        "java/core/src/main/java/com/google/protobuf/MessageLite.java",
743
        "java/core/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java",
744
        "java/core/src/main/java/com/google/protobuf/MessageLiteToString.java",
745
        "java/core/src/main/java/com/google/protobuf/MessageSchema.java",
746
        "java/core/src/main/java/com/google/protobuf/MessageSetSchema.java",
747
        "java/core/src/main/java/com/google/protobuf/MutabilityOracle.java",
748
        "java/core/src/main/java/com/google/protobuf/NewInstanceSchema.java",
749
        "java/core/src/main/java/com/google/protobuf/NewInstanceSchemaLite.java",
750
        "java/core/src/main/java/com/google/protobuf/NewInstanceSchemas.java",
751
        "java/core/src/main/java/com/google/protobuf/NioByteString.java",
752
        "java/core/src/main/java/com/google/protobuf/OneofInfo.java",
753
        "java/core/src/main/java/com/google/protobuf/Parser.java",
754
        "java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java",
755
        "java/core/src/main/java/com/google/protobuf/ProtoSyntax.java",
756
        "java/core/src/main/java/com/google/protobuf/Protobuf.java",
757
        "java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java",
758
        "java/core/src/main/java/com/google/protobuf/ProtobufLists.java",
759
        "java/core/src/main/java/com/google/protobuf/ProtocolStringList.java",
760
        "java/core/src/main/java/com/google/protobuf/RawMessageInfo.java",
761
        "java/core/src/main/java/com/google/protobuf/Reader.java",
762
        "java/core/src/main/java/com/google/protobuf/RopeByteString.java",
763
        "java/core/src/main/java/com/google/protobuf/Schema.java",
764
        "java/core/src/main/java/com/google/protobuf/SchemaFactory.java",
765
        "java/core/src/main/java/com/google/protobuf/SchemaUtil.java",
766
        "java/core/src/main/java/com/google/protobuf/SmallSortedMap.java",
767
        "java/core/src/main/java/com/google/protobuf/StructuralMessageInfo.java",
768
        "java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java",
769
        "java/core/src/main/java/com/google/protobuf/UninitializedMessageException.java",
770
        "java/core/src/main/java/com/google/protobuf/UnknownFieldSchema.java",
771
        "java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java",
772
        "java/core/src/main/java/com/google/protobuf/UnknownFieldSetLiteSchema.java",
773
        "java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java",
774
        "java/core/src/main/java/com/google/protobuf/UnsafeUtil.java",
775
        "java/core/src/main/java/com/google/protobuf/Utf8.java",
776
        "java/core/src/main/java/com/google/protobuf/WireFormat.java",
777
        "java/core/src/main/java/com/google/protobuf/Writer.java",
778
    ],
779
    javacopts = select({
780
        "//:jdk9": ["--add-modules=jdk.unsupported"],
781
        "//conditions:default": [
782
            "-source 7",
783
            "-target 7",
784
        ],
785
    }),
786
    visibility = ["//visibility:public"],
787
)
788
789
java_library(
790
    name = "protobuf_java_util",
791
    srcs = glob([
792
        "java/util/src/main/java/com/google/protobuf/util/*.java",
793
    ]),
794
    javacopts = [
795
        "-source 7",
796
        "-target 7",
797
    ],
798
    visibility = ["//visibility:public"],
799
    deps = [
800
        "protobuf_java",
801
        "//external:error_prone_annotations",
802
        "//external:gson",
803
        "//external:guava",
804
    ],
805
)
806
807
################################################################################
808
# Python support
809
################################################################################
810
811
py_library(
812
    name = "python_srcs",
813
    srcs = glob(
814
        [
815
            "python/google/__init__.py",
816
            "python/google/protobuf/*.py",
817
            "python/google/protobuf/**/*.py",
818
        ],
819
        exclude = [
820
            "python/google/protobuf/__init__.py",
821
            "python/google/protobuf/**/__init__.py",
822
            "python/google/protobuf/internal/*_test.py",
823
            "python/google/protobuf/internal/test_util.py",
824
        ],
825
    ),
826
    imports = ["python"],
827
    srcs_version = "PY2AND3",
828
)
829
830
cc_binary(
831
    name = "python/google/protobuf/internal/_api_implementation.so",
832
    srcs = ["python/google/protobuf/internal/api_implementation.cc"],
833
    copts = COPTS + [
834
        "-DPYTHON_PROTO2_CPP_IMPL_V2",
835
    ],
836
    linkshared = 1,
837
    linkstatic = 1,
838
    deps = select({
839
        "//conditions:default": [],
840
        ":use_fast_cpp_protos": ["//external:python_headers"],
841
    }),
842
)
843
844
cc_binary(
845
    name = "python/google/protobuf/pyext/_message.so",
846
    srcs = ["@com_google_deepvariant//third_party/nucleus/core:message_module.cc"] + glob(
847
        [
848
            "python/google/protobuf/pyext/*.cc",
849
            "python/google/protobuf/pyext/*.h",
850
        ],
851
        exclude = ["python/google/protobuf/pyext/message_module.cc"],
852
    ),
853
    copts = COPTS + [
854
        "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
855
    ] + select({
856
        "//conditions:default": [],
857
        ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
858
    }),
859
    includes = [
860
        "python/",
861
        "src/",
862
    ],
863
    linkshared = 1,
864
    linkstatic = 1,
865
    visibility = ["//visibility:public"],
866
    deps = [
867
        ":protobuf",
868
        ":proto_api",
869
        # The below Nucleus-specific dependencies cause its protobuf descriptors
870
        # to be loaded into the  DescriptorPool managed by _message.so and put
871
        # all Nucleus C++ extensions here to avoid ODR violations. See
872
        # an internal document for more details.
873
        "@//third_party/nucleus/protos:all_nucleus_protos_cc",
874
        # Include all C++ extensions here, so that there is only one
875
        # C++ extension and we avoid ODR violations.
876
        "@//:all_extensions",
877
    ] + select({
878
        "//conditions:default": [],
879
        ":use_fast_cpp_protos": ["//external:python_headers"],
880
    }),
881
)
882
883
config_setting(
884
    name = "use_fast_cpp_protos",
885
    values = {
886
        "define": "use_fast_cpp_protos=true",
887
    },
888
)
889
890
config_setting(
891
    name = "allow_oversize_protos",
892
    values = {
893
        "define": "allow_oversize_protos=true",
894
    },
895
)
896
897
# Copy the builtin proto files from src/google/protobuf to
898
# python/google/protobuf. This way, the generated Python sources will be in the
899
# same directory as the Python runtime sources. This is necessary for the
900
# modules to be imported correctly since they are all part of the same Python
901
# package.
902
internal_copied_filegroup(
903
    name = "protos_python",
904
    srcs = WELL_KNOWN_PROTOS,
905
    dest = "python",
906
    strip_prefix = "src",
907
)
908
909
# TODO: Remove this once py_proto_library can have labels in srcs, in
910
# which case we can simply add :protos_python in srcs.
911
COPIED_WELL_KNOWN_PROTOS = ["python/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
912
913
py_proto_library(
914
    name = "protobuf_python",
915
    srcs = COPIED_WELL_KNOWN_PROTOS,
916
    include = "python",
917
    data = select({
918
        "//conditions:default": [],
919
        ":use_fast_cpp_protos": [
920
            ":python/google/protobuf/internal/_api_implementation.so",
921
            ":python/google/protobuf/pyext/_message.so",
922
        ],
923
    }),
924
    default_runtime = "",
925
    protoc = ":protoc",
926
    py_extra_srcs = glob(["python/**/__init__.py"]),
927
    py_libs = [
928
        ":python_srcs",
929
        "//external:six",
930
    ],
931
    srcs_version = "PY2AND3",
932
    visibility = ["//visibility:public"],
933
)
934
935
# Copy the test proto files from src/google/protobuf to
936
# python/google/protobuf. This way, the generated Python sources will be in the
937
# same directory as the Python runtime sources. This is necessary for the
938
# modules to be imported correctly by the tests since they are all part of the
939
# same Python package.
940
internal_copied_filegroup(
941
    name = "protos_python_test",
942
    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
943
    dest = "python",
944
    strip_prefix = "src",
945
)
946
947
# TODO: Remove this once py_proto_library can have labels in srcs, in
948
# which case we can simply add :protos_python_test in srcs.
949
COPIED_LITE_TEST_PROTOS = ["python/" + s for s in RELATIVE_LITE_TEST_PROTOS]
950
951
COPIED_TEST_PROTOS = ["python/" + s for s in RELATIVE_TEST_PROTOS]
952
953
py_proto_library(
954
    name = "python_common_test_protos",
955
    srcs = COPIED_LITE_TEST_PROTOS + COPIED_TEST_PROTOS,
956
    include = "python",
957
    default_runtime = "",
958
    protoc = ":protoc",
959
    srcs_version = "PY2AND3",
960
    deps = [":protobuf_python"],
961
)
962
963
py_proto_library(
964
    name = "python_specific_test_protos",
965
    srcs = glob([
966
        "python/google/protobuf/internal/*.proto",
967
        "python/google/protobuf/internal/import_test_package/*.proto",
968
    ]),
969
    include = "python",
970
    default_runtime = ":protobuf_python",
971
    protoc = ":protoc",
972
    srcs_version = "PY2AND3",
973
    deps = [":python_common_test_protos"],
974
)
975
976
py_library(
977
    name = "python_tests",
978
    srcs = glob(
979
        [
980
            "python/google/protobuf/internal/*_test.py",
981
            "python/google/protobuf/internal/test_util.py",
982
            "python/google/protobuf/internal/import_test_package/__init__.py",
983
        ],
984
    ),
985
    imports = ["python"],
986
    srcs_version = "PY2AND3",
987
    deps = [
988
        ":protobuf_python",
989
        ":python_common_test_protos",
990
        ":python_specific_test_protos",
991
    ],
992
)
993
994
internal_protobuf_py_tests(
995
    name = "python_tests_batch",
996
    data = glob([
997
        "src/google/protobuf/**/*",
998
    ]),
999
    modules = [
1000
        "descriptor_database_test",
1001
        "descriptor_pool_test",
1002
        "descriptor_test",
1003
        "generator_test",
1004
        "json_format_test",
1005
        "message_factory_test",
1006
        "message_test",
1007
        "proto_builder_test",
1008
        "reflection_test",
1009
        "service_reflection_test",
1010
        "symbol_database_test",
1011
        "text_encoding_test",
1012
        "text_format_test",
1013
        "unknown_fields_test",
1014
        "wire_format_test",
1015
    ],
1016
    deps = [":python_tests"],
1017
)
1018
1019
cc_library(
1020
    name = "proto_api",
1021
    hdrs = ["python/google/protobuf/proto_api.h"],
1022
    visibility = ["//visibility:public"],
1023
    deps = [
1024
        "//external:python_headers",
1025
    ],
1026
)
1027
1028
proto_lang_toolchain(
1029
    name = "cc_toolchain",
1030
    blacklisted_protos = [":_internal_wkt_protos_genrule"],
1031
    command_line = "--cpp_out=$(OUT)",
1032
    runtime = ":protobuf",
1033
    visibility = ["//visibility:public"],
1034
)
1035
1036
proto_lang_toolchain(
1037
    name = "java_toolchain",
1038
    command_line = "--java_out=$(OUT)",
1039
    runtime = ":protobuf_java",
1040
    visibility = ["//visibility:public"],
1041
)
1042
1043
alias(
1044
    name = "objectivec",
1045
    actual = ":protobuf_objc",
1046
    visibility = ["//visibility:public"],
1047
)
1048
1049
objc_library(
1050
    name = "protobuf_objc",
1051
    hdrs = [
1052
        "objectivec/GPBArray.h",
1053
        "objectivec/GPBBootstrap.h",
1054
        "objectivec/GPBCodedInputStream.h",
1055
        "objectivec/GPBCodedOutputStream.h",
1056
        "objectivec/GPBDescriptor.h",
1057
        "objectivec/GPBDictionary.h",
1058
        "objectivec/GPBExtensionInternals.h",
1059
        "objectivec/GPBExtensionRegistry.h",
1060
        "objectivec/GPBMessage.h",
1061
        "objectivec/GPBProtocolBuffers.h",
1062
        "objectivec/GPBProtocolBuffers_RuntimeSupport.h",
1063
        "objectivec/GPBRootObject.h",
1064
        "objectivec/GPBRuntimeTypes.h",
1065
        "objectivec/GPBUnknownField.h",
1066
        "objectivec/GPBUnknownFieldSet.h",
1067
        "objectivec/GPBUtilities.h",
1068
        "objectivec/GPBWellKnownTypes.h",
1069
        "objectivec/GPBWireFormat.h",
1070
        "objectivec/google/protobuf/Any.pbobjc.h",
1071
        "objectivec/google/protobuf/Api.pbobjc.h",
1072
        "objectivec/google/protobuf/Duration.pbobjc.h",
1073
        "objectivec/google/protobuf/Empty.pbobjc.h",
1074
        "objectivec/google/protobuf/FieldMask.pbobjc.h",
1075
        "objectivec/google/protobuf/SourceContext.pbobjc.h",
1076
        "objectivec/google/protobuf/Struct.pbobjc.h",
1077
        "objectivec/google/protobuf/Timestamp.pbobjc.h",
1078
        "objectivec/google/protobuf/Type.pbobjc.h",
1079
        "objectivec/google/protobuf/Wrappers.pbobjc.h",
1080
        # Package private headers, but exposed because the generated sources
1081
        # need to use them.
1082
        "objectivec/GPBArray_PackagePrivate.h",
1083
        "objectivec/GPBCodedInputStream_PackagePrivate.h",
1084
        "objectivec/GPBCodedOutputStream_PackagePrivate.h",
1085
        "objectivec/GPBDescriptor_PackagePrivate.h",
1086
        "objectivec/GPBDictionary_PackagePrivate.h",
1087
        "objectivec/GPBMessage_PackagePrivate.h",
1088
        "objectivec/GPBRootObject_PackagePrivate.h",
1089
        "objectivec/GPBUnknownFieldSet_PackagePrivate.h",
1090
        "objectivec/GPBUnknownField_PackagePrivate.h",
1091
        "objectivec/GPBUtilities_PackagePrivate.h",
1092
    ],
1093
    copts = [
1094
        "-Wno-vla",
1095
    ],
1096
    includes = [
1097
        "objectivec",
1098
    ],
1099
    non_arc_srcs = [
1100
        "objectivec/GPBArray.m",
1101
        "objectivec/GPBCodedInputStream.m",
1102
        "objectivec/GPBCodedOutputStream.m",
1103
        "objectivec/GPBDescriptor.m",
1104
        "objectivec/GPBDictionary.m",
1105
        "objectivec/GPBExtensionInternals.m",
1106
        "objectivec/GPBExtensionRegistry.m",
1107
        "objectivec/GPBMessage.m",
1108
        "objectivec/GPBRootObject.m",
1109
        "objectivec/GPBUnknownField.m",
1110
        "objectivec/GPBUnknownFieldSet.m",
1111
        "objectivec/GPBUtilities.m",
1112
        "objectivec/GPBWellKnownTypes.m",
1113
        "objectivec/GPBWireFormat.m",
1114
        "objectivec/google/protobuf/Any.pbobjc.m",
1115
        "objectivec/google/protobuf/Api.pbobjc.m",
1116
        "objectivec/google/protobuf/Duration.pbobjc.m",
1117
        "objectivec/google/protobuf/Empty.pbobjc.m",
1118
        "objectivec/google/protobuf/FieldMask.pbobjc.m",
1119
        "objectivec/google/protobuf/SourceContext.pbobjc.m",
1120
        "objectivec/google/protobuf/Struct.pbobjc.m",
1121
        "objectivec/google/protobuf/Timestamp.pbobjc.m",
1122
        "objectivec/google/protobuf/Type.pbobjc.m",
1123
        "objectivec/google/protobuf/Wrappers.pbobjc.m",
1124
    ],
1125
    visibility = ["//visibility:public"],
1126
)
1127
1128
################################################################################
1129
# Test generated proto support
1130
################################################################################
1131
1132
genrule(
1133
    name = "generated_protos",
1134
    srcs = ["src/google/protobuf/unittest_import.proto"],
1135
    outs = ["unittest_gen.proto"],
1136
    cmd = "cat $(SRCS) | sed 's|google/|src/google/|' >  $(OUTS)",
1137
)
1138
1139
proto_library(
1140
    name = "generated_protos_proto",
1141
    srcs = [
1142
        "src/google/protobuf/unittest_import_public.proto",
1143
        "unittest_gen.proto",
1144
    ],
1145
)
1146
1147
py_proto_library(
1148
    name = "generated_protos_py",
1149
    srcs = [
1150
        "src/google/protobuf/unittest_import_public.proto",
1151
        "unittest_gen.proto",
1152
    ],
1153
    default_runtime = "",
1154
    protoc = ":protoc",
1155
)
1156
1157
################################################################################
1158
# Conformance tests
1159
################################################################################
1160
1161
proto_library(
1162
    name = "test_messages_proto2_proto",
1163
    srcs = ["src/google/protobuf/test_messages_proto2.proto"],
1164
    visibility = ["//visibility:public"],
1165
)
1166
1167
proto_library(
1168
    name = "test_messages_proto3_proto",
1169
    srcs = ["src/google/protobuf/test_messages_proto3.proto"],
1170
    visibility = ["//visibility:public"],
1171
    deps = [
1172
        ":any_proto",
1173
        ":duration_proto",
1174
        ":field_mask_proto",
1175
        ":struct_proto",
1176
        ":timestamp_proto",
1177
        ":wrappers_proto",
1178
    ],
1179
)
1180
1181
cc_proto_library(
1182
    name = "test_messages_proto2_proto_cc",
1183
    srcs = ["src/google/protobuf/test_messages_proto2.proto"],
1184
)
1185
1186
cc_proto_library(
1187
    name = "test_messages_proto3_proto_cc",
1188
    srcs = ["src/google/protobuf/test_messages_proto3.proto"],
1189
    deps = [
1190
        ":cc_wkt_protos",
1191
    ],
1192
)
1193
1194
proto_library(
1195
    name = "conformance_proto",
1196
    srcs = ["conformance/conformance.proto"],
1197
    visibility = ["//visibility:public"],
1198
)
1199
1200
cc_proto_library(
1201
    name = "conformance_proto_cc",
1202
    srcs = ["conformance/conformance.proto"],
1203
)
1204
1205
cc_library(
1206
    name = "jsoncpp",
1207
    srcs = ["conformance/third_party/jsoncpp/jsoncpp.cpp"],
1208
    hdrs = ["conformance/third_party/jsoncpp/json.h"],
1209
    includes = ["conformance"],
1210
)
1211
1212
cc_library(
1213
    name = "conformance_test",
1214
    srcs = [
1215
        "conformance/conformance_test.cc",
1216
        "conformance/conformance_test_runner.cc",
1217
    ],
1218
    hdrs = [
1219
        "conformance/conformance_test.h",
1220
    ],
1221
    includes = [
1222
        "conformance",
1223
        "src",
1224
    ],
1225
    deps = [":conformance_proto_cc"],
1226
)
1227
1228
cc_library(
1229
    name = "binary_json_conformance_suite",
1230
    srcs = ["conformance/binary_json_conformance_suite.cc"],
1231
    hdrs = ["conformance/binary_json_conformance_suite.h"],
1232
    deps = [
1233
        ":conformance_test",
1234
        ":jsoncpp",
1235
        ":test_messages_proto2_proto_cc",
1236
        ":test_messages_proto3_proto_cc",
1237
    ],
1238
)
1239
1240
cc_library(
1241
    name = "text_format_conformance_suite",
1242
    srcs = ["conformance/text_format_conformance_suite.cc"],
1243
    hdrs = ["conformance/text_format_conformance_suite.h"],
1244
    deps = [
1245
        ":conformance_test",
1246
        ":test_messages_proto2_proto_cc",
1247
        ":test_messages_proto3_proto_cc",
1248
    ],
1249
)
1250
1251
cc_binary(
1252
    name = "conformance_test_runner",
1253
    srcs = ["conformance/conformance_test_main.cc"],
1254
    visibility = ["//visibility:public"],
1255
    deps = [
1256
        ":binary_json_conformance_suite",
1257
        ":conformance_test",
1258
        ":text_format_conformance_suite",
1259
    ],
1260
)