# Copyright (c) 2009-2021, Google LLC # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of Google LLC nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. load("//bazel:build_defs.bzl", "UPB_DEFAULT_COPTS") load( "//bazel:upb_proto_library.bzl", "upb_proto_library", "upb_proto_library_copts", "upb_proto_reflection_library", ) load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") load( "//upbc:bootstrap_compiler.bzl", "bootstrap_cc_library", "bootstrap_upb_proto_library", ) # begin:google_only # load( # "//third_party/bazel_rules/rules_kotlin/kotlin/native:native_interop_hint.bzl", # "kt_native_interop_hint", # ) # load("//tools/build_defs/license:license.bzl", "license") # end:google_only # begin:github_only load( "//bazel:amalgamation.bzl", "upb_amalgamation", ) # end:github_only # begin:google_only # package(default_applicable_licenses = ["//:license"]) # # license( # name = "license", # package_name = "upb", # ) # end:google_only licenses(["notice"]) exports_files(["LICENSE"]) exports_files( [ "BUILD", "WORKSPACE", ], visibility = ["//cmake:__pkg__"], ) config_setting( name = "windows", constraint_values = ["@platforms//os:windows"], visibility = ["//visibility:public"], ) bool_flag( name = "fasttable_enabled", build_setting_default = False, visibility = ["//visibility:public"], ) config_setting( name = "fasttable_enabled_setting", flag_values = {"//:fasttable_enabled": "true"}, visibility = ["//visibility:public"], ) upb_proto_library_copts( name = "upb_proto_library_copts__for_generated_code_only_do_not_use", copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], ) # Please update copy.bara.sky target = ":friends" if # you make changes to this list. package_group( name = "friends", packages = ["//..."], ) # Public C/C++ libraries ####################################################### cc_library( name = "upb", hdrs = [ "upb/message/internal/extension.h", "upb/message/message.h", "upb/upb.h", "upb/upb.hpp", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":mem", ":message_internal", ":mini_table", ":port", ], ) cc_library( name = "message", hdrs = [ "upb/message/message.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":mem", ":message_internal", ":mini_table", ":port", ], ) cc_library( name = "message_internal", srcs = [ "upb/message/message.c", ], hdrs = [ "upb/message/internal/extension.h", "upb/message/internal/message.h", "upb/message/message.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":base_internal", ":hash", ":mem", ":mini_table", ":port", ], ) cc_library( name = "message_tagged_ptr", hdrs = ["upb/message/tagged_ptr.h"], copts = UPB_DEFAULT_COPTS, visibility = ["//:friends"], deps = [ ":message_typedef", ":port", ], ) cc_library( name = "message_accessors_internal", hdrs = [ "upb/message/internal/accessors.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//:friends"], deps = [ ":collections_internal", ":message_internal", ":mini_table_internal", ":port", ], ) cc_library( name = "message_accessors", srcs = [ "upb/message/accessors.c", "upb/message/internal/accessors.h", ], hdrs = [ "upb/message/accessors.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":eps_copy_input_stream", ":message_internal", ":mini_table", ":mini_table_internal", ":port", ":upb", ":wire", ":wire_internal", ":wire_reader", ], ) cc_library( name = "message_promote", srcs = [ "upb/message/promote.c", ], hdrs = [ "upb/message/promote.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":eps_copy_input_stream", ":hash", ":mem", ":message_accessors", ":message_internal", ":message_typedef", ":mini_table", ":port", ":upb", ":wire", ":wire_internal", ":wire_reader", ], ) cc_library( name = "message_copy", srcs = [ "upb/message/copy.c", ], hdrs = [ "upb/message/copy.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":mem", ":message_accessors", ":message_internal", ":message_typedef", ":mini_table", ":mini_table_internal", ":port", ":upb", ], ) cc_library( name = "message_split64", hdrs = [ "upb/message/accessors_split64.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":message_accessors", ":port", ], ) cc_library( name = "message_typedef", hdrs = [ "upb/message/typedef.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [], ) cc_test( name = "message_accessors_test", srcs = ["upb/message/accessors_test.cc"], deps = [ ":base", ":collections", ":message_accessors", ":mini_descriptor", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":port", ":upb", ":wire", ":wire_internal", "//upb/test:test_messages_proto2_upb_proto", "//upb/test:test_messages_proto3_upb_proto", "//upb/test:test_upb_proto", "@com_google_absl//absl/container:flat_hash_set", "@com_google_googletest//:gtest_main", "@com_google_protobuf//:protobuf", ], ) cc_test( name = "message_promote_test", srcs = ["upb/message/promote_test.cc"], deps = [ ":base", ":collections", ":message_accessors", ":message_copy", ":message_promote", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":port", ":upb", ":wire", ":wire_internal", "//upb/test:test_messages_proto2_upb_proto", "//upb/test:test_messages_proto3_upb_proto", "//upb/test:test_upb_proto", "@com_google_absl//absl/container:flat_hash_set", "@com_google_googletest//:gtest_main", "@com_google_protobuf//:protobuf", ], ) cc_test( name = "message_copy_test", srcs = ["upb/message/copy_test.cc"], deps = [ ":base", ":collections", ":mem", ":message_accessors", ":message_copy", ":message_internal", ":mini_table", ":upb", ":wire", "//upb/test:test_messages_proto2_upb_proto", "//upb/test:test_messages_proto3_upb_proto", "//upb/test:test_upb_proto", "@com_google_absl//absl/container:flat_hash_set", "@com_google_googletest//:gtest_main", "@com_google_protobuf//:protobuf", ], ) cc_library( name = "fastdecode", copts = UPB_DEFAULT_COPTS, deps = [ ":base", ":collections_internal", ":hash", ":mem_internal", ":message_internal", ":mini_table", ":port", ":wire", ], ) # Common support routines used by generated code. This library has no # implementation, but depends on :upb and exposes a few more hdrs. # # This is public only because we have no way of visibility-limiting it to # upb_proto_library() only. This interface is not stable and by using it you # give up any backward compatibility guarantees. cc_library( name = "generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", hdrs = ["upb/generated_code_support.h"], copts = UPB_DEFAULT_COPTS, textual_hdrs = [ "//upb/port:inc", ], visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":mem", ":message_accessors", ":message_accessors_internal", ":message_internal", ":mini_descriptor", ":mini_table", ":wire_internal", ], ) # Common support code for C++ generated code. cc_library( name = "generated_cpp_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", hdrs = [ "upb/message/message.h", "upb/upb.hpp", ], copts = UPB_DEFAULT_COPTS, textual_hdrs = [ "//upb/port:inc", ], visibility = ["//visibility:public"], deps = [ ":base", ":collections_internal", ":hash", ":mem", ":message_copy", ":message_typedef", ":mini_table", ":upb", ], ) cc_library( name = "generated_reflection_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", hdrs = [ "upb/reflection/def.h", "upb/reflection/internal/def_pool.h", ], copts = UPB_DEFAULT_COPTS, textual_hdrs = [ "//upb/port:inc", ], visibility = ["//visibility:public"], deps = [ ":mem", ":mini_descriptor", ":reflection_internal", ], ) bootstrap_upb_proto_library( name = "descriptor_upb_proto", base_dir = "upb/reflection/", # TODO(b/289127200): Export 'net/proto2/proto/descriptor.upb.h' and remove "-layering_check". features = ["-layering_check"], google3_src_files = ["net/proto2/proto/descriptor.proto"], google3_src_rules = ["//net/proto2/proto:descriptor_proto_source"], oss_src_files = ["google/protobuf/descriptor.proto"], oss_src_rules = ["@com_google_protobuf//:descriptor_proto_srcs"], oss_strip_prefix = "third_party/protobuf/github/bootstrap/src", proto_lib_deps = ["@com_google_protobuf//:descriptor_proto"], visibility = ["//visibility:public"], ) upb_proto_reflection_library( name = "descriptor_upb_proto_reflection", visibility = ["//visibility:public"], deps = ["@com_google_protobuf//:descriptor_proto"], ) cc_library( name = "message_rep_internal", hdrs = [ "upb/message/internal/map_entry.h", ], copts = UPB_DEFAULT_COPTS, visibility = ["//:__subpackages__"], deps = [ ":base", ":hash", ], ) # TODO(b/232091617): Once we can delete the deprecated forwarding headers # (= everything in upb/) we can move this build target down into reflection/ bootstrap_cc_library( name = "reflection", hdrs = [ "upb/def.h", "upb/reflection/def.h", "upb/reflection/def.hpp", "upb/reflection/message.h", "upb/reflection/message.hpp", ], bootstrap_deps = [":reflection_internal"], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections", ":port", ":upb", ], ) bootstrap_cc_library( name = "reflection_internal", srcs = [ "upb/reflection/def_builder.c", "upb/reflection/def_pool.c", "upb/reflection/def_type.c", "upb/reflection/desc_state.c", "upb/reflection/enum_def.c", "upb/reflection/enum_reserved_range.c", "upb/reflection/enum_value_def.c", "upb/reflection/extension_range.c", "upb/reflection/field_def.c", "upb/reflection/file_def.c", "upb/reflection/message.c", "upb/reflection/message_def.c", "upb/reflection/message_reserved_range.c", "upb/reflection/method_def.c", "upb/reflection/oneof_def.c", "upb/reflection/service_def.c", ], hdrs = [ "upb/reflection/common.h", "upb/reflection/def.h", "upb/reflection/def.hpp", "upb/reflection/def_pool.h", "upb/reflection/def_type.h", "upb/reflection/enum_def.h", "upb/reflection/enum_reserved_range.h", "upb/reflection/enum_value_def.h", "upb/reflection/extension_range.h", "upb/reflection/field_def.h", "upb/reflection/file_def.h", "upb/reflection/internal/def_builder.h", "upb/reflection/internal/def_pool.h", "upb/reflection/internal/desc_state.h", "upb/reflection/internal/enum_def.h", "upb/reflection/internal/enum_reserved_range.h", "upb/reflection/internal/enum_value_def.h", "upb/reflection/internal/extension_range.h", "upb/reflection/internal/field_def.h", "upb/reflection/internal/file_def.h", "upb/reflection/internal/message_def.h", "upb/reflection/internal/message_reserved_range.h", "upb/reflection/internal/method_def.h", "upb/reflection/internal/oneof_def.h", "upb/reflection/internal/service_def.h", "upb/reflection/message.h", "upb/reflection/message.hpp", "upb/reflection/message_def.h", "upb/reflection/message_reserved_range.h", "upb/reflection/method_def.h", "upb/reflection/oneof_def.h", "upb/reflection/service_def.h", ], bootstrap_deps = [":descriptor_upb_proto"], copts = UPB_DEFAULT_COPTS, visibility = ["//visibility:public"], deps = [ ":base", ":collections", ":hash", ":mem", ":message_accessors", ":mini_descriptor", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":port", ":upb", ], ) # Aliases ###################################################################### # TODO(b/295870230): Remove these. alias( name = "base", actual = "//upb/base", visibility = ["//visibility:public"], ) alias( name = "base_internal", actual = "//upb/base:internal", visibility = ["//visibility:public"], ) alias( name = "collections", actual = "//upb/collections", visibility = ["//visibility:public"], ) alias( name = "collections_internal", actual = "//upb/collections:internal", visibility = ["//visibility:public"], ) alias( name = "collections_split64", actual = "//upb/collections:split64", visibility = ["//visibility:public"], ) alias( name = "hash", actual = "//upb/hash", visibility = ["//visibility:public"], ) alias( name = "json", actual = "//upb/json", visibility = ["//visibility:public"], ) alias( name = "lex", actual = "//upb/lex", visibility = ["//visibility:public"], ) alias( name = "mem", actual = "//upb/mem", visibility = ["//visibility:public"], ) alias( name = "mem_internal", actual = "//upb/mem:internal", visibility = ["//:__subpackages__"], ) alias( name = "mini_descriptor", actual = "//upb/mini_descriptor", visibility = ["//visibility:public"], ) alias( name = "mini_descriptor_encode_internal", actual = "//upb/mini_descriptor:encode_internal", visibility = ["//:__subpackages__"], ) alias( name = "mini_descriptor_internal", actual = "//upb/mini_descriptor:internal", visibility = ["//:__subpackages__"], ) alias( name = "mini_table", actual = "//upb/mini_table", visibility = ["//:friends"], ) alias( name = "mini_table_internal", actual = "//upb/mini_table:internal", visibility = ["//:friends"], ) alias( name = "port", actual = "//upb/port", visibility = ["//visibility:public"], ) alias( name = "text", actual = "//upb/text", visibility = ["//visibility:public"], ) alias( name = "wire", actual = "//upb/wire", visibility = ["//visibility:public"], ) alias( name = "wire_internal", actual = "//upb/wire:internal", visibility = ["//visibility:public"], ) alias( name = "wire_reader", actual = "//upb/wire:reader", visibility = ["//visibility:public"], ) alias( name = "wire_types", actual = "//upb/wire:types", visibility = ["//visibility:public"], ) alias( name = "eps_copy_input_stream", actual = "//upb/wire:eps_copy_input_stream", visibility = ["//visibility:public"], ) # Tests ######################################################################## cc_test( name = "def_builder_test", srcs = [ "upb/reflection/common.h", "upb/reflection/def_builder_test.cc", "upb/reflection/def_type.h", "upb/reflection/internal/def_builder.h", ], deps = [ ":descriptor_upb_proto", ":hash", ":port", ":reflection", ":reflection_internal", ":upb", "@com_google_absl//absl/strings", "@com_google_googletest//:gtest_main", ], ) cc_test( name = "message_test", srcs = ["upb/message/test.cc"], deps = [ ":json", ":message_test_upb_proto", ":message_test_upb_proto_reflection", ":reflection", ":upb", ":wire", "//upb/test:fuzz_util", "//upb/test:test_messages_proto3_upb_proto", "@com_google_googletest//:gtest_main", ], ) proto_library( name = "message_test_proto", testonly = 1, srcs = ["upb/message/test.proto"], deps = ["@com_google_protobuf//src/google/protobuf:test_messages_proto3_proto"], ) upb_proto_library( name = "message_test_upb_proto", testonly = 1, deps = [":message_test_proto"], ) upb_proto_reflection_library( name = "message_test_upb_proto_reflection", testonly = 1, deps = [":message_test_proto"], ) # Internal C/C++ libraries ##################################################### cc_binary( name = "libupb.so", srcs = ["upb/upb_so.c"], copts = UPB_DEFAULT_COPTS + ["-DUPB_BUILD_API"], linkshared = 1, linkstatic = 1, visibility = ["//visibility:public"], deps = [ ":collections", ":collections_split64", ":mem", ":message", ":message_accessors", ":message_split64", ":mini_descriptor", ":mini_table", ":port", ], ) # Amalgamation ################################################################# # begin:github_only upb_amalgamation( name = "gen_amalgamation", outs = [ "upb.c", "upb.h", ], libs = [ ":base", ":base_internal", ":collections_internal", ":descriptor_upb_proto", ":eps_copy_input_stream", ":fastdecode", ":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", ":hash", ":lex", ":mem", ":mem_internal", ":message_accessors", ":message_internal", ":message_rep_internal", ":message_tagged_ptr", ":message_typedef", ":mini_descriptor", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":mini_table_internal", ":port", ":reflection_internal", ":reflection", ":upb", ":wire_internal", ":wire_reader", ":wire_types", ], strip_import_prefix = ["src"], ) cc_library( name = "amalgamation", srcs = ["upb.c"], hdrs = ["upb.h"], copts = UPB_DEFAULT_COPTS, deps = ["@utf8_range"], ) upb_amalgamation( name = "gen_php_amalgamation", outs = [ "php-upb.c", "php-upb.h", ], libs = [ ":base", ":base_internal", ":collections_internal", ":descriptor_upb_proto_reflection", ":descriptor_upb_proto", ":eps_copy_input_stream", ":fastdecode", ":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", ":hash", ":json", ":lex", ":mem", ":mem_internal", ":message_accessors", ":message_internal", ":message_rep_internal", ":message_tagged_ptr", ":message_typedef", ":mini_descriptor", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":mini_table_internal", ":port", ":reflection_internal", ":reflection", ":upb", ":wire_internal", ":wire_reader", ":wire_types", ], prefix = "php-", strip_import_prefix = ["src"], visibility = ["@com_google_protobuf//php:__subpackages__"], ) cc_library( name = "php_amalgamation", srcs = ["php-upb.c"], hdrs = ["php-upb.h"], copts = UPB_DEFAULT_COPTS, deps = ["@utf8_range"], ) upb_amalgamation( name = "gen_ruby_amalgamation", outs = [ "ruby-upb.c", "ruby-upb.h", ], libs = [ ":base", ":base_internal", ":collections_internal", ":descriptor_upb_proto", ":eps_copy_input_stream", ":fastdecode", ":generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", ":hash", ":json", ":lex", ":mem", ":mem_internal", ":message_accessors", ":message_internal", ":message_rep_internal", ":message_tagged_ptr", ":message_typedef", ":mini_descriptor", ":mini_descriptor_encode_internal", ":mini_descriptor_internal", ":mini_table", ":mini_table_internal", ":port", ":reflection_internal", ":reflection", ":upb", ":wire_internal", ":wire_reader", ":wire_types", ], prefix = "ruby-", strip_import_prefix = ["src"], visibility = ["@com_google_protobuf//ruby:__subpackages__"], ) cc_library( name = "ruby_amalgamation", srcs = ["ruby-upb.c"], hdrs = ["ruby-upb.h"], copts = UPB_DEFAULT_COPTS, deps = ["@utf8_range"], ) exports_files( [ "third_party/lunit/console.lua", "third_party/lunit/lunit.lua", ], visibility = ["//lua:__pkg__"], ) filegroup( name = "source_files", srcs = glob( [ "upb/**/*.c", "upb/**/*.h", "upb/**/*.hpp", "upb/**/*.inc", ], exclude = [ "upb/**/conformance_upb.c", "upb/reflection/stage0/**/*", ], ), visibility = [ "//cmake:__pkg__", "//python/dist:__pkg__", ] ) # end:github_only # begin:google_only # # py_binary( # name = "update_check_runs", # srcs = ["update_check_runs.py"], # main = "update_check_runs.py", # deps = [ # "//third_party/py/absl:app", # "//third_party/py/absl/flags", # ], # ) # # kt_native_interop_hint( # name = "upb_kotlin_native_hint", # compatible_with = ["//buildenv/target:non_prod"], # headers_to_exclude = glob([ # "**/*.hpp", # ]), # kotlin_package = "upb", # no_string_conversion = ["_upb_MiniTable_Build"], # strict_enums = [ # "upb_CType", # "upb_DecodeStatus", # "upb_EncodeStatus", # "upb_FieldType", # "upb_FindUnknown_Status", # "upb_GetExtension_Status", # "upb_GetExtensionAsBytes_Status", # "upb_Label", # "upb_MapInsertStatus", # "upb_UnknownToMessage_Status", # "upb_WireType", # ], # visibility = ["//:__subpackages__"], # ) # # end:google_only