Home | History | Annotate | Download | only in protobuf-3.0.0
      1 # Bazel (http://bazel.io/) BUILD file for Protobuf.
      2 
      3 licenses(["notice"])
      4 
      5 ################################################################################
      6 # Protobuf Runtime Library
      7 ################################################################################
      8 
      9 COPTS = [
     10     "-DHAVE_PTHREAD",
     11     "-Wall",
     12     "-Wwrite-strings",
     13     "-Woverloaded-virtual",
     14     "-Wno-sign-compare",
     15     "-Wno-error=unused-function",
     16 ]
     17 
     18 config_setting(
     19     name = "android",
     20     values = {
     21         "crosstool_top": "//external:android/crosstool",
     22     },
     23 )
     24 
     25 # Android builds do not need to link in a separate pthread library.
     26 LINK_OPTS = select({
     27     ":android": [],
     28     "//conditions:default": ["-lpthread"],
     29 })
     30 
     31 load(
     32     "protobuf",
     33     "cc_proto_library",
     34     "py_proto_library",
     35     "internal_copied_filegroup",
     36     "internal_gen_well_known_protos_java",
     37     "internal_protobuf_py_tests",
     38 )
     39 
     40 config_setting(
     41     name = "ios_armv7",
     42     values = {
     43         "ios_cpu": "armv7",
     44     },
     45 )
     46 
     47 config_setting(
     48     name = "ios_armv7s",
     49     values = {
     50         "ios_cpu": "armv7s",
     51     },
     52 )
     53 
     54 config_setting(
     55     name = "ios_arm64",
     56     values = {
     57         "ios_cpu": "arm64",
     58     },
     59 )
     60 
     61 IOS_ARM_COPTS = COPTS + [
     62     "-DOS_IOS",
     63     "-miphoneos-version-min=7.0",
     64     "-arch armv7",
     65     "-arch armv7s",
     66     "-arch arm64",
     67     "-D__thread=",
     68     "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/",
     69 ]
     70 
     71 cc_library(
     72     name = "protobuf_lite",
     73     srcs = [
     74         # AUTOGEN(protobuf_lite_srcs)
     75         "src/google/protobuf/arena.cc",
     76         "src/google/protobuf/arenastring.cc",
     77         "src/google/protobuf/extension_set.cc",
     78         "src/google/protobuf/generated_message_util.cc",
     79         "src/google/protobuf/io/coded_stream.cc",
     80         "src/google/protobuf/io/zero_copy_stream.cc",
     81         "src/google/protobuf/io/zero_copy_stream_impl_lite.cc",
     82         "src/google/protobuf/message_lite.cc",
     83         "src/google/protobuf/repeated_field.cc",
     84         "src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc",
     85         "src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc",
     86         "src/google/protobuf/stubs/bytestream.cc",
     87         "src/google/protobuf/stubs/common.cc",
     88         "src/google/protobuf/stubs/int128.cc",
     89         "src/google/protobuf/stubs/once.cc",
     90         "src/google/protobuf/stubs/status.cc",
     91         "src/google/protobuf/stubs/statusor.cc",
     92         "src/google/protobuf/stubs/stringpiece.cc",
     93         "src/google/protobuf/stubs/stringprintf.cc",
     94         "src/google/protobuf/stubs/structurally_valid.cc",
     95         "src/google/protobuf/stubs/strutil.cc",
     96         "src/google/protobuf/stubs/time.cc",
     97         "src/google/protobuf/wire_format_lite.cc",
     98     ],
     99     hdrs = glob(["src/google/protobuf/**/*.h"]),
    100     copts = select({
    101         ":ios_armv7": IOS_ARM_COPTS,
    102         ":ios_armv7s": IOS_ARM_COPTS,
    103         ":ios_arm64": IOS_ARM_COPTS,
    104         "//conditions:default": COPTS,
    105     }),
    106     includes = ["src/"],
    107     linkopts = LINK_OPTS,
    108     visibility = ["//visibility:public"],
    109 )
    110 
    111 cc_library(
    112     name = "protobuf",
    113     srcs = [
    114         # AUTOGEN(protobuf_srcs)
    115         "src/google/protobuf/any.cc",
    116         "src/google/protobuf/any.pb.cc",
    117         "src/google/protobuf/api.pb.cc",
    118         "src/google/protobuf/compiler/importer.cc",
    119         "src/google/protobuf/compiler/parser.cc",
    120         "src/google/protobuf/descriptor.cc",
    121         "src/google/protobuf/descriptor.pb.cc",
    122         "src/google/protobuf/descriptor_database.cc",
    123         "src/google/protobuf/duration.pb.cc",
    124         "src/google/protobuf/dynamic_message.cc",
    125         "src/google/protobuf/empty.pb.cc",
    126         "src/google/protobuf/extension_set_heavy.cc",
    127         "src/google/protobuf/field_mask.pb.cc",
    128         "src/google/protobuf/generated_message_reflection.cc",
    129         "src/google/protobuf/io/gzip_stream.cc",
    130         "src/google/protobuf/io/printer.cc",
    131         "src/google/protobuf/io/strtod.cc",
    132         "src/google/protobuf/io/tokenizer.cc",
    133         "src/google/protobuf/io/zero_copy_stream_impl.cc",
    134         "src/google/protobuf/map_field.cc",
    135         "src/google/protobuf/message.cc",
    136         "src/google/protobuf/reflection_ops.cc",
    137         "src/google/protobuf/service.cc",
    138         "src/google/protobuf/source_context.pb.cc",
    139         "src/google/protobuf/struct.pb.cc",
    140         "src/google/protobuf/stubs/mathlimits.cc",
    141         "src/google/protobuf/stubs/substitute.cc",
    142         "src/google/protobuf/text_format.cc",
    143         "src/google/protobuf/timestamp.pb.cc",
    144         "src/google/protobuf/type.pb.cc",
    145         "src/google/protobuf/unknown_field_set.cc",
    146         "src/google/protobuf/util/field_comparator.cc",
    147         "src/google/protobuf/util/field_mask_util.cc",
    148         "src/google/protobuf/util/internal/datapiece.cc",
    149         "src/google/protobuf/util/internal/default_value_objectwriter.cc",
    150         "src/google/protobuf/util/internal/error_listener.cc",
    151         "src/google/protobuf/util/internal/field_mask_utility.cc",
    152         "src/google/protobuf/util/internal/json_escaping.cc",
    153         "src/google/protobuf/util/internal/json_objectwriter.cc",
    154         "src/google/protobuf/util/internal/json_stream_parser.cc",
    155         "src/google/protobuf/util/internal/object_writer.cc",
    156         "src/google/protobuf/util/internal/proto_writer.cc",
    157         "src/google/protobuf/util/internal/protostream_objectsource.cc",
    158         "src/google/protobuf/util/internal/protostream_objectwriter.cc",
    159         "src/google/protobuf/util/internal/type_info.cc",
    160         "src/google/protobuf/util/internal/type_info_test_helper.cc",
    161         "src/google/protobuf/util/internal/utility.cc",
    162         "src/google/protobuf/util/json_util.cc",
    163         "src/google/protobuf/util/message_differencer.cc",
    164         "src/google/protobuf/util/time_util.cc",
    165         "src/google/protobuf/util/type_resolver_util.cc",
    166         "src/google/protobuf/wire_format.cc",
    167         "src/google/protobuf/wrappers.pb.cc",
    168     ],
    169     hdrs = glob(["src/**/*.h"]),
    170     copts = select({
    171         ":ios_armv7": IOS_ARM_COPTS,
    172         ":ios_armv7s": IOS_ARM_COPTS,
    173         ":ios_arm64": IOS_ARM_COPTS,
    174         "//conditions:default": COPTS,
    175     }),
    176     includes = ["src/"],
    177     linkopts = LINK_OPTS,
    178     visibility = ["//visibility:public"],
    179     deps = [":protobuf_lite"],
    180 )
    181 
    182 objc_library(
    183     name = "protobuf_objc",
    184     hdrs = ["objectivec/GPBProtocolBuffers.h"],
    185     includes = ["objectivec"],
    186     non_arc_srcs = ["objectivec/GPBProtocolBuffers.m"],
    187     visibility = ["//visibility:public"],
    188 )
    189 
    190 RELATIVE_WELL_KNOWN_PROTOS = [
    191     # AUTOGEN(well_known_protos)
    192     "google/protobuf/any.proto",
    193     "google/protobuf/api.proto",
    194     "google/protobuf/compiler/plugin.proto",
    195     "google/protobuf/descriptor.proto",
    196     "google/protobuf/duration.proto",
    197     "google/protobuf/empty.proto",
    198     "google/protobuf/field_mask.proto",
    199     "google/protobuf/source_context.proto",
    200     "google/protobuf/struct.proto",
    201     "google/protobuf/timestamp.proto",
    202     "google/protobuf/type.proto",
    203     "google/protobuf/wrappers.proto",
    204 ]
    205 
    206 WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
    207 
    208 filegroup(
    209     name = "well_known_protos",
    210     srcs = WELL_KNOWN_PROTOS,
    211     visibility = ["//visibility:public"],
    212 )
    213 
    214 cc_proto_library(
    215     name = "cc_wkt_protos",
    216     srcs = WELL_KNOWN_PROTOS,
    217     include = "src",
    218     default_runtime = ":protobuf",
    219     internal_bootstrap_hack = 1,
    220     protoc = ":protoc",
    221     visibility = ["//visibility:public"],
    222 )
    223 
    224 ################################################################################
    225 # Protocol Buffers Compiler
    226 ################################################################################
    227 
    228 cc_library(
    229     name = "protoc_lib",
    230     srcs = [
    231         # AUTOGEN(protoc_lib_srcs)
    232         "src/google/protobuf/compiler/code_generator.cc",
    233         "src/google/protobuf/compiler/command_line_interface.cc",
    234         "src/google/protobuf/compiler/cpp/cpp_enum.cc",
    235         "src/google/protobuf/compiler/cpp/cpp_enum_field.cc",
    236         "src/google/protobuf/compiler/cpp/cpp_extension.cc",
    237         "src/google/protobuf/compiler/cpp/cpp_field.cc",
    238         "src/google/protobuf/compiler/cpp/cpp_file.cc",
    239         "src/google/protobuf/compiler/cpp/cpp_generator.cc",
    240         "src/google/protobuf/compiler/cpp/cpp_helpers.cc",
    241         "src/google/protobuf/compiler/cpp/cpp_map_field.cc",
    242         "src/google/protobuf/compiler/cpp/cpp_message.cc",
    243         "src/google/protobuf/compiler/cpp/cpp_message_field.cc",
    244         "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc",
    245         "src/google/protobuf/compiler/cpp/cpp_service.cc",
    246         "src/google/protobuf/compiler/cpp/cpp_string_field.cc",
    247         "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc",
    248         "src/google/protobuf/compiler/csharp/csharp_enum.cc",
    249         "src/google/protobuf/compiler/csharp/csharp_enum_field.cc",
    250         "src/google/protobuf/compiler/csharp/csharp_field_base.cc",
    251         "src/google/protobuf/compiler/csharp/csharp_generator.cc",
    252         "src/google/protobuf/compiler/csharp/csharp_helpers.cc",
    253         "src/google/protobuf/compiler/csharp/csharp_map_field.cc",
    254         "src/google/protobuf/compiler/csharp/csharp_message.cc",
    255         "src/google/protobuf/compiler/csharp/csharp_message_field.cc",
    256         "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc",
    257         "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc",
    258         "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc",
    259         "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc",
    260         "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc",
    261         "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc",
    262         "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc",
    263         "src/google/protobuf/compiler/java/java_context.cc",
    264         "src/google/protobuf/compiler/java/java_doc_comment.cc",
    265         "src/google/protobuf/compiler/java/java_enum.cc",
    266         "src/google/protobuf/compiler/java/java_enum_field.cc",
    267         "src/google/protobuf/compiler/java/java_enum_field_lite.cc",
    268         "src/google/protobuf/compiler/java/java_enum_lite.cc",
    269         "src/google/protobuf/compiler/java/java_extension.cc",
    270         "src/google/protobuf/compiler/java/java_extension_lite.cc",
    271         "src/google/protobuf/compiler/java/java_field.cc",
    272         "src/google/protobuf/compiler/java/java_file.cc",
    273         "src/google/protobuf/compiler/java/java_generator.cc",
    274         "src/google/protobuf/compiler/java/java_generator_factory.cc",
    275         "src/google/protobuf/compiler/java/java_helpers.cc",
    276         "src/google/protobuf/compiler/java/java_lazy_message_field.cc",
    277         "src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc",
    278         "src/google/protobuf/compiler/java/java_map_field.cc",
    279         "src/google/protobuf/compiler/java/java_map_field_lite.cc",
    280         "src/google/protobuf/compiler/java/java_message.cc",
    281         "src/google/protobuf/compiler/java/java_message_builder.cc",
    282         "src/google/protobuf/compiler/java/java_message_builder_lite.cc",
    283         "src/google/protobuf/compiler/java/java_message_field.cc",
    284         "src/google/protobuf/compiler/java/java_message_field_lite.cc",
    285         "src/google/protobuf/compiler/java/java_message_lite.cc",
    286         "src/google/protobuf/compiler/java/java_name_resolver.cc",
    287         "src/google/protobuf/compiler/java/java_primitive_field.cc",
    288         "src/google/protobuf/compiler/java/java_primitive_field_lite.cc",
    289         "src/google/protobuf/compiler/java/java_service.cc",
    290         "src/google/protobuf/compiler/java/java_shared_code_generator.cc",
    291         "src/google/protobuf/compiler/java/java_string_field.cc",
    292         "src/google/protobuf/compiler/java/java_string_field_lite.cc",
    293         "src/google/protobuf/compiler/javanano/javanano_enum.cc",
    294         "src/google/protobuf/compiler/javanano/javanano_enum_field.cc",
    295         "src/google/protobuf/compiler/javanano/javanano_extension.cc",
    296         "src/google/protobuf/compiler/javanano/javanano_field.cc",
    297         "src/google/protobuf/compiler/javanano/javanano_file.cc",
    298         "src/google/protobuf/compiler/javanano/javanano_generator.cc",
    299         "src/google/protobuf/compiler/javanano/javanano_helpers.cc",
    300         "src/google/protobuf/compiler/javanano/javanano_map_field.cc",
    301         "src/google/protobuf/compiler/javanano/javanano_message.cc",
    302         "src/google/protobuf/compiler/javanano/javanano_message_field.cc",
    303         "src/google/protobuf/compiler/javanano/javanano_primitive_field.cc",
    304         "src/google/protobuf/compiler/js/js_generator.cc",
    305         "src/google/protobuf/compiler/objectivec/objectivec_enum.cc",
    306         "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc",
    307         "src/google/protobuf/compiler/objectivec/objectivec_extension.cc",
    308         "src/google/protobuf/compiler/objectivec/objectivec_field.cc",
    309         "src/google/protobuf/compiler/objectivec/objectivec_file.cc",
    310         "src/google/protobuf/compiler/objectivec/objectivec_generator.cc",
    311         "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc",
    312         "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc",
    313         "src/google/protobuf/compiler/objectivec/objectivec_message.cc",
    314         "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc",
    315         "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc",
    316         "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc",
    317         "src/google/protobuf/compiler/plugin.cc",
    318         "src/google/protobuf/compiler/plugin.pb.cc",
    319         "src/google/protobuf/compiler/python/python_generator.cc",
    320         "src/google/protobuf/compiler/ruby/ruby_generator.cc",
    321         "src/google/protobuf/compiler/subprocess.cc",
    322         "src/google/protobuf/compiler/zip_writer.cc",
    323     ],
    324     copts = COPTS,
    325     includes = ["src/"],
    326     linkopts = LINK_OPTS,
    327     visibility = ["//visibility:public"],
    328     deps = [":protobuf"],
    329 )
    330 
    331 cc_binary(
    332     name = "protoc",
    333     srcs = ["src/google/protobuf/compiler/main.cc"],
    334     linkopts = LINK_OPTS,
    335     visibility = ["//visibility:public"],
    336     deps = [":protoc_lib"],
    337 )
    338 
    339 ################################################################################
    340 # Tests
    341 ################################################################################
    342 
    343 RELATIVE_LITE_TEST_PROTOS = [
    344     # AUTOGEN(lite_test_protos)
    345     "google/protobuf/map_lite_unittest.proto",
    346     "google/protobuf/unittest_import_lite.proto",
    347     "google/protobuf/unittest_import_public_lite.proto",
    348     "google/protobuf/unittest_lite.proto",
    349     "google/protobuf/unittest_no_arena_lite.proto",
    350 ]
    351 
    352 LITE_TEST_PROTOS = ["src/" + s for s in RELATIVE_LITE_TEST_PROTOS]
    353 
    354 RELATIVE_TEST_PROTOS = [
    355     # AUTOGEN(test_protos)
    356     "google/protobuf/any_test.proto",
    357     "google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto",
    358     "google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto",
    359     "google/protobuf/map_proto2_unittest.proto",
    360     "google/protobuf/map_unittest.proto",
    361     "google/protobuf/unittest.proto",
    362     "google/protobuf/unittest_arena.proto",
    363     "google/protobuf/unittest_custom_options.proto",
    364     "google/protobuf/unittest_drop_unknown_fields.proto",
    365     "google/protobuf/unittest_embed_optimize_for.proto",
    366     "google/protobuf/unittest_empty.proto",
    367     "google/protobuf/unittest_enormous_descriptor.proto",
    368     "google/protobuf/unittest_import.proto",
    369     "google/protobuf/unittest_import_public.proto",
    370     "google/protobuf/unittest_lite_imports_nonlite.proto",
    371     "google/protobuf/unittest_mset.proto",
    372     "google/protobuf/unittest_mset_wire_format.proto",
    373     "google/protobuf/unittest_no_arena.proto",
    374     "google/protobuf/unittest_no_arena_import.proto",
    375     "google/protobuf/unittest_no_field_presence.proto",
    376     "google/protobuf/unittest_no_generic_services.proto",
    377     "google/protobuf/unittest_optimize_for.proto",
    378     "google/protobuf/unittest_preserve_unknown_enum.proto",
    379     "google/protobuf/unittest_preserve_unknown_enum2.proto",
    380     "google/protobuf/unittest_proto3_arena.proto",
    381     "google/protobuf/unittest_proto3_arena_lite.proto",
    382     "google/protobuf/unittest_proto3_lite.proto",
    383     "google/protobuf/unittest_well_known_types.proto",
    384     "google/protobuf/util/internal/testdata/anys.proto",
    385     "google/protobuf/util/internal/testdata/books.proto",
    386     "google/protobuf/util/internal/testdata/default_value.proto",
    387     "google/protobuf/util/internal/testdata/default_value_test.proto",
    388     "google/protobuf/util/internal/testdata/field_mask.proto",
    389     "google/protobuf/util/internal/testdata/maps.proto",
    390     "google/protobuf/util/internal/testdata/oneofs.proto",
    391     "google/protobuf/util/internal/testdata/struct.proto",
    392     "google/protobuf/util/internal/testdata/timestamp_duration.proto",
    393     "google/protobuf/util/json_format_proto3.proto",
    394     "google/protobuf/util/message_differencer_unittest.proto",
    395 ]
    396 
    397 TEST_PROTOS = ["src/" + s for s in RELATIVE_TEST_PROTOS]
    398 
    399 cc_proto_library(
    400     name = "cc_test_protos",
    401     srcs = LITE_TEST_PROTOS + TEST_PROTOS,
    402     include = "src",
    403     default_runtime = ":protobuf",
    404     protoc = ":protoc",
    405     deps = [":cc_wkt_protos"],
    406 )
    407 
    408 COMMON_TEST_SRCS = [
    409     # AUTOGEN(common_test_srcs)
    410     "src/google/protobuf/arena_test_util.cc",
    411     "src/google/protobuf/map_test_util.cc",
    412     "src/google/protobuf/test_util.cc",
    413     "src/google/protobuf/testing/file.cc",
    414     "src/google/protobuf/testing/googletest.cc",
    415 ]
    416 
    417 cc_binary(
    418     name = "test_plugin",
    419     srcs = [
    420         # AUTOGEN(test_plugin_srcs)
    421         "src/google/protobuf/compiler/mock_code_generator.cc",
    422         "src/google/protobuf/compiler/test_plugin.cc",
    423         "src/google/protobuf/testing/file.cc",
    424     ],
    425     deps = [
    426         ":protobuf",
    427         ":protoc_lib",
    428         "//external:gtest",
    429     ],
    430 )
    431 
    432 cc_test(
    433     name = "protobuf_test",
    434     srcs = COMMON_TEST_SRCS + [
    435         # AUTOGEN(test_srcs)
    436         "src/google/protobuf/any_test.cc",
    437         "src/google/protobuf/arena_unittest.cc",
    438         "src/google/protobuf/arenastring_unittest.cc",
    439         "src/google/protobuf/compiler/command_line_interface_unittest.cc",
    440         "src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc",
    441         "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc",
    442         "src/google/protobuf/compiler/cpp/cpp_unittest.cc",
    443         "src/google/protobuf/compiler/cpp/metadata_test.cc",
    444         "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc",
    445         "src/google/protobuf/compiler/importer_unittest.cc",
    446         "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc",
    447         "src/google/protobuf/compiler/java/java_plugin_unittest.cc",
    448         "src/google/protobuf/compiler/mock_code_generator.cc",
    449         "src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc",
    450         "src/google/protobuf/compiler/parser_unittest.cc",
    451         "src/google/protobuf/compiler/python/python_plugin_unittest.cc",
    452         "src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc",
    453         "src/google/protobuf/descriptor_database_unittest.cc",
    454         "src/google/protobuf/descriptor_unittest.cc",
    455         "src/google/protobuf/drop_unknown_fields_test.cc",
    456         "src/google/protobuf/dynamic_message_unittest.cc",
    457         "src/google/protobuf/extension_set_unittest.cc",
    458         "src/google/protobuf/generated_message_reflection_unittest.cc",
    459         "src/google/protobuf/io/coded_stream_unittest.cc",
    460         "src/google/protobuf/io/printer_unittest.cc",
    461         "src/google/protobuf/io/tokenizer_unittest.cc",
    462         "src/google/protobuf/io/zero_copy_stream_unittest.cc",
    463         "src/google/protobuf/map_field_test.cc",
    464         "src/google/protobuf/map_test.cc",
    465         "src/google/protobuf/message_unittest.cc",
    466         "src/google/protobuf/no_field_presence_test.cc",
    467         "src/google/protobuf/preserve_unknown_enum_test.cc",
    468         "src/google/protobuf/proto3_arena_lite_unittest.cc",
    469         "src/google/protobuf/proto3_arena_unittest.cc",
    470         "src/google/protobuf/proto3_lite_unittest.cc",
    471         "src/google/protobuf/reflection_ops_unittest.cc",
    472         "src/google/protobuf/repeated_field_reflection_unittest.cc",
    473         "src/google/protobuf/repeated_field_unittest.cc",
    474         "src/google/protobuf/stubs/bytestream_unittest.cc",
    475         "src/google/protobuf/stubs/common_unittest.cc",
    476         "src/google/protobuf/stubs/int128_unittest.cc",
    477         "src/google/protobuf/stubs/once_unittest.cc",
    478         "src/google/protobuf/stubs/status_test.cc",
    479         "src/google/protobuf/stubs/statusor_test.cc",
    480         "src/google/protobuf/stubs/stringpiece_unittest.cc",
    481         "src/google/protobuf/stubs/stringprintf_unittest.cc",
    482         "src/google/protobuf/stubs/structurally_valid_unittest.cc",
    483         "src/google/protobuf/stubs/strutil_unittest.cc",
    484         "src/google/protobuf/stubs/template_util_unittest.cc",
    485         "src/google/protobuf/stubs/time_test.cc",
    486         "src/google/protobuf/stubs/type_traits_unittest.cc",
    487         "src/google/protobuf/text_format_unittest.cc",
    488         "src/google/protobuf/unknown_field_set_unittest.cc",
    489         "src/google/protobuf/util/field_comparator_test.cc",
    490         "src/google/protobuf/util/field_mask_util_test.cc",
    491         "src/google/protobuf/util/internal/default_value_objectwriter_test.cc",
    492         "src/google/protobuf/util/internal/json_objectwriter_test.cc",
    493         "src/google/protobuf/util/internal/json_stream_parser_test.cc",
    494         "src/google/protobuf/util/internal/protostream_objectsource_test.cc",
    495         "src/google/protobuf/util/internal/protostream_objectwriter_test.cc",
    496         "src/google/protobuf/util/internal/type_info_test_helper.cc",
    497         "src/google/protobuf/util/json_util_test.cc",
    498         "src/google/protobuf/util/message_differencer_unittest.cc",
    499         "src/google/protobuf/util/time_util_test.cc",
    500         "src/google/protobuf/util/type_resolver_util_test.cc",
    501         "src/google/protobuf/well_known_types_unittest.cc",
    502         "src/google/protobuf/wire_format_unittest.cc",
    503     ],
    504     copts = COPTS,
    505     data = [
    506         ":test_plugin",
    507     ] + glob([
    508         "src/google/protobuf/**/*",
    509     ]),
    510     includes = [
    511         "src/",
    512     ],
    513     linkopts = LINK_OPTS,
    514     deps = [
    515         ":cc_test_protos",
    516         ":protobuf",
    517         ":protoc_lib",
    518         "//external:gtest_main",
    519     ],
    520 )
    521 
    522 ################################################################################
    523 # Java support
    524 ################################################################################
    525 internal_gen_well_known_protos_java(
    526     srcs = WELL_KNOWN_PROTOS,
    527 )
    528 
    529 java_library(
    530     name = "protobuf_java",
    531     srcs = glob([
    532         "java/core/src/main/java/com/google/protobuf/*.java",
    533     ]) + [
    534         ":gen_well_known_protos_java",
    535     ],
    536     visibility = ["//visibility:public"],
    537 )
    538 
    539 java_library(
    540     name = "protobuf_java_util",
    541     srcs = glob([
    542         "java/util/src/main/java/com/google/protobuf/util/*.java",
    543     ]),
    544     deps = [
    545         "protobuf_java",
    546         "//external:gson",
    547         "//external:guava",
    548     ],
    549     visibility = ["//visibility:public"],
    550 )
    551 
    552 ################################################################################
    553 # Python support
    554 ################################################################################
    555 
    556 py_library(
    557     name = "python_srcs",
    558     srcs = glob(
    559         [
    560             "python/google/protobuf/*.py",
    561             "python/google/protobuf/**/*.py",
    562         ],
    563         exclude = [
    564             "python/google/protobuf/__init__.py",
    565             "python/google/protobuf/**/__init__.py",
    566             "python/google/protobuf/internal/*_test.py",
    567             "python/google/protobuf/internal/test_util.py",
    568         ],
    569     ),
    570     srcs_version = "PY2AND3",
    571     imports = ["python"],
    572 )
    573 
    574 cc_binary(
    575     name = "internal/_api_implementation.so",
    576     srcs = ["python/google/protobuf/internal/api_implementation.cc"],
    577     copts = COPTS + [
    578         "-DPYTHON_PROTO2_CPP_IMPL_V2",
    579     ],
    580     linkshared = 1,
    581     linkstatic = 1,
    582     deps = select({
    583         "//conditions:default": [],
    584         ":use_fast_cpp_protos": ["//external:python_headers"],
    585     }),
    586 )
    587 
    588 cc_binary(
    589     name = "pyext/_message.so",
    590     srcs = glob([
    591         "python/google/protobuf/pyext/*.cc",
    592         "python/google/protobuf/pyext/*.h",
    593     ]),
    594     copts = COPTS + [
    595         "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
    596     ] + select({
    597         "//conditions:default": [],
    598         ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
    599     }),
    600     includes = [
    601         "python/",
    602         "src/",
    603     ],
    604     linkshared = 1,
    605     linkstatic = 1,
    606     deps = [
    607         ":protobuf",
    608     ] + select({
    609         "//conditions:default": [],
    610         ":use_fast_cpp_protos": ["//external:python_headers"],
    611     }),
    612 )
    613 
    614 config_setting(
    615     name = "use_fast_cpp_protos",
    616     values = {
    617         "define": "use_fast_cpp_protos=true",
    618     },
    619 )
    620 
    621 config_setting(
    622     name = "allow_oversize_protos",
    623     values = {
    624         "define": "allow_oversize_protos=true",
    625     },
    626 )
    627 
    628 # Copy the builtin proto files from src/google/protobuf to
    629 # python/google/protobuf. This way, the generated Python sources will be in the
    630 # same directory as the Python runtime sources. This is necessary for the
    631 # modules to be imported correctly since they are all part of the same Python
    632 # package.
    633 internal_copied_filegroup(
    634     name = "protos_python",
    635     srcs = WELL_KNOWN_PROTOS,
    636     strip_prefix = "src",
    637     dest = "python",
    638 )
    639 
    640 # TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
    641 # which case we can simply add :protos_python in srcs.
    642 COPIED_WELL_KNOWN_PROTOS = ["python/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
    643 
    644 py_proto_library(
    645     name = "protobuf_python",
    646     srcs = COPIED_WELL_KNOWN_PROTOS,
    647     include = "python",
    648     data = select({
    649         "//conditions:default": [],
    650         ":use_fast_cpp_protos": [
    651             ":internal/_api_implementation.so",
    652             ":pyext/_message.so",
    653         ],
    654     }),
    655     default_runtime = "",
    656     protoc = ":protoc",
    657     py_libs = [
    658         ":python_srcs",
    659         "//external:six"
    660     ],
    661     srcs_version = "PY2AND3",
    662     visibility = ["//visibility:public"],
    663 )
    664 
    665 # Copy the test proto files from src/google/protobuf to
    666 # python/google/protobuf. This way, the generated Python sources will be in the
    667 # same directory as the Python runtime sources. This is necessary for the
    668 # modules to be imported correctly by the tests since they are all part of the
    669 # same Python package.
    670 internal_copied_filegroup(
    671     name = "protos_python_test",
    672     srcs = LITE_TEST_PROTOS + TEST_PROTOS,
    673     strip_prefix = "src",
    674     dest = "python",
    675 )
    676 
    677 # TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
    678 # which case we can simply add :protos_python_test in srcs.
    679 COPIED_LITE_TEST_PROTOS = ["python/" + s for s in RELATIVE_LITE_TEST_PROTOS]
    680 COPIED_TEST_PROTOS = ["python/" + s for s in RELATIVE_TEST_PROTOS]
    681 
    682 py_proto_library(
    683     name = "python_common_test_protos",
    684     srcs = COPIED_LITE_TEST_PROTOS + COPIED_TEST_PROTOS,
    685     include = "python",
    686     default_runtime = "",
    687     protoc = ":protoc",
    688     srcs_version = "PY2AND3",
    689     deps = [":protobuf_python"],
    690 )
    691 
    692 py_proto_library(
    693     name = "python_specific_test_protos",
    694     srcs = glob([
    695         "python/google/protobuf/internal/*.proto",
    696         "python/google/protobuf/internal/import_test_package/*.proto",
    697     ]),
    698     include = "python",
    699     default_runtime = ":protobuf_python",
    700     protoc = ":protoc",
    701     srcs_version = "PY2AND3",
    702     deps = [":python_common_test_protos"],
    703 )
    704 
    705 py_library(
    706     name = "python_tests",
    707     srcs = glob(
    708         [
    709             "python/google/protobuf/internal/*_test.py",
    710             "python/google/protobuf/internal/test_util.py",
    711             "python/google/protobuf/internal/import_test_package/__init__.py",
    712         ],
    713     ),
    714     imports = ["python"],
    715     srcs_version = "PY2AND3",
    716     deps = [
    717         ":protobuf_python",
    718         ":python_common_test_protos",
    719         ":python_specific_test_protos",
    720     ],
    721 )
    722 
    723 internal_protobuf_py_tests(
    724     name = "python_tests_batch",
    725     data = glob([
    726         "src/google/protobuf/**/*",
    727     ]),
    728     modules = [
    729         "descriptor_database_test",
    730         "descriptor_pool_test",
    731         "descriptor_test",
    732         "generator_test",
    733         "json_format_test",
    734         "message_factory_test",
    735         "message_test",
    736         "proto_builder_test",
    737         "reflection_test",
    738         "service_reflection_test",
    739         "symbol_database_test",
    740         "text_encoding_test",
    741         "text_format_test",
    742         "unknown_fields_test",
    743         "wire_format_test",
    744     ],
    745     deps = [":python_tests"],
    746 )
    747