From 5ddb1fc609d2416e8575c9e7435c608222c2edb2 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Thu, 6 Apr 2023 15:34:09 -0700 Subject: [PATCH] Remove ODR violation from WKT codegen (#12406) (#12419) * Remove ODR violation from WKT codegen (#12406) Closes #12406 COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/12406 from mkruskal-google:wkt 1c6748e6aabf55da929558c56b1314c52932153b PiperOrigin-RevId: 522418175 * Removed legacy target. --------- Co-authored-by: Mike Kruskal --- BUILD.bazel | 2 +- conformance/BUILD.bazel | 3 ++ examples/BUILD.bazel | 10 +++++-- pkg/BUILD.bazel | 4 +-- src/google/protobuf/BUILD.bazel | 33 ++++++++++++++++++++-- src/google/protobuf/compiler/BUILD.bazel | 29 ++++--------------- src/google/protobuf/util/BUILD.bazel | 9 ------ src/google/protobuf/util/json_format.proto | 3 -- 8 files changed, 49 insertions(+), 44 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 3f8e5635e8982..5b507530db9f7 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -322,7 +322,7 @@ proto_lang_toolchain( "//:descriptor_proto", ], command_line = "--cpp_out=$(OUT)", - runtime = ":protobuf", + runtime = "//src/google/protobuf:protobuf_nowkt", visibility = ["//visibility:public"], ) diff --git a/conformance/BUILD.bazel b/conformance/BUILD.bazel index ac007958c99c4..3ab566642b7c4 100644 --- a/conformance/BUILD.bazel +++ b/conformance/BUILD.bazel @@ -138,6 +138,9 @@ cc_library( includes = ["."], deps = [ ":conformance_cc_proto", + "//src/google/protobuf/util:differencer", + "//src/google/protobuf/util:json_util", + "//src/google/protobuf/util:type_resolver_util", "@com_google_absl//absl/strings", "@com_google_absl//absl/strings:str_format", ], diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel index d5a719ca88a74..265a0b978d497 100644 --- a/examples/BUILD.bazel +++ b/examples/BUILD.bazel @@ -36,13 +36,19 @@ cc_proto_library( cc_binary( name = "add_person_cpp", srcs = ["add_person.cc"], - deps = [":addressbook_cc_proto"], + deps = [ + ":addressbook_cc_proto", + "@com_google_protobuf//:protobuf", + ], ) cc_binary( name = "list_people_cpp", srcs = ["list_people.cc"], - deps = [":addressbook_cc_proto"], + deps = [ + ":addressbook_cc_proto", + "@com_google_protobuf//:protobuf", + ], ) # Similar to cc_proto_library but for Java. diff --git a/pkg/BUILD.bazel b/pkg/BUILD.bazel index 4edda57b43813..1903a6f2f60ed 100644 --- a/pkg/BUILD.bazel +++ b/pkg/BUILD.bazel @@ -380,7 +380,7 @@ cc_dist_library( deps = [ "//src/google/protobuf:arena_align", "//src/google/protobuf:protobuf_nowkt", - "//src/google/protobuf:wkt_cc_proto", + "//src/google/protobuf:cmake_wkt_cc_proto", "//src/google/protobuf/compiler:importer", "//src/google/protobuf/json", "//src/google/protobuf/util:delimited_message_util", @@ -416,7 +416,7 @@ cc_dist_library( testonly = 1, tags = ["manual"], deps = ["//src/google/protobuf:lite_test_util"], - dist_deps = [":protobuf_lite"], + dist_deps = [":protobuf"], ) cc_dist_library( diff --git a/src/google/protobuf/BUILD.bazel b/src/google/protobuf/BUILD.bazel index d986479ef7966..aec8130a06ca6 100644 --- a/src/google/protobuf/BUILD.bazel +++ b/src/google/protobuf/BUILD.bazel @@ -107,6 +107,18 @@ WELL_KNOWN_TYPES = [ "wrappers", ] +proto_library( + name = "wkt_proto", + visibility = ["//visibility:private"], + deps = [wkt + "_proto" for wkt in WELL_KNOWN_TYPES], +) + +cc_proto_library( + name = "wkt_cc_proto", + visibility = ["//pkg:__pkg__"], + deps = ["wkt_proto"], +) + # When we generate code for the well-known types, we put the resulting files in # wkt/google/protobuf and add ./wkt to the include paths below. This is a # somewhat strange setup but is necessary to satisfy these two constraints: @@ -121,12 +133,12 @@ genrule( ["wkt/google/protobuf/" + wkt + ".pb.h" for wkt in WELL_KNOWN_TYPES] + ["wkt/google/protobuf/" + wkt + ".pb.cc" for wkt in WELL_KNOWN_TYPES], cmd = """ - $(execpath //src/google/protobuf/compiler:protoc_nowkt) \ + $(execpath //:protoc) \ --cpp_out=dllexport_decl=PROTOBUF_EXPORT:$(RULEDIR)/wkt \ --proto_path=$$(dirname $$(dirname $$(dirname $(location any.proto)))) \ $(SRCS) """, - exec_tools = ["//src/google/protobuf/compiler:protoc_nowkt"], + exec_tools = ["//:protoc"], visibility = ["//visibility:private"], ) @@ -139,8 +151,11 @@ staleness_test( tags = ["manual"], ) +# This is necessary for our generated cmake configs to pick up the checked in +# WKT files. +# TODO(b/246826624) Remove this once we generate WKT code from cmake. cc_library( - name = "wkt_cc_proto", + name = "cmake_wkt_cc_proto", srcs = ["wkt/google/protobuf/" + wkt + ".pb.cc" for wkt in WELL_KNOWN_TYPES], hdrs = ["wkt/google/protobuf/" + wkt + ".pb.h" for wkt in WELL_KNOWN_TYPES], copts = COPTS, @@ -425,6 +440,7 @@ cc_library( include_prefix = "google/protobuf", linkopts = LINK_OPTS, visibility = [ + "//:__pkg__", "//pkg:__pkg__", "//src/google/protobuf:__subpackages__", ], @@ -784,6 +800,7 @@ cc_library( visibility = ["//:__subpackages__"], deps = [ "//src/google/protobuf/io", + "//src/google/protobuf/util:differencer", "@com_google_googletest//:gtest", ], ) @@ -935,9 +952,11 @@ cc_test( ":cc_test_protos", ":protobuf", ":test_util", + ":test_util2", "//src/google/protobuf/io", "//src/google/protobuf/stubs", "//src/google/protobuf/testing", + "//src/google/protobuf/util:differencer", "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main", ], @@ -1057,6 +1076,9 @@ cc_test( ":cc_test_protos", ":protobuf", ":test_util", + ":test_util2", + "//src/google/protobuf/util:differencer", + "//src/google/protobuf/util:time_util", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/container:flat_hash_set", "@com_google_googletest//:gtest", @@ -1078,6 +1100,7 @@ cc_test( "//src/google/protobuf/io", "//src/google/protobuf/stubs", "//src/google/protobuf/testing", + "//src/google/protobuf/util:differencer", "@com_google_absl//absl/log:scoped_mock_log", "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main", @@ -1235,6 +1258,7 @@ cc_test( "//src/google/protobuf/io", "//src/google/protobuf/stubs", "//src/google/protobuf/testing", + "@com_google_absl//absl/log:die_if_null", "@com_google_absl//absl/log:scoped_mock_log", "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main", @@ -1296,6 +1320,7 @@ cc_test( "//src/google/protobuf/io", "//src/google/protobuf/stubs", "//src/google/protobuf/testing", + "//src/google/protobuf/util:differencer", "@com_google_absl//absl/log:scoped_mock_log", "@com_google_googletest//:gtest", "@com_google_googletest//:gtest_main", @@ -1308,7 +1333,9 @@ cc_test( deps = [ ":cc_test_protos", ":protobuf", + "//src/google/protobuf/compiler:importer", "//src/google/protobuf/compiler:retention", + "//src/google/protobuf/util:differencer", "@com_google_googletest//:gtest_main", ], ) diff --git a/src/google/protobuf/compiler/BUILD.bazel b/src/google/protobuf/compiler/BUILD.bazel index 197721101ac03..e92add699077d 100644 --- a/src/google/protobuf/compiler/BUILD.bazel +++ b/src/google/protobuf/compiler/BUILD.bazel @@ -99,11 +99,15 @@ cc_library( ) cc_library( - name = "protoc_lib_nowkt", + name = "protoc_lib", srcs = [ "main.cc", ], copts = COPTS, + visibility = [ + "//:__pkg__", + "//pkg:__pkg__", + ], deps = [ ":code_generator", ":command_line_interface", @@ -120,29 +124,6 @@ cc_library( ], ) -cc_binary( - name = "protoc_nowkt", - copts = COPTS, - linkopts = LINK_OPTS, - visibility = [ - "//src/google/protobuf:__pkg__", - ], - deps = [":protoc_lib_nowkt"], -) - -cc_library( - name = "protoc_lib", - copts = COPTS, - visibility = [ - "//:__pkg__", - "//pkg:__pkg__", - ], - deps = [ - ":protoc_lib_nowkt", - "//:protobuf", - ], -) - # Note: this is an alias for now. In the future, this rule will become the # cc_binary for protoc, and //:protoc will become an alias. alias( diff --git a/src/google/protobuf/util/BUILD.bazel b/src/google/protobuf/util/BUILD.bazel index 609a86a27bc3d..716aeb48c2850 100644 --- a/src/google/protobuf/util/BUILD.bazel +++ b/src/google/protobuf/util/BUILD.bazel @@ -213,15 +213,6 @@ proto_library( testonly = 1, srcs = ["json_format.proto"], strip_import_prefix = "/src", - deps = [ - "//:any_proto", - "//:duration_proto", - "//:field_mask_proto", - "//:struct_proto", - "//:test_protos", - "//:timestamp_proto", - "//:wrappers_proto", - ], ) cc_proto_library( diff --git a/src/google/protobuf/util/json_format.proto b/src/google/protobuf/util/json_format.proto index a2703ce029b51..26c53dd9b251b 100644 --- a/src/google/protobuf/util/json_format.proto +++ b/src/google/protobuf/util/json_format.proto @@ -38,9 +38,6 @@ syntax = "proto2"; package protobuf_unittest; -import "google/protobuf/any.proto"; -import "google/protobuf/struct.proto"; - message TestFlagsAndStrings { required int32 A = 1; repeated group RepeatedGroup = 2 {