diff --git a/docs/scala_proto_library.md b/docs/scala_proto_library.md
index b682ac75b..ba4753ab7 100644
--- a/docs/scala_proto_library.md
+++ b/docs/scala_proto_library.md
@@ -34,6 +34,7 @@ To configure ScalaPB options, configure a different `scala_proto_toolchain` and
```python
load("@io_bazel_rules_scala//scala_proto:scala_proto_toolchain.bzl", "scala_proto_toolchain")
+load("@io_bazel_rules_scala//scala:providers.bzl", "declare_deps_provider")
scala_proto_toolchain(
name = "scala_proto_toolchain_configuration",
@@ -41,6 +42,7 @@ scala_proto_toolchain(
with_flat_package = False,
with_single_line_to_string = False,
visibility = ["//visibility:public"],
+ dep_providers = [":my_grpc_deps", ":my_compile_deps"],
)
toolchain(
@@ -49,6 +51,20 @@ toolchain(
toolchain_type = "@io_bazel_rules_scala//scala_proto:toolchain_type",
visibility = ["//visibility:public"],
)
+
+declare_deps_provider(
+ name = "my_compile_deps",
+ deps_id = "scalapb_compile_deps",
+ deps = ["@dep1", "@dep2"],
+ visibility = ["//visibility:public"],
+)
+
+declare_deps_provider(
+ name = "my_grpc_deps",
+ deps_id = "scalapb_grpc_deps",
+ deps = ["@dep3", "@dep4"],
+ visibility = ["//visibility:public"],
+)
```
### Toolchain Attributes
@@ -63,6 +79,5 @@ toolchain(
| code_generator | `Label, optional (has default)`
Which code generator to use. A sensible default is provided.
| named_generators | `String dict, optional`
| extra_generator_dependencies | `List of labels, optional`
-| grpc_deps | `List of labels, optional (has default)`
gRPC dependencies. A sensible default is provided.
-| implicit_compile_deps | `List of labels, optional (has default)`
ScalaPB dependencies. A sensible default is provided.
| scalac | `Label, optional (has default)`
Target for scalac. A sensible default is provided.
+| dep_providers | `List of labels, optional (has default)`
allows inject gRPC (deps_id - `scalapb_grpc_deps`) and ScalaPB (deps_id `scalapb_compile_deps`) dependencies
diff --git a/scala_proto/BUILD b/scala_proto/BUILD
index a7c0bc0c9..376ca213e 100644
--- a/scala_proto/BUILD
+++ b/scala_proto/BUILD
@@ -1,12 +1,32 @@
load("@rules_java//java:defs.bzl", "java_library")
-load("//scala_proto:scala_proto_toolchain.bzl", "scala_proto_toolchain")
-load("//scala_proto:default_dep_sets.bzl", "DEFAULT_SCALAPB_COMPILE_DEPS", "DEFAULT_SCALAPB_GRPC_DEPS")
+load(
+ "//scala_proto:scala_proto_toolchain.bzl",
+ "export_scalapb_toolchain_deps",
+ "scala_proto_deps_toolchain",
+ "scala_proto_toolchain",
+)
+load(
+ "//scala_proto:default_dep_sets.bzl",
+ "DEFAULT_SCALAPB_COMPILE_DEPS",
+ "DEFAULT_SCALAPB_GRPC_DEPS",
+)
+load("//scala:providers.bzl", "declare_deps_provider")
toolchain_type(
name = "toolchain_type",
visibility = ["//visibility:public"],
)
+toolchain_type(
+ name = "deps_toolchain_type",
+ visibility = ["//visibility:public"],
+)
+
+scala_proto_deps_toolchain(
+ name = "default_deps_toolchain_impl",
+ visibility = ["//visibility:public"],
+)
+
scala_proto_toolchain(
name = "default_toolchain_impl",
visibility = ["//visibility:public"],
@@ -22,6 +42,12 @@ toolchain(
visibility = ["//visibility:public"],
)
+toolchain(
+ name = "default_deps_toolchain",
+ toolchain = ":default_deps_toolchain_impl",
+ toolchain_type = ":deps_toolchain_type",
+)
+
scala_proto_toolchain(
name = "enable_all_options_toolchain_impl",
visibility = ["//visibility:public"],
@@ -38,14 +64,33 @@ toolchain(
visibility = ["//visibility:public"],
)
-java_library(
- name = "default_scalapb_compile_dependencies",
+declare_deps_provider(
+ name = "scalapb_compile_deps_provider",
+ deps_id = "scalapb_compile_deps",
+ visibility = ["//visibility:public"],
+ deps = DEFAULT_SCALAPB_COMPILE_DEPS,
+)
+
+declare_deps_provider(
+ name = "scalapb_grpc_deps_provider",
+ deps_id = "scalapb_grpc_deps",
+ visibility = ["//visibility:public"],
+ deps = DEFAULT_SCALAPB_GRPC_DEPS,
+)
+
+declare_deps_provider(
+ name = "scalapb_worker_deps_provider",
+ deps_id = "scalapb_worker_deps",
visibility = ["//visibility:public"],
- exports = DEFAULT_SCALAPB_COMPILE_DEPS,
+ deps = [
+ "//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
+ "//external:io_bazel_rules_scala/dependency/proto/protoc_bridge",
+ "//external:io_bazel_rules_scala/dependency/proto/scalapb_plugin",
+ ],
)
-java_library(
- name = "default_scalapb_grpc_dependencies",
+export_scalapb_toolchain_deps(
+ name = "scalapb_worker_deps",
+ deps_id = "scalapb_worker_deps",
visibility = ["//visibility:public"],
- exports = DEFAULT_SCALAPB_GRPC_DEPS,
)
diff --git a/scala_proto/private/scala_proto_default_repositories.bzl b/scala_proto/private/scala_proto_default_repositories.bzl
index e71f4fa65..17404a3aa 100644
--- a/scala_proto/private/scala_proto_default_repositories.bzl
+++ b/scala_proto/private/scala_proto_default_repositories.bzl
@@ -198,3 +198,5 @@ def scala_proto_default_repositories(
name = "io_bazel_rules_scala/dependency/proto/opencensus_contrib_grpc_metrics",
actual = "@scala_proto_rules_opencensus_contrib_grpc_metrics//jar",
)
+
+ native.register_toolchains("@io_bazel_rules_scala//scala_proto:default_deps_toolchain")
diff --git a/scala_proto/private/scalapb_aspect.bzl b/scala_proto/private/scalapb_aspect.bzl
index 7c1da1792..eabea5da2 100644
--- a/scala_proto/private/scalapb_aspect.bzl
+++ b/scala_proto/private/scalapb_aspect.bzl
@@ -3,6 +3,7 @@ load("//scala/private:common.bzl", "write_manifest_file")
load("//scala/private:dependency.bzl", "legacy_unclear_dependency_info_for_protobuf_scrooge")
load("//scala/private:rule_impls.bzl", "compile_scala")
load("//scala_proto/private:proto_to_scala_src.bzl", "proto_to_scala_src")
+load("//scala/private/toolchain_deps:toolchain_deps.bzl", "find_deps_info_on", "java_info_for_deps")
ScalaPBAspectInfo = provider(fields = [
"proto_info",
@@ -139,13 +140,23 @@ def _scalapb_aspect_impl(target, ctx):
compile_protos = sorted(target_ti.direct_sources)
transitive_protos = sorted(target_ti.transitive_sources.to_list())
- toolchain = ctx.toolchains["@io_bazel_rules_scala//scala_proto:toolchain_type"]
+ deps_toolchain_type_label = "@io_bazel_rules_scala//scala_proto:deps_toolchain_type"
+ toolchain_type_label = "@io_bazel_rules_scala//scala_proto:toolchain_type"
+ toolchain = ctx.toolchains[toolchain_type_label]
flags = []
- imps = [j[JavaInfo] for j in ctx.attr._implicit_compile_deps]
+
+ compile_deps = find_deps_info_on(
+ ctx,
+ deps_toolchain_type_label,
+ "scalapb_compile_deps",
+ ).deps
+
+ imps = [dep[JavaInfo] for dep in compile_deps]
if toolchain.with_grpc:
+ grpc_deps = find_deps_info_on(ctx, deps_toolchain_type_label, "scalapb_grpc_deps").deps
flags.append("grpc")
- imps.extend([j[JavaInfo] for j in ctx.attr._grpc_deps])
+ imps.extend([dep[JavaInfo] for dep in grpc_deps])
if toolchain.with_flat_package:
flags.append("flat_package")
@@ -233,16 +244,16 @@ scalapb_aspect = aspect(
[ScalaPBImport],
],
attrs = {
- "_protoc": attr.label(executable = True, cfg = "host", default = "@com_google_protobuf//:protoc"),
- "_implicit_compile_deps": attr.label_list(cfg = "target", default = [
- "//external:io_bazel_rules_scala/dependency/proto/implicit_compile_deps",
- ]),
- "_grpc_deps": attr.label_list(cfg = "target", default = [
- "//external:io_bazel_rules_scala/dependency/proto/grpc_deps",
- ]),
+ "_protoc": attr.label(
+ executable = True,
+ cfg = "exec",
+ default = "@com_google_protobuf//:protoc",
+ ),
},
+ incompatible_use_toolchain_transition = True,
toolchains = [
"@io_bazel_rules_scala//scala:toolchain_type",
"@io_bazel_rules_scala//scala_proto:toolchain_type",
+ "@io_bazel_rules_scala//scala_proto:deps_toolchain_type",
],
)
diff --git a/scala_proto/scala_proto_toolchain.bzl b/scala_proto/scala_proto_toolchain.bzl
index d13aa2b47..4a12f9ca9 100644
--- a/scala_proto/scala_proto_toolchain.bzl
+++ b/scala_proto/scala_proto_toolchain.bzl
@@ -1,4 +1,6 @@
load("//scala_proto:default_dep_sets.bzl", "DEFAULT_SCALAPB_COMPILE_DEPS", "DEFAULT_SCALAPB_GRPC_DEPS")
+load("@io_bazel_rules_scala//scala:providers.bzl", "DepsInfo")
+load("//scala/private/toolchain_deps:toolchain_deps.bzl", "expose_toolchain_deps")
def _scala_proto_toolchain_impl(ctx):
toolchain = platform_common.ToolchainInfo(
@@ -28,7 +30,7 @@ scala_proto_toolchain = rule(
"blacklisted_protos": attr.label_list(default = []),
"code_generator": attr.label(
executable = True,
- cfg = "host",
+ cfg = "exec",
default = Label("@io_bazel_rules_scala//src/scala/scripts:scalapb_worker"),
allow_files = True,
),
@@ -43,3 +45,38 @@ scala_proto_toolchain = rule(
),
},
)
+
+def _scala_proto_deps_toolchain(ctx):
+ toolchain = platform_common.ToolchainInfo(
+ dep_providers = ctx.attr.dep_providers,
+ )
+ return [toolchain]
+
+scala_proto_deps_toolchain = rule(
+ _scala_proto_deps_toolchain,
+ attrs = {
+ "dep_providers": attr.label_list(
+ default = [
+ "@io_bazel_rules_scala//scala_proto:scalapb_compile_deps_provider",
+ "@io_bazel_rules_scala//scala_proto:scalapb_grpc_deps_provider",
+ "@io_bazel_rules_scala//scala_proto:scalapb_worker_deps_provider",
+ ],
+ cfg = "target",
+ providers = [DepsInfo],
+ ),
+ },
+)
+
+def _export_scalapb_toolchain_deps(ctx):
+ return expose_toolchain_deps(ctx, "@io_bazel_rules_scala//scala_proto:deps_toolchain_type")
+
+export_scalapb_toolchain_deps = rule(
+ _export_scalapb_toolchain_deps,
+ attrs = {
+ "deps_id": attr.string(
+ mandatory = True,
+ ),
+ },
+ incompatible_use_toolchain_transition = True,
+ toolchains = ["@io_bazel_rules_scala//scala_proto:deps_toolchain_type"],
+)
diff --git a/src/scala/scripts/BUILD b/src/scala/scripts/BUILD
index 6f2169809..1df47fba8 100644
--- a/src/scala/scripts/BUILD
+++ b/src/scala/scripts/BUILD
@@ -31,18 +31,10 @@ scala_library(
scala_library(
name = "scalapb_worker_lib",
srcs = ["ScalaPBWorker.scala"],
- unused_dependency_checker_ignored_targets = [
- "//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
- ],
visibility = ["//visibility:public"],
- runtime_deps = [
- "//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
- ],
deps = [
":scala_proto_request_extractor",
- "//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
- "//external:io_bazel_rules_scala/dependency/proto/protoc_bridge",
- "//external:io_bazel_rules_scala/dependency/proto/scalapb_plugin",
+ "//scala_proto:scalapb_worker_deps",
"//src/java/io/bazel/rulesscala/io_utils",
"//src/java/io/bazel/rulesscala/jar",
"//src/java/io/bazel/rulesscala/worker",
diff --git a/test/src/main/scala/scalarules/test/extra_protobuf_generator/BUILD b/test/src/main/scala/scalarules/test/extra_protobuf_generator/BUILD
index 01cbc4fb0..b14f392ee 100644
--- a/test/src/main/scala/scalarules/test/extra_protobuf_generator/BUILD
+++ b/test/src/main/scala/scalarules/test/extra_protobuf_generator/BUILD
@@ -5,8 +5,6 @@ scala_library(
srcs = ["ExtraProtobufGenerator.scala"],
visibility = ["//visibility:public"],
deps = [
- "//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
- "//external:io_bazel_rules_scala/dependency/proto/protoc_bridge",
- "//external:io_bazel_rules_scala/dependency/proto/scalapb_plugin",
+ "//scala_proto:scalapb_worker_deps",
],
)