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", +)