1# Copyright (c) 2009-2024, Google LLC 2# All rights reserved. 3# 4# Use of this source code is governed by a BSD-style 5# license that can be found in the LICENSE file or at 6# https://developers.google.com/open-source/licenses/bsd 7 8load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain") 9load("//upb/bazel:build_defs.bzl", "UPB_DEFAULT_CPPOPTS") 10load( 11 "//upb_generator:bootstrap_compiler.bzl", 12 "bootstrap_cc_binary", 13 "bootstrap_cc_library", 14) 15 16package(default_applicable_licenses = ["//:license"]) 17 18licenses(["notice"]) 19 20bootstrap_cc_library( 21 name = "generator", 22 srcs = [ 23 "fasttable.cc", 24 "fasttable.h", 25 "generator.cc", 26 ], 27 hdrs = ["generator.h"], 28 bootstrap_deps = [ 29 "//upb_generator:common", 30 "//upb_generator:file_layout", 31 "//upb_generator:plugin", 32 "//upb_generator:plugin_upb_proto", 33 "//upb/reflection:descriptor_upb_proto", 34 "//upb/reflection:reflection", 35 ], 36 copts = UPB_DEFAULT_CPPOPTS, 37 deps = [ 38 ":names", 39 ":names_internal", 40 "//src/google/protobuf/compiler:code_generator_lite", 41 "//upb:base", 42 "//upb:mem", 43 "//upb:mini_table", 44 "//upb:port", 45 "//upb:wire_reader", 46 "//upb/mini_table:internal", 47 "//upb_generator/common:names", 48 "@com_google_absl//absl/container:flat_hash_map", 49 "@com_google_absl//absl/container:flat_hash_set", 50 "@com_google_absl//absl/log:absl_check", 51 "@com_google_absl//absl/log:absl_log", 52 "@com_google_absl//absl/strings", 53 ], 54) 55 56cc_library( 57 name = "names", 58 srcs = ["names.cc"], 59 hdrs = ["names.h"], 60 visibility = [ 61 "//src/google/protobuf/compiler/hpb:__pkg__", 62 "//src/google/protobuf/compiler/rust:__pkg__", 63 "//third_party/kotlin/protobuf/generator/native:__pkg__", 64 "//upb_generator:__subpackages__", 65 ], 66 deps = [ 67 ":names_internal", 68 "//upb:port", 69 "@com_google_absl//absl/strings", 70 ], 71) 72 73cc_library( 74 name = "names_internal", 75 srcs = ["names_internal.cc"], 76 hdrs = ["names_internal.h"], 77 visibility = [ 78 # For bootstrapping. 79 "//upb_generator/c:__pkg__", 80 ], 81 deps = [ 82 "//upb_generator/common:names", 83 "@com_google_absl//absl/strings", 84 ], 85) 86 87bootstrap_cc_binary( 88 name = "protoc-gen-upb_minitable", 89 bootstrap_deps = [ 90 ":generator_with_main", 91 ], 92 copts = UPB_DEFAULT_CPPOPTS, 93 visibility = [ 94 "//editions/codegen_tests:__pkg__", 95 "//net/proto2/contrib/protoc_explorer:__pkg__", 96 "//rust:__pkg__", 97 "//third_party/prototiller/transformer:__pkg__", 98 ], 99) 100 101# TODO: This wrapper lib is a hack that we need because of how CcInfo works in Bazel 6. 102# In Bazel 7, our cmake dependency scraping works fine with cc_binary. 103bootstrap_cc_library( 104 name = "generator_with_main", 105 srcs = ["main.cc"], 106 bootstrap_deps = [ 107 ":generator", 108 "//upb_generator:file_layout", 109 "//upb_generator:common", 110 "//upb_generator:plugin", 111 "//upb/reflection:reflection", 112 ], 113 copts = UPB_DEFAULT_CPPOPTS, 114 visibility = ["//pkg:__pkg__"], 115 deps = [ 116 ":names", 117 ":names_internal", 118 "//src/google/protobuf/compiler:code_generator_lite", 119 "//upb:base", 120 "//upb:port", 121 "//upb_generator/common:names", 122 "@com_google_absl//absl/log:absl_check", 123 "@com_google_absl//absl/log:absl_log", 124 "@com_google_absl//absl/strings", 125 ], 126) 127 128proto_lang_toolchain( 129 name = "toolchain", 130 command_line = "--upb_minitable_out=$(OUT)", 131 output_files = "multiple", 132 plugin = ":protoc-gen-upb_minitable_stage1", 133 plugin_format_flag = "--plugin=protoc-gen-upb_minitable=%s", 134 progress_message = "Generating upb minitables", 135 runtime = "//upb:generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me", 136 # TODO: Restrict to "//bazel:__pkg__" once we are on Bazel >=6.5. 137 visibility = ["//visibility:public"], 138) 139