diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
index 25a756d01961a7..29bba96c057beb 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleKey.java
@@ -24,12 +24,11 @@
public abstract class ModuleKey {
/**
- * A mapping from module name to repository name.
+ * A mapping from module name to repository name for certain special "well-known" modules.
*
- *
For some well known modules, their repository names are referenced in default label values
- * of some native rules' attributes and command line flags, which don't go through repo mappings.
- * Therefore, we have to keep its canonical repository name the same as its well known repository
- * name. Eg. "@com_google_protobuf//:protoc" is used for --proto_compiler flag.
+ *
The repository name of certain modules are required to be exact strings (instead of the
+ * normal format seen in {@link #getCanonicalRepoName()}) due to backwards compatibility reasons.
+ * For example, bazel_tools must be known as "@bazel_tools" for WORKSPACE repos to work correctly.
*
*
NOTE(wyv): We don't prepend an '@' to the repo names of well-known modules. This is because
* we still need the repo name to be 'bazel_tools' (not '@bazel_tools') since the command line
@@ -38,16 +37,15 @@ public abstract class ModuleKey {
* Bzlmod is not enabled. On the other hand, this means we cannot write '@@bazel_tools//:thing' to
* bypass repo mapping at all, which can be awkward.
*
- *
TODO(wyv): After we get rid of usage of com_google_protobuf in flag defaults, and make all
- * flag values go through repo mapping, we can remove the concept of well-known modules
- * altogether.
+ *
TODO(wyv): After we make all flag values go through repo mapping, we can remove the concept
+ * of well-known modules altogether.
*/
private static final ImmutableMap WELL_KNOWN_MODULES =
ImmutableMap.of(
- "com_google_protobuf", RepositoryName.createUnvalidated("com_google_protobuf"),
- "protobuf", RepositoryName.createUnvalidated("com_google_protobuf"),
- "bazel_tools", RepositoryName.BAZEL_TOOLS,
- "local_config_platform", RepositoryName.createUnvalidated("local_config_platform"));
+ "bazel_tools",
+ RepositoryName.BAZEL_TOOLS,
+ "local_config_platform",
+ RepositoryName.createUnvalidated("local_config_platform"));
public static final ModuleKey ROOT = create("", Version.EMPTY);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoAspect.java
index 1e9e4f79409828..19a63f05d344c8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoAspect.java
@@ -22,7 +22,7 @@
public class BazelJavaLiteProtoAspect extends JavaLiteProtoAspect {
public static final String DEFAULT_PROTO_TOOLCHAIN_LABEL =
- "@com_google_protobuf//:javalite_toolchain";
+ "@bazel_tools//tools/proto:javalite_toolchain";
public BazelJavaLiteProtoAspect(RuleDefinitionEnvironment env) {
super(BazelJavaSemantics.INSTANCE, DEFAULT_PROTO_TOOLCHAIN_LABEL, env);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoAspect.java
index e89ee0c87e69c6..d0003b5eb6f7b3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoAspect.java
@@ -36,7 +36,7 @@ public BazelJavaProtoAspect(RuleDefinitionEnvironment env) {
super(
BazelJavaSemantics.INSTANCE,
new NoopRpcSupport(),
- "@com_google_protobuf//:java_toolchain",
+ "@bazel_tools//tools/proto:java_toolchain",
env);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index ed6f9cf3367198..e4539c59621792 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -82,7 +82,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
private static final LabelLateBoundDefault> PROTO_TOOLCHAIN_LABEL =
LabelLateBoundDefault.fromTargetConfiguration(
ProtoConfiguration.class,
- Label.parseAbsoluteUnchecked("@com_google_protobuf//:cc_toolchain"),
+ Label.parseAbsoluteUnchecked("@bazel_tools//tools/proto:cc_toolchain"),
(rule, attributes, protoConfig) -> protoConfig.protoToolchainForCc());
private final CppSemantics cppSemantics;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
index 27592655132b05..c47ea9341c8018 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
@@ -94,7 +94,7 @@ public static class Options extends FragmentOptions {
@Option(
name = "proto_toolchain_for_javalite",
- defaultValue = "@com_google_protobuf//:javalite_toolchain",
+ defaultValue = "@bazel_tools//tools/proto:javalite_toolchain",
converter = CoreOptionConverters.LabelConverter.class,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
@@ -103,7 +103,7 @@ public static class Options extends FragmentOptions {
@Option(
name = "proto_toolchain_for_java",
- defaultValue = "@com_google_protobuf//:java_toolchain",
+ defaultValue = "@bazel_tools//tools/proto:java_toolchain",
converter = CoreOptionConverters.EmptyToNullLabelConverter.class,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
@@ -122,7 +122,7 @@ public static class Options extends FragmentOptions {
@Option(
name = "proto_toolchain_for_cc",
- defaultValue = "@com_google_protobuf//:cc_toolchain",
+ defaultValue = "@bazel_tools//tools/proto:cc_toolchain",
converter = CoreOptionConverters.EmptyToNullLabelConverter.class,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.LOADING_AND_ANALYSIS},
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConstants.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConstants.java
index 2863d7a5f8100b..5d5e0893ff2f3e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConstants.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConstants.java
@@ -17,13 +17,14 @@
/** Constants used in Proto rules. */
public final class ProtoConstants {
/** Default label for proto compiler. */
- static final String DEFAULT_PROTOC_LABEL = "@com_google_protobuf//:protoc";
+ static final String DEFAULT_PROTOC_LABEL = "@bazel_tools//tools/proto:protoc";
/** Default label for java proto toolchains. */
- static final String DEFAULT_JAVA_PROTO_LABEL = "@com_google_protobuf//:java_toolchain";
+ static final String DEFAULT_JAVA_PROTO_LABEL = "@bazel_tools//tools/proto:java_toolchain";
/** Default label for java lite proto toolchains. */
- static final String DEFAULT_JAVA_LITE_PROTO_LABEL = "@com_google_protobuf//:javalite_toolchain";
+ static final String DEFAULT_JAVA_LITE_PROTO_LABEL =
+ "@bazel_tools//tools/proto:javalite_toolchain";
/**
* This constant is used in ProtoCompileActionBuilder to generate an error message that's
diff --git a/src/main/starlark/builtins_bzl/common/proto/proto_semantics.bzl b/src/main/starlark/builtins_bzl/common/proto/proto_semantics.bzl
index ee0d6db6129800..8634dd6dcb7963 100644
--- a/src/main/starlark/builtins_bzl/common/proto/proto_semantics.bzl
+++ b/src/main/starlark/builtins_bzl/common/proto/proto_semantics.bzl
@@ -20,7 +20,7 @@ def _preprocess(ctx):
pass
semantics = struct(
- PROTO_COMPILER_LABEL = "@com_google_protobuf//:protoc",
+ PROTO_COMPILER_LABEL = "@bazel_tools//tools/proto:protoc",
EXTRA_ATTRIBUTES = {
"import_prefix": attr.string(),
},
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 099f178247be62..a14040dac4456a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -315,6 +315,14 @@ public void setupMockClient(MockToolsConfig config, List workspaceConten
"package_group(name='config_feature_flag', packages=['//...'])",
"package_group(name='config_feature_flag_Setter', packages=['//...'])");
+ config.create(
+ "embedded_tools/tools/proto/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "alias(name='protoc',actual='@com_google_protobuf//:protoc')",
+ "alias(name='javalite_toolchain',actual='@com_google_protobuf//:javalite_toolchain')",
+ "alias(name='java_toolchain',actual='@com_google_protobuf//:java_toolchain')",
+ "alias(name='cc_toolchain',actual='@com_google_protobuf//:cc_toolchain')");
+
config.create(
"embedded_tools/tools/zip/BUILD",
"package(default_visibility=['//visibility:public'])",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD b/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
index 5c600fff10ca5f..72392cc7c19295 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/BUILD
@@ -39,7 +39,6 @@ java_test(
deps = [
"//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_collection",
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/rules/proto",
"//src/test/java/com/google/devtools/build/lib/analysis/util",
"//src/test/java/com/google/devtools/build/lib/packages:testutil",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainTest.java
index 215367d9924da8..70af5b21b5938e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoLangToolchainTest.java
@@ -21,9 +21,6 @@
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
-import com.google.devtools.build.lib.packages.Provider;
-import com.google.devtools.build.lib.packages.StarlarkProvider;
import com.google.devtools.build.lib.packages.util.MockProtoSupport;
import com.google.devtools.build.lib.testutil.TestConstants;
import org.junit.Before;
@@ -42,12 +39,6 @@ public void setUp() throws Exception {
invalidatePackages();
}
- Provider.Key getStarlarkProtoLangToolchainInfoKey() throws LabelSyntaxException {
- return new StarlarkProvider.Key(
- Label.parseCanonical("@_builtins//:common/proto/proto_common.bzl"),
- "ProtoLangToolchainInfo");
- }
-
private void validateProtoLangToolchain(ProtoLangToolchainProvider toolchain) throws Exception {
assertThat(toolchain.outReplacementFormatFlag()).isEqualTo("cmd-line:%s");
assertThat(toolchain.pluginFormatFlag()).isEqualTo("--plugin=%s");
@@ -63,9 +54,11 @@ private void validateProtoLangToolchain(ProtoLangToolchainProvider toolchain) th
assertThat(toolchain.mnemonic()).isEqualTo("MyMnemonic");
}
- private void validateProtoCompiler(ProtoLangToolchainProvider toolchain, Label protoCompiler) {
+ private void validateProtoCompiler(ProtoLangToolchainProvider toolchain, String protocLabel)
+ throws Exception {
+ Label actualProtocLabel = getConfiguredTarget(protocLabel).getActual().getLabel();
assertThat(toolchain.protoc().getExecutable().prettyPrint())
- .isEqualTo(protoCompiler.toPathFragment().getPathString());
+ .isEqualTo(actualProtocLabel.toPathFragment().getPathString());
}
@Test
@@ -96,10 +89,9 @@ public void protoToolchain() throws Exception {
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
ProtoLangToolchainProvider toolchain =
ProtoLangToolchainProvider.get(getConfiguredTarget("//foo:toolchain"));
- Label protoc = Label.parseAbsoluteUnchecked(ProtoConstants.DEFAULT_PROTOC_LABEL);
validateProtoLangToolchain(toolchain);
- validateProtoCompiler(toolchain, protoc);
+ validateProtoCompiler(toolchain, ProtoConstants.DEFAULT_PROTOC_LABEL);
}
@Test
@@ -131,10 +123,9 @@ public void protoToolchain_setProtoCompiler() throws Exception {
ProtoLangToolchainProvider toolchain =
ProtoLangToolchainProvider.get(getConfiguredTarget("//foo:toolchain"));
- Label protoc = Label.parseAbsoluteUnchecked("//third_party/x:compiler");
validateProtoLangToolchain(toolchain);
- validateProtoCompiler(toolchain, protoc);
+ validateProtoCompiler(toolchain, "//third_party/x:compiler");
}
@Test
@@ -164,10 +155,9 @@ public void protoToolchainBlacklistProtoLibraries() throws Exception {
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
ProtoLangToolchainProvider toolchain =
ProtoLangToolchainProvider.get(getConfiguredTarget("//foo:toolchain"));
- Label protoc = Label.parseAbsoluteUnchecked(ProtoConstants.DEFAULT_PROTOC_LABEL);
validateProtoLangToolchain(toolchain);
- validateProtoCompiler(toolchain, protoc);
+ validateProtoCompiler(toolchain, ProtoConstants.DEFAULT_PROTOC_LABEL);
}
@Test
@@ -197,10 +187,9 @@ public void protoToolchainBlacklistTransitiveProtos() throws Exception {
update(ImmutableList.of("//foo:toolchain"), false, 1, true, new EventBus());
ProtoLangToolchainProvider toolchain =
ProtoLangToolchainProvider.get(getConfiguredTarget("//foo:toolchain"));
- Label protoc = Label.parseAbsoluteUnchecked(ProtoConstants.DEFAULT_PROTOC_LABEL);
validateProtoLangToolchain(toolchain);
- validateProtoCompiler(toolchain, protoc);
+ validateProtoCompiler(toolchain, ProtoConstants.DEFAULT_PROTOC_LABEL);
}
@Test
diff --git a/tools/BUILD b/tools/BUILD
index bfd5d470a38514..0f69e23505fc27 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -25,6 +25,7 @@ filegroup(
"//tools/objc:srcs",
"//tools/osx:srcs",
"//tools/osx/crosstool:srcs",
+ "//tools/proto:srcs",
"//tools/windows:srcs",
"//tools/test:srcs",
"//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:srcs",
@@ -60,6 +61,7 @@ filegroup(
"//tools/def_parser:srcs",
"//tools/windows:srcs",
"//tools/platforms:srcs",
+ "//tools/proto:srcs",
"//tools/objc:srcs",
"//tools/python:embedded_tools",
"//tools/runfiles:embedded_tools",
diff --git a/tools/proto/BUILD b/tools/proto/BUILD
new file mode 100644
index 00000000000000..73a8fe0c7226f9
--- /dev/null
+++ b/tools/proto/BUILD
@@ -0,0 +1,28 @@
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"] + ["**/*"]),
+)
+
+exports_files(["BUILD"])
+
+alias(
+ name = "protoc",
+ actual = "@com_google_protobuf//:protoc",
+)
+
+alias(
+ name = "javalite_toolchain",
+ actual = "@com_google_protobuf//:javalite_toolchain",
+)
+
+alias(
+ name = "java_toolchain",
+ actual = "@com_google_protobuf//:java_toolchain",
+)
+
+alias(
+ name = "cc_toolchain",
+ actual = "@com_google_protobuf//:cc_toolchain",
+)