Skip to content

Commit e1a61b2

Browse files
committed
Move native.toolchain() into scala_toolchain()
WIP Per the discussion in: - bazel-contrib#1703 (comment).
1 parent 58dfbc7 commit e1a61b2

File tree

21 files changed

+73
-309
lines changed

21 files changed

+73
-309
lines changed

examples/semanticdb/BUILD

+1-8
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@ load("@rules_scala//scala:scala_toolchain.bzl", "scala_toolchain")
22
load("@rules_scala//scala:scala.bzl", "scala_binary", "scala_library")
33

44
scala_toolchain(
5-
name = "semanticdb_toolchain_impl",
5+
name = "semanticdb_toolchain",
66
enable_semanticdb = True,
77
semanticdb_bundle_in_jar = False,
88
visibility = ["//visibility:public"],
99
)
1010

11-
toolchain(
12-
name = "semanticdb_toolchain",
13-
toolchain = "semanticdb_toolchain_impl",
14-
toolchain_type = "@rules_scala//scala:toolchain_type",
15-
visibility = ["//visibility:public"],
16-
)
17-
1811
scala_library(
1912
name = "hello_lib",
2013
srcs = ["Foo.scala"],

manual_test/coverage_local_jacocorunner/BUILD

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
load("//scala:scala_toolchain.bzl", "scala_toolchain")
22

33
scala_toolchain(
4-
name = "local_jacocorunner_toolchain_impl",
4+
name = "local_jacocorunner_toolchain",
55
jacocorunner = ":local_jacocorunner",
66
visibility = ["//visibility:public"],
77
)
88

9-
toolchain(
10-
name = "local_jacocorunner_scala_toolchain",
11-
toolchain = "local_jacocorunner_toolchain_impl",
12-
toolchain_type = "//scala:toolchain_type",
13-
visibility = ["//visibility:public"],
14-
)
15-
169
filegroup(
1710
name = "local_jacocorunner",
1811
srcs = ["JacocoCoverage_jarjar_deploy.jar"],

manual_test/scala_test_jacocorunner/BUILD

+1-8
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,8 @@ load("//scala:scala_toolchain.bzl", "scala_toolchain")
22
load("//scala:scala.bzl", "scala_test")
33

44
scala_toolchain(
5-
name = "passing_toolchain_impl",
6-
jacocorunner = "@bazel_tools//tools/jdk:JacocoCoverage",
7-
visibility = ["//visibility:public"],
8-
)
9-
10-
toolchain(
115
name = "passing_scala_toolchain",
12-
toolchain = "passing_toolchain_impl",
13-
toolchain_type = "//scala:toolchain_type",
6+
jacocorunner = "@bazel_tools//tools/jdk:JacocoCoverage",
147
visibility = ["//visibility:public"],
158
)
169

manual_test/scala_test_jvm_flags/BUILD

+2-16
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,19 @@ load("//scala:scala_toolchain.bzl", "scala_toolchain")
22
load("//scala:scala.bzl", "scala_test")
33

44
scala_toolchain(
5-
name = "failing_toolchain_impl",
5+
name = "failing_scala_toolchain",
66
# This will fail because 1M isn't enough
77
scala_test_jvm_flags = ["-Xmx1M"],
88
visibility = ["//visibility:public"],
99
)
1010

11-
toolchain(
12-
name = "failing_scala_toolchain",
13-
toolchain = "failing_toolchain_impl",
14-
toolchain_type = "//scala:toolchain_type",
15-
visibility = ["//visibility:public"],
16-
)
17-
1811
scala_toolchain(
19-
name = "passing_toolchain_impl",
12+
name = "passing_scala_toolchain",
2013
# This will pass because 1G is enough
2114
scala_test_jvm_flags = ["-Xmx1G"],
2215
visibility = ["//visibility:public"],
2316
)
2417

25-
toolchain(
26-
name = "passing_scala_toolchain",
27-
toolchain = "passing_toolchain_impl",
28-
toolchain_type = "//scala:toolchain_type",
29-
visibility = ["//visibility:public"],
30-
)
31-
3218
scala_test(
3319
name = "empty_test",
3420
srcs = ["EmptyTest.scala"],

manual_test/scalac_jvm_opts/BUILD

+2-16
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,19 @@ load("//scala:scala.bzl", "scala_library")
44
load("//scala_proto:scala_proto.bzl", "scala_proto_library")
55

66
scala_toolchain(
7-
name = "failing_toolchain_impl",
7+
name = "failing_scala_toolchain",
88
# This will fail because 1M isn't enough
99
scalac_jvm_flags = ["-Xmx1M"],
1010
visibility = ["//visibility:public"],
1111
)
1212

13-
toolchain(
14-
name = "failing_scala_toolchain",
15-
toolchain = "failing_toolchain_impl",
16-
toolchain_type = "//scala:toolchain_type",
17-
visibility = ["//visibility:public"],
18-
)
19-
2013
scala_toolchain(
21-
name = "passing_toolchain_impl",
14+
name = "passing_scala_toolchain",
2215
# This will pass because 1G is enough
2316
scalac_jvm_flags = ["-Xmx1G"],
2417
visibility = ["//visibility:public"],
2518
)
2619

27-
toolchain(
28-
name = "passing_scala_toolchain",
29-
toolchain = "passing_toolchain_impl",
30-
toolchain_type = "//scala:toolchain_type",
31-
visibility = ["//visibility:public"],
32-
)
33-
3420
scala_library(
3521
name = "empty_build",
3622
srcs = ["Empty.scala"],

scala/BUILD

+2-15
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,19 @@ alias(
1818
)
1919

2020
scala_toolchain(
21-
name = "unused_dependency_checker_error_toolchain_impl",
21+
name = "unused_dependency_checker_error_toolchain",
2222
dependency_tracking_method = "ast-plus",
2323
unused_dependency_checker_mode = "error",
2424
)
2525

2626
scala_toolchain(
27-
name = "minimal_direct_source_deps_impl",
27+
name = "minimal_direct_source_deps",
2828
dependency_mode = "plus-one",
2929
dependency_tracking_method = "ast",
3030
strict_deps_mode = "error",
3131
unused_dependency_checker_mode = "error",
3232
)
3333

34-
[
35-
toolchain(
36-
name = tc,
37-
toolchain = tc + "_impl",
38-
toolchain_type = "//scala:toolchain_type",
39-
visibility = ["//visibility:public"],
40-
)
41-
for tc in [
42-
"unused_dependency_checker_error_toolchain",
43-
"minimal_direct_source_deps",
44-
]
45-
]
46-
4734
java_import(
4835
name = "bazel_test_runner_deploy",
4936
jars = ["@bazel_tools//tools/jdk:TestRunner_deploy.jar"],

scala/private/macros/setup_scala_toolchain.bzl

+11-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
load("//scala:scala_toolchain.bzl", "scala_toolchain")
22
load("//scala:providers.bzl", "declare_deps_provider")
3-
load("//scala:scala_cross_version.bzl", "repositories", "version_suffix")
3+
load("//scala:scala_cross_version.bzl", "repositories")
44
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
55

66
def setup_scala_toolchain(
@@ -15,6 +15,15 @@ def setup_scala_toolchain(
1515
enable_semanticdb = False,
1616
visibility = ["//visibility:public"],
1717
**kwargs):
18+
"""Creates custom Scala toolchain implementation and `toolchain` targets.
19+
20+
Use this instead of `scala_toolchain` when specifying toolchain dependency
21+
artifacts instead of relying on the builtin artifacts. Any unspecified
22+
custom dependency providers will default to the builtin providers.
23+
24+
See `docs/scala_toolchain.md` for example usage and documentation on the
25+
available attributes.
26+
"""
1827
scala_xml_provider = "%s_scala_xml_provider" % name
1928
parser_combinators_provider = "%s_parser_combinators_provider" % name
2029
scala_compile_classpath_provider = "%s_scala_compile_classpath_provider" % name
@@ -87,21 +96,13 @@ def setup_scala_toolchain(
8796
dep_providers.append(semanticdb_deps_provider)
8897

8998
scala_toolchain(
90-
name = "%s_impl" % name,
99+
name = name,
91100
dep_providers = dep_providers,
92101
enable_semanticdb = enable_semanticdb,
93102
visibility = visibility,
94103
**kwargs
95104
)
96105

97-
native.toolchain(
98-
name = name,
99-
toolchain = ":%s_impl" % name,
100-
toolchain_type = Label("//scala:toolchain_type"),
101-
target_settings = ["@io_bazel_rules_scala_config//:scala_version" + version_suffix(scala_version)],
102-
visibility = visibility,
103-
)
104-
105106
_DEFAULT_DEPS = {
106107
"scala_compile_classpath": {
107108
"any": [

scala/scala_toolchain.bzl

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
load("//scala:providers.bzl", _DepsInfo = "DepsInfo")
2+
load("//scala:scala_cross_version.bzl", "version_suffix")
3+
load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
24
load(
35
"@io_bazel_rules_scala_config//:config.bzl",
46
"ENABLE_COMPILER_DEPENDENCY_TRACKING",
5-
"SCALA_MAJOR_VERSION",
7+
"SCALA_VERSION",
68
)
7-
load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
89

910
def _compute_strict_deps_mode(input_strict_deps_mode, dependency_mode):
1011
if dependency_mode == "direct":
@@ -111,7 +112,7 @@ def _default_dep_providers():
111112
"scala_library_classpath",
112113
"scala_macro_classpath",
113114
]
114-
if SCALA_MAJOR_VERSION.startswith("2."):
115+
if SCALA_VERSION.startswith("2."):
115116
dep_providers.append("semanticdb")
116117
return [
117118
"@rules_scala_toolchains//scala:%s_provider" % p
@@ -198,12 +199,32 @@ def _expand_patterns(patterns):
198199

199200
return result
200201

201-
def scala_toolchain(**kwargs):
202-
"""Creates a Scala toolchain target."""
202+
def scala_toolchain(name, visibility = ["//visibility:public"], **kwargs):
203+
"""Creates Scala toolchain implementation and `toolchain` targets.
204+
205+
Use this instead of `setup_scala_toolchain()` when setting custom compiler
206+
attributes, but still using the builtin toolchain dependency artifacts.
207+
208+
See `docs/scala_toolchain.md` for example usage and documentation on the
209+
available attributes.
210+
"""
211+
impl_name = "%s_impl" % name
203212
strict = kwargs.pop("dependency_tracking_strict_deps_patterns", [""])
204213
unused = kwargs.pop("dependency_tracking_unused_deps_patterns", [""])
205214
_scala_toolchain(
215+
name = impl_name,
206216
dependency_tracking_strict_deps_patterns = _expand_patterns(strict),
207217
dependency_tracking_unused_deps_patterns = _expand_patterns(unused),
208218
**kwargs
209219
)
220+
221+
native.toolchain(
222+
name = name,
223+
toolchain = ":" + impl_name,
224+
toolchain_type = Label("//scala:toolchain_type"),
225+
target_settings = [
226+
"@io_bazel_rules_scala_config//:scala_version" +
227+
version_suffix(SCALA_VERSION),
228+
],
229+
visibility = visibility,
230+
)

test/semanticdb/BUILD

+2-16
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,19 @@ load("//scala:scala.bzl", "scala_library")
33
load("//test/semanticdb:rules.bzl", "semanticdb_vars_script")
44

55
scala_toolchain(
6-
name = "semanticdb_bundle_toolchain_impl",
6+
name = "semanticdb_bundle_toolchain",
77
enable_semanticdb = True,
88
semanticdb_bundle_in_jar = True,
99
visibility = ["//visibility:public"],
1010
)
1111

12-
toolchain(
13-
name = "semanticdb_bundle_toolchain",
14-
toolchain = "semanticdb_bundle_toolchain_impl",
15-
toolchain_type = "//scala:toolchain_type",
16-
visibility = ["//visibility:public"],
17-
)
18-
1912
scala_toolchain(
20-
name = "semanticdb_nobundle_toolchain_impl",
13+
name = "semanticdb_nobundle_toolchain",
2114
enable_semanticdb = True,
2215
semanticdb_bundle_in_jar = False,
2316
visibility = ["//visibility:public"],
2417
)
2518

26-
toolchain(
27-
name = "semanticdb_nobundle_toolchain",
28-
toolchain = "semanticdb_nobundle_toolchain_impl",
29-
toolchain_type = "//scala:toolchain_type",
30-
visibility = ["//visibility:public"],
31-
)
32-
3319
scala_library(
3420
name = "all_lib",
3521
srcs = glob(["*.scala"]),

0 commit comments

Comments
 (0)