diff --git a/.bazelrc b/.bazelrc index 453acedb593..88d4fc627ac 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,3 +1,3 @@ build --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 -common:skip_android --deleted_packages=android,binder \ No newline at end of file +common:skip_android --deleted_packages=android,binder diff --git a/compiler/BUILD.bazel b/compiler/BUILD.bazel index a9ffe77a55a..b3a10ca4222 100644 --- a/compiler/BUILD.bazel +++ b/compiler/BUILD.bazel @@ -1,7 +1,7 @@ +load("@com_google_protobuf//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain") load("@rules_cc//cc:defs.bzl", "cc_binary") load("@rules_java//java:defs.bzl", "java_library") load("@rules_jvm_external//:defs.bzl", "artifact") -load("//:java_grpc_library.bzl", "java_rpc_toolchain") # This should not generally be referenced. Users should use java_grpc_library cc_binary( @@ -42,17 +42,20 @@ java_library( ], ) -java_rpc_toolchain( +proto_lang_toolchain( name = "java_grpc_library_toolchain", + command_line = "--rpc-plugin_out=%s", plugin = "//compiler:grpc_java_plugin", - runtime = [":java_grpc_library_deps__do_not_reference"], + plugin_format_flag = "--plugin=protoc-gen-rpc-plugin=%s", + runtime = ":java_grpc_library_deps__do_not_reference", visibility = ["//visibility:public"], ) -java_rpc_toolchain( +proto_lang_toolchain( name = "java_lite_grpc_library_toolchain", + command_line = "--rpc-plugin_out=lite:%s", plugin = "//compiler:grpc_java_plugin", - plugin_arg = "lite", - runtime = [":java_lite_grpc_library_deps__do_not_reference"], + plugin_format_flag = "--plugin=protoc-gen-rpc-plugin=%s", + runtime = ":java_lite_grpc_library_deps__do_not_reference", visibility = ["//visibility:public"], ) diff --git a/java_grpc_library.bzl b/java_grpc_library.bzl index e6afc028883..b6d5bf9ed63 100644 --- a/java_grpc_library.bzl +++ b/java_grpc_library.bzl @@ -1,6 +1,8 @@ """Build rule for java_grpc_library.""" +load("@com_google_protobuf//bazel/common:proto_common.bzl", "proto_common") load("@com_google_protobuf//bazel/common:proto_info.bzl", "ProtoInfo") +load("@com_google_protobuf//bazel/common:proto_lang_toolchain_info.bzl", "ProtoLangToolchainInfo") load("@rules_java//java:defs.bzl", "JavaInfo", "JavaPluginInfo", "java_common") _JavaRpcToolchainInfo = provider( @@ -85,39 +87,56 @@ def _java_rpc_library_impl(ctx): print(("in srcs attribute of {0}: Proto source with label {1} should be in " + "same package as consuming rule").format(ctx.label, ctx.attr.srcs[0].label)) - toolchain = ctx.attr._toolchain[_JavaRpcToolchainInfo] - srcs = ctx.attr.srcs[0][ProtoInfo].direct_sources - descriptor_set_in = ctx.attr.srcs[0][ProtoInfo].transitive_descriptor_sets - srcjar = ctx.actions.declare_file("%s-proto-gensrc.jar" % ctx.label.name) - args = ctx.actions.args() - args.add(toolchain.plugin[DefaultInfo].files_to_run.executable, format = "--plugin=protoc-gen-rpc-plugin=%s") - args.add("--rpc-plugin_out={0}:{1}".format(toolchain.plugin_arg, srcjar.path)) - args.add_joined("--descriptor_set_in", descriptor_set_in, join_with = ctx.configuration.host_path_separator) - args.add_all(srcs, map_each = _path_ignoring_repository) - - ctx.actions.run( - inputs = depset(srcs, transitive = [descriptor_set_in, toolchain.plugin[DefaultInfo].files]), - outputs = [srcjar], - executable = toolchain.protoc[DefaultInfo].files_to_run, - arguments = [args], - use_default_shell_env = True, - toolchain = None, - ) + if ProtoLangToolchainInfo in ctx.attr._toolchain: + toolchain = ctx.attr._toolchain[ProtoLangToolchainInfo] + proto_common.compile( + actions = ctx.actions, + proto_info = ctx.attr.srcs[0][ProtoInfo], + proto_lang_toolchain_info = toolchain, + generated_files = [srcjar], + plugin_output = srcjar.path, + ) + java_toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"].java + java_plugins = [] + runtime_deps = [toolchain.runtime[JavaInfo]] if toolchain.runtime else [] + else: + # Legacy support for java_rpc_toolchain + toolchain = ctx.attr._toolchain[_JavaRpcToolchainInfo] + srcs = ctx.attr.srcs[0][ProtoInfo].direct_sources + descriptor_set_in = ctx.attr.srcs[0][ProtoInfo].transitive_descriptor_sets + + args = ctx.actions.args() + args.add(toolchain.plugin[DefaultInfo].files_to_run.executable, format = "--plugin=protoc-gen-rpc-plugin=%s") + args.add("--rpc-plugin_out={0}:{1}".format(toolchain.plugin_arg, srcjar.path)) + args.add_joined("--descriptor_set_in", descriptor_set_in, join_with = ctx.configuration.host_path_separator) + args.add_all(srcs, map_each = _path_ignoring_repository) + + ctx.actions.run( + inputs = depset(srcs, transitive = [descriptor_set_in, toolchain.plugin[DefaultInfo].files]), + outputs = [srcjar], + executable = toolchain.protoc[DefaultInfo].files_to_run, + arguments = [args], + use_default_shell_env = True, + toolchain = None, + ) + java_toolchain = toolchain.java_toolchain[java_common.JavaToolchainInfo] + java_plugins = [plugin[JavaPluginInfo] for plugin in toolchain.java_plugins] + runtime_deps = [dep[JavaInfo] for dep in toolchain.runtime] deps_java_info = java_common.merge([dep[JavaInfo] for dep in ctx.attr.deps]) java_info = java_common.compile( ctx, - java_toolchain = toolchain.java_toolchain[java_common.JavaToolchainInfo], + java_toolchain = java_toolchain, source_jars = [srcjar], output = ctx.outputs.jar, output_source_jar = ctx.outputs.srcjar, - plugins = [plugin[JavaPluginInfo] for plugin in toolchain.java_plugins], + plugins = java_plugins, deps = [ java_common.make_non_strict(deps_java_info), - ] + [dep[JavaInfo] for dep in toolchain.runtime], + ] + runtime_deps, ) return [java_info] diff --git a/xds/BUILD.bazel b/xds/BUILD.bazel index 47831c5139c..330bee3eeaa 100644 --- a/xds/BUILD.bazel +++ b/xds/BUILD.bazel @@ -1,9 +1,10 @@ load("@bazel_jar_jar//:jar_jar.bzl", "jar_jar") load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") +load("@com_google_protobuf//bazel/toolchains:proto_lang_toolchain.bzl", "proto_lang_toolchain") load("@rules_java//java:defs.bzl", "java_binary", "java_library", "java_test") load("@rules_jvm_external//:defs.bzl", "artifact") -load("//:java_grpc_library.bzl", "INTERNAL_java_grpc_library_for_xds", "java_grpc_library", "java_rpc_toolchain") +load("//:java_grpc_library.bzl", "INTERNAL_java_grpc_library_for_xds", "java_grpc_library") # Mirrors the dependencies included in the artifact on Maven Central for usage # with maven_install's override_targets. Should only be used as a dep for @@ -319,10 +320,12 @@ java_grpc_library( deps = [":xds_orca_java_proto"], ) -java_rpc_toolchain( +proto_lang_toolchain( name = "java_grpc_library_toolchain", + command_line = "--rpc-plugin_out=%s", plugin = "//compiler:grpc_java_plugin", - runtime = [":java_grpc_library_deps"], + plugin_format_flag = "--plugin=protoc-gen-rpc-plugin=%s", + runtime = ":java_grpc_library_deps", ) java_library(