Remove references to rules_proto

They are not needed after the rules are move into protobuf repo.
Except for the reference to toolchain type, which is currently in rules_proto and can be moved after the implementation is moved into protobuf repo.

PiperOrigin-RevId: 622176865
diff --git a/BUILD.bazel b/BUILD.bazel
index b83d49e..74ae23a 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -1,9 +1,12 @@
 # Bazel (https://bazel.build/) BUILD file for Protobuf.
 
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library")
-load("@rules_java//java:defs.bzl", "java_lite_proto_library", "java_proto_library")
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
+load("//bazel:java_proto_library.bzl", "java_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
+load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
 load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
 load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
 
@@ -21,7 +24,7 @@
 #
 # java_proto_library(
 #   name = "any_java_proto",
-#   deps = ["@com_google_protobuf//:any_proto"],
+#   deps = ["@protobuf//:any_proto"],
 # )
 ################################################################################
 
diff --git a/MODULE.bazel b/MODULE.bazel
index d972fef..d54486b 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -17,7 +17,9 @@
 bazel_dep(name = "rules_java", version = "4.0.0")
 bazel_dep(name = "rules_jvm_external", version = "5.1")
 bazel_dep(name = "rules_pkg", version = "0.7.0")
-bazel_dep(name = "rules_proto", version = "4.0.0")
 bazel_dep(name = "rules_python", version = "0.10.2")
 bazel_dep(name = "platforms", version = "0.0.8")
 bazel_dep(name = "zlib", version = "1.2.11")
+
+# TODO: remove after toolchain types are moved to protobuf
+bazel_dep(name = "rules_proto", version = "4.0.0")
\ No newline at end of file
diff --git a/WORKSPACE b/WORKSPACE
index 3219b75..63785c3 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -5,6 +5,10 @@
 # buildifier: disable=duplicated-name
 local_repository(name = "com_google_protobuf", path = ".")
 
+# Second self-reference that makes it possible to load proto rules from @protobuf.
+# buildifier: disable=duplicated-name
+local_repository(name = "protobuf", path = ".")
+
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
 local_repository(
diff --git a/bazel/BUILD b/bazel/BUILD
index e94c62d..89eb049 100644
--- a/bazel/BUILD
+++ b/bazel/BUILD
@@ -22,8 +22,5 @@
         "upb_proto_reflection_library.bzl",
     ],
     visibility = ["//visibility:public"],
-    deps = [
-        "//bazel/private:upb_proto_library_internal_bzl",
-        "@rules_proto//proto:defs",
-    ],
+    deps = ["//bazel/private:upb_proto_library_internal_bzl"],
 )
diff --git a/bazel/common/BUILD.bazel b/bazel/common/BUILD.bazel
index e69de29..fc024fe 100644
--- a/bazel/common/BUILD.bazel
+++ b/bazel/common/BUILD.bazel
@@ -0,0 +1,12 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+
+bzl_library(
+    name = "proto_common_bzl",
+    srcs = [
+        "proto_common.bzl",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//bazel/private:native_bzl",
+    ],
+)
diff --git a/bazel/private/BUILD b/bazel/private/BUILD.bazel
similarity index 80%
rename from bazel/private/BUILD
rename to bazel/private/BUILD.bazel
index c501c45..d1f8a7c 100644
--- a/bazel/private/BUILD
+++ b/bazel/private/BUILD.bazel
@@ -7,10 +7,6 @@
 
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
 
-# begin:google_only
-# package(default_applicable_licenses = ["//upb:license"])
-# end:google_only
-
 licenses(["notice"])
 
 bzl_library(
@@ -23,8 +19,16 @@
     ],
     visibility = ["//bazel:__pkg__"],
     deps = [
+        "//bazel/common:proto_common_bzl",
         "@bazel_skylib//lib:paths",
         "@bazel_tools//tools/cpp:toolchain_utils.bzl",
-        "@rules_proto//proto:defs",
     ],
 )
+
+bzl_library(
+    name = "native_bzl",
+    srcs = [
+        "native.bzl",
+    ],
+    visibility = ["//bazel:__subpackages__"],
+)
diff --git a/bazel/private/proto_toolchain_rule.bzl b/bazel/private/proto_toolchain_rule.bzl
index 27527a6..9487a06 100644
--- a/bazel/private/proto_toolchain_rule.bzl
+++ b/bazel/private/proto_toolchain_rule.bzl
@@ -6,7 +6,7 @@
 def _impl(ctx):
     kwargs = {}
     if getattr(proto_common, "INCOMPATIBLE_PASS_TOOLCHAIN_TYPE", False):
-        kwargs["toolchain_type"] = "//third_party/bazel_rules/rules_proto/proto:toolchain_type"
+        kwargs["toolchain_type"] = "@rules_proto//proto:toolchain_type"
 
     return [
         DefaultInfo(
diff --git a/bazel/private/upb_proto_library_internal/aspect.bzl b/bazel/private/upb_proto_library_internal/aspect.bzl
index 3af579a..6f7b317 100644
--- a/bazel/private/upb_proto_library_internal/aspect.bzl
+++ b/bazel/private/upb_proto_library_internal/aspect.bzl
@@ -1,6 +1,6 @@
 """Implementation of the aspect that powers the upb_*_proto_library() rules."""
 
-load("@rules_proto//proto:defs.bzl", "proto_common")
+load("//bazel/common:proto_common.bzl", "proto_common")
 load(":upb_proto_library_internal/cc_library_func.bzl", "cc_library_func")
 load(":upb_proto_library_internal/copts.bzl", "UpbProtoLibraryCoptsInfo")
 
diff --git a/bazel/toolchains/proto_toolchain.bzl b/bazel/toolchains/proto_toolchain.bzl
index 2b267fe..171e08c 100644
--- a/bazel/toolchains/proto_toolchain.bzl
+++ b/bazel/toolchains/proto_toolchain.bzl
@@ -19,7 +19,7 @@
 
     native.toolchain(
         name = name + "_toolchain",
-        toolchain_type = "//third_party/bazel_rules/rules_proto/proto:toolchain_type",
+        toolchain_type = "@rules_proto//proto:toolchain_type",
         exec_compatible_with = exec_compatible_with,
         target_compatible_with = [],
         toolchain = name,
diff --git a/benchmarks/BUILD b/benchmarks/BUILD
index a526b0f..59d3fbf 100644
--- a/benchmarks/BUILD
+++ b/benchmarks/BUILD
@@ -5,11 +5,9 @@
 # license that can be found in the LICENSE file or at
 # https://developers.google.com/open-source/licenses/bsd
 
-# begin:google_only
-# load("@rules_cc//cc:defs.bzl", "cc_proto_library")
-# end:google_only
-
 load("@rules_python//python:defs.bzl", "py_binary")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load(
     "//bazel:upb_proto_library.bzl",
     "upb_c_proto_library",
@@ -19,7 +17,6 @@
     ":build_defs.bzl",
     "cc_optimizefor_proto_library",
     "expand_suffixes",
-    "proto_library",
     "tmpl_cc_binary",
 )
 
diff --git a/benchmarks/BUILD.googleapis b/benchmarks/BUILD.googleapis
index 0587de7..f399a81 100644
--- a/benchmarks/BUILD.googleapis
+++ b/benchmarks/BUILD.googleapis
@@ -29,7 +29,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 load(
-    "@rules_proto//proto:defs.bzl",
+    "@protobuf//bazel:proto_library.bzl",
     "proto_library",
 )
 
diff --git a/benchmarks/build_defs.bzl b/benchmarks/build_defs.bzl
index a689431..f2e1431 100644
--- a/benchmarks/build_defs.bzl
+++ b/benchmarks/build_defs.bzl
@@ -5,24 +5,17 @@
 # license that can be found in the LICENSE file or at
 # https://developers.google.com/open-source/licenses/bsd
 
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
+
 # begin:google_only
-# load("@rules_cc//cc:defs.bzl", _cc_proto_library = "cc_proto_library")
-#
 # _is_google3 = True
 # end:google_only
 
 # begin:github_only
-_cc_proto_library = native.cc_proto_library
 _is_google3 = False
 # end:github_only
 
-def proto_library(**kwargs):
-    if _is_google3:
-        kwargs["cc_api_version"] = 2
-    native.proto_library(
-        **kwargs
-    )
-
 def tmpl_cc_binary(name, gen, args, replacements = [], **kwargs):
     srcs = [name + ".cc"]
     native.genrule(
@@ -57,7 +50,7 @@
         srcs = outs,
     )
 
-    _cc_proto_library(
+    cc_proto_library(
         name = name,
         deps = [":" + name + "_proto"],
     )
diff --git a/build_defs/BUILD.bazel b/build_defs/BUILD.bazel
index f1394e3..a0e0438 100644
--- a/build_defs/BUILD.bazel
+++ b/build_defs/BUILD.bazel
@@ -1,8 +1,8 @@
 # Internal Starlark definitions for Protobuf.
 
 load("@bazel_skylib//lib:selects.bzl", "selects")
-load("@rules_cc//cc:defs.bzl", starlark_cc_proto_library = "cc_proto_library")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
+load("//bazel:cc_proto_library.bzl", starlark_cc_proto_library = "cc_proto_library")
 load(":cc_proto_blacklist_test.bzl", "cc_proto_blacklist_test")
 load(":compiler_config_setting.bzl", "create_compiler_config_setting")
 
diff --git a/conformance/BUILD.bazel b/conformance/BUILD.bazel
index 72a127a..e3c353d 100644
--- a/conformance/BUILD.bazel
+++ b/conformance/BUILD.bazel
@@ -1,6 +1,6 @@
 # Conformance testing for Protobuf.
 
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "objc_library")
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "objc_library")
 load(
     "@rules_pkg//pkg:mappings.bzl",
     "pkg_filegroup",
@@ -9,6 +9,7 @@
 )
 load("@rules_ruby//ruby:defs.bzl", "ruby_binary")
 load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
 load("//build_defs:internal_shell.bzl", "inline_sh_binary")
 load("//ruby:defs.bzl", "internal_ruby_proto_library")
 
diff --git a/docs/cpp_build_systems.md b/docs/cpp_build_systems.md
index b7f827b..ff09575 100644
--- a/docs/cpp_build_systems.md
+++ b/docs/cpp_build_systems.md
@@ -177,7 +177,7 @@
 
 ```
 $ cat gen_file_lists_example/BUILD.bazel
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("@protobuf//bazel:proto_library.bzl", "proto_library")
 load("//pkg:build_systems.bzl", "gen_cmake_file_lists")
 
 filegroup(
diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel
index 72186f6..322205a 100644
--- a/examples/BUILD.bazel
+++ b/examples/BUILD.bazel
@@ -5,10 +5,12 @@
 # example.
 
 load("@bazel_skylib//rules:build_test.bzl", "build_test")
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library")
-load("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library")
+load("@protobuf//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("@protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
+load("@protobuf//bazel:java_proto_library.bzl", "java_proto_library")
+load("@protobuf//bazel:proto_library.bzl", "proto_library")
+load("@rules_cc//cc:defs.bzl", "cc_binary")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
 
 # For each .proto file, a proto_library target should be defined. This target
 # is not bound to any particular language. Instead, it defines the dependency
@@ -19,7 +21,7 @@
 proto_library(
     name = "addressbook_proto",
     srcs = ["addressbook.proto"],
-    deps = ["@com_google_protobuf//:timestamp_proto"],
+    deps = ["@protobuf//:timestamp_proto"],
 )
 
 # The cc_proto_library rule generates C++ code for a proto_library rule. It
@@ -39,8 +41,8 @@
     srcs = ["add_person.cc"],
     deps = [
         ":addressbook_cc_proto",
-        "@com_google_protobuf//:protobuf",
-        "@com_google_protobuf//src/google/protobuf/util:time_util",
+        "@protobuf",
+        "@protobuf//src/google/protobuf/util:time_util",
     ],
 )
 
@@ -49,8 +51,8 @@
     srcs = ["list_people.cc"],
     deps = [
         ":addressbook_cc_proto",
-        "@com_google_protobuf//:protobuf",
-        "@com_google_protobuf//src/google/protobuf/util:time_util",
+        "@protobuf",
+        "@protobuf//src/google/protobuf/util:time_util",
     ],
 )
 
diff --git a/examples/MODULE.bazel b/examples/MODULE.bazel
index 7ce5eec..5447915 100644
--- a/examples/MODULE.bazel
+++ b/examples/MODULE.bazel
@@ -1,5 +1,5 @@
 """Bazel module dependencies"""
-bazel_dep(name = "protobuf", version = "0.0.0", dev_dependency = True, repo_name = "com_google_protobuf")
+bazel_dep(name = "protobuf", version = "0.0.0", dev_dependency = True)
 
 local_path_override(
     module_name = "protobuf",
@@ -10,4 +10,3 @@
 bazel_dep(name = "rules_cc", version = "0.0.1")
 bazel_dep(name = "rules_java", version = "7.3.0")
 bazel_dep(name = "rules_pkg", version = "0.7.0")
-bazel_dep(name = "rules_proto", version = "4.0.0")
diff --git a/examples/WORKSPACE b/examples/WORKSPACE
index 901b344..44b43cf 100644
--- a/examples/WORKSPACE
+++ b/examples/WORKSPACE
@@ -2,14 +2,14 @@
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
-# This com_google_protobuf repository is required for proto_library rule.
+# This protobuf repository is required for proto_library rule.
 # It provides the protocol compiler binary (i.e., protoc).
 #
 # We declare it as local_repository so we can test changes
 # before they get merged. You'll want to use the following instead:
 #
 # http_archive(
-#     name = "com_google_protobuf",
+#     name = "protobuf",
 #     sha256 = "c29d8b4b79389463c546f98b15aa4391d4ed7ec459340c47bffe15db63eb9126",
 #     strip_prefix = "protobuf-3.21.3",
 #     urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.3.tar.gz"],
@@ -20,6 +20,11 @@
     path = "..",
 )
 
+local_repository(
+    name = "protobuf",
+    path = "..",
+)
+
 # Similar to com_google_protobuf but for Java lite. If you are building
 # for Android, the lite version should be preferred because it has a much
 # smaller code size.
@@ -37,6 +42,6 @@
     url = "https://github.com/bazelbuild/rules_python/releases/download/0.25.0/rules_python-0.25.0.tar.gz",
 )
 
-load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
+load("@protobuf//:protobuf_deps.bzl", "protobuf_deps")
 
 protobuf_deps()
diff --git a/java/core/BUILD.bazel b/java/core/BUILD.bazel
index ba676c9..248fd7c 100644
--- a/java/core/BUILD.bazel
+++ b/java/core/BUILD.bazel
@@ -1,9 +1,11 @@
 load("@bazel_skylib//rules:build_test.bzl", "build_test")
-load("@rules_java//java:defs.bzl", "java_lite_proto_library", "java_proto_library")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
 load("//:protobuf.bzl", "internal_gen_well_known_protos_java")
 load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
+load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
+load("//bazel:java_proto_library.bzl", "java_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
+load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
 load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library", "protobuf_versioned_java_library")
 load("//conformance:defs.bzl", "conformance_test")
 load("//java/internal:testing.bzl", "junit_tests")
diff --git a/java/kotlin-lite/BUILD.bazel b/java/kotlin-lite/BUILD.bazel
index 873d070..5d77dbc 100644
--- a/java/kotlin-lite/BUILD.bazel
+++ b/java/kotlin-lite/BUILD.bazel
@@ -1,9 +1,9 @@
 load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
-load("@rules_java//java:defs.bzl", "java_lite_proto_library")
 load("@rules_jvm_external//:kt_defs.bzl", "kt_jvm_export")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
 load("//:protobuf.bzl", "internal_gen_kt_protos")
 load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
+load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
 
 java_lite_proto_library(
     name = "example_extensible_message_java_proto_lite",
diff --git a/java/kotlin/BUILD.bazel b/java/kotlin/BUILD.bazel
index babdc46..1e5a8ab 100644
--- a/java/kotlin/BUILD.bazel
+++ b/java/kotlin/BUILD.bazel
@@ -1,10 +1,10 @@
 load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
-load("@rules_java//java:defs.bzl", "java_proto_library")
 load("@rules_jvm_external//:kt_defs.bzl", "kt_jvm_export")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
 load("//:protobuf.bzl", "internal_gen_kt_protos")
 load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
+load("//bazel:java_proto_library.bzl", "java_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 
 exports_files([
     "src/test/kotlin/com/google/protobuf/Proto3Test.kt",
diff --git a/java/lite/BUILD.bazel b/java/lite/BUILD.bazel
index dba34cd..9c6b2ec 100644
--- a/java/lite/BUILD.bazel
+++ b/java/lite/BUILD.bazel
@@ -1,6 +1,6 @@
 load("@bazel_skylib//rules:build_test.bzl", "build_test")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain")
+load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
 load("//conformance:defs.bzl", "conformance_test")
 load("//java/internal:testing.bzl", "junit_tests")
 
diff --git a/java/util/BUILD.bazel b/java/util/BUILD.bazel
index 24d2c7f..6b2da2b 100644
--- a/java/util/BUILD.bazel
+++ b/java/util/BUILD.bazel
@@ -1,7 +1,7 @@
-load("@rules_java//java:defs.bzl", "java_proto_library")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
 load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION")
+load("//bazel:java_proto_library.bzl", "java_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_versioned_java_library")
 load("//java/internal:testing.bzl", "junit_tests")
 
diff --git a/protobuf.bzl b/protobuf.bzl
index a41c8f8..7db5146 100644
--- a/protobuf.bzl
+++ b/protobuf.bzl
@@ -1,7 +1,7 @@
 load("@bazel_skylib//lib:versions.bzl", "versions")
 load("@rules_cc//cc:defs.bzl", "objc_library")
-load("@rules_proto//proto:defs.bzl", "ProtoInfo")
 load("@rules_python//python:defs.bzl", "py_library")
+load("//bazel/common:proto_info.bzl", "ProtoInfo")
 
 def _GetPath(ctx, path):
     if ctx.label.workspace_root:
diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl
index 563c165..558540c 100644
--- a/protobuf_deps.bzl
+++ b/protobuf_deps.bzl
@@ -83,6 +83,7 @@
             sha256 = "469b7f3b580b4fcf8112f4d6d0d5a4ce8e1ad5e21fee67d8e8335d5f8b3debab",
         )
 
+    # TODO: remove after toolchain types are moved to protobuf
     if not native.existing_rule("rules_proto"):
         http_archive(
             name = "rules_proto",
diff --git a/protos_generator/tests/BUILD b/protos_generator/tests/BUILD
index 78edee5..fabee7f 100644
--- a/protos_generator/tests/BUILD
+++ b/protos_generator/tests/BUILD
@@ -6,7 +6,7 @@
 # https://developers.google.com/open-source/licenses/bsd
 
 load(
-    "@rules_cc//cc:defs.bzl",
+    "//bazel:cc_proto_library.bzl",
     "cc_proto_library",
 )
 load(
diff --git a/python/dist/py_proto_library.bzl b/python/dist/py_proto_library.bzl
index 2192230..d05cb6e 100644
--- a/python/dist/py_proto_library.bzl
+++ b/python/dist/py_proto_library.bzl
@@ -16,12 +16,8 @@
 """
 
 load("@bazel_skylib//lib:paths.bzl", "paths")
-
-# begin:github_only
-load("@rules_proto//proto:defs.bzl", "ProtoInfo")
-# end:github_only
-
 load("@rules_python//python:py_info.bzl", "PyInfo")
+load("//bazel/common:proto_info.bzl", "ProtoInfo")
 
 # Generic support code #########################################################
 
diff --git a/rust/BUILD b/rust/BUILD
index 9b49ccd..1f731e3 100644
--- a/rust/BUILD
+++ b/rust/BUILD
@@ -1,8 +1,8 @@
 # Protobuf Rust runtime packages.
 
 load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
-load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain")
 load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+load("//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain")
 
 package(
     default_visibility = [
diff --git a/rust/test/BUILD b/rust/test/BUILD
index 1e770c7..d0e86bb 100644
--- a/rust/test/BUILD
+++ b/rust/test/BUILD
@@ -1,4 +1,4 @@
-load("@rules_cc//cc:defs.bzl", "cc_proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
 load(
     "//rust:defs.bzl",
     "rust_cc_proto_library",
diff --git a/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl b/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
index 418d076..15e72fd 100644
--- a/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
+++ b/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
@@ -1,7 +1,7 @@
 """This module contains unit tests for rust_proto_library and its aspect."""
 
 load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
-load("@rules_cc//cc:defs.bzl", "cc_proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
 load("//rust:aspects.bzl", "RustProtoInfo")
 load("//rust:defs.bzl", "rust_cc_proto_library", "rust_upb_proto_library")
 load(":defs.bzl", "ActionsInfo", "attach_cc_aspect", "attach_upb_aspect")
diff --git a/src/google/protobuf/BUILD.bazel b/src/google/protobuf/BUILD.bazel
index f6581f0..24b6452 100644
--- a/src/google/protobuf/BUILD.bazel
+++ b/src/google/protobuf/BUILD.bazel
@@ -2,9 +2,10 @@
 # Protocol Buffers: C++ Runtime and common proto files
 ################################################################################
 
-load("@rules_cc//cc:defs.bzl", "cc_library", "cc_proto_library", "cc_test")
+load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
 load("//upb/cmake:build_defs.bzl", "staleness_test")
 
diff --git a/src/google/protobuf/bridge/BUILD.bazel b/src/google/protobuf/bridge/BUILD.bazel
index c219b38..56d4b79 100644
--- a/src/google/protobuf/bridge/BUILD.bazel
+++ b/src/google/protobuf/bridge/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 
 package(
     default_visibility = ["//visibility:public"],
diff --git a/src/google/protobuf/compiler/BUILD.bazel b/src/google/protobuf/compiler/BUILD.bazel
index 60e73a9..8f9ffb3 100644
--- a/src/google/protobuf/compiler/BUILD.bazel
+++ b/src/google/protobuf/compiler/BUILD.bazel
@@ -2,14 +2,15 @@
 # Protocol Buffers Compiler
 ################################################################################
 
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "cc_test")
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
 load(
     "@rules_pkg//pkg:mappings.bzl",
     "pkg_attributes",
     "pkg_files",
     "strip_prefix",
 )
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load("//build_defs:arch_tests.bzl", "aarch64_test", "x86_64_test")
 load("//build_defs:cpp_opts.bzl", "COPTS")
 load("test_plugin_injection.bzl", "inject_plugin_paths")
diff --git a/src/google/protobuf/compiler/cpp/BUILD.bazel b/src/google/protobuf/compiler/cpp/BUILD.bazel
index 7552a03..a9f4a55 100644
--- a/src/google/protobuf/compiler/cpp/BUILD.bazel
+++ b/src/google/protobuf/compiler/cpp/BUILD.bazel
@@ -2,9 +2,10 @@
 # Protocol Buffers Compiler - C++ code generator
 ################################################################################
 
-load("@rules_cc//cc:defs.bzl", "cc_library", "cc_proto_library", "cc_test")
+load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load("//build_defs:cpp_opts.bzl", "COPTS")
 
 cc_library(
diff --git a/src/google/protobuf/editions/BUILD b/src/google/protobuf/editions/BUILD
index 6a0e15d..ded332f 100644
--- a/src/google/protobuf/editions/BUILD
+++ b/src/google/protobuf/editions/BUILD
@@ -1,7 +1,7 @@
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("@rules_cc//cc:defs.bzl", "cc_proto_library")
 load("@rules_python//python:proto.bzl", "py_proto_library")
 load("//:protobuf.bzl", "internal_objc_proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
 load("//bazel:upb_proto_library.bzl", "upb_c_proto_library", "upb_proto_reflection_library")
 load(":defaults.bzl", "compile_edition_defaults", "embed_edition_defaults")
 
diff --git a/src/google/protobuf/editions/codegen_tests/BUILD b/src/google/protobuf/editions/codegen_tests/BUILD
index 09b94f2..1924d3e 100644
--- a/src/google/protobuf/editions/codegen_tests/BUILD
+++ b/src/google/protobuf/editions/codegen_tests/BUILD
@@ -1,4 +1,4 @@
-load("@rules_cc//cc:defs.bzl", "cc_proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
 
 exports_files(
     glob(["*.proto"]) + ["rust_bazel_crate_mapping.txt"],
diff --git a/src/google/protobuf/util/BUILD.bazel b/src/google/protobuf/util/BUILD.bazel
index 3edbc4a..b972875 100644
--- a/src/google/protobuf/util/BUILD.bazel
+++ b/src/google/protobuf/util/BUILD.bazel
@@ -2,9 +2,10 @@
 # Protocol Buffers C++ Utilities
 ################################################################################
 
-load("@rules_cc//cc:defs.bzl", "cc_library", "cc_proto_library", "cc_test")
+load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
 load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
-load("@rules_proto//proto:defs.bzl", "proto_library")
+load("//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("//bazel:proto_library.bzl", "proto_library")
 load("//build_defs:cpp_opts.bzl", "COPTS")
 
 cc_library(