Skip to content

Commit 670b7ee

Browse files
Build and register toolchains for all SCALA_VERSIONS (#1578)
Co-authored-by: mkuta <mkuta@virtuslab.com>
1 parent 69aec43 commit 670b7ee

File tree

8 files changed

+123
-49
lines changed

8 files changed

+123
-49
lines changed

scala/BUILD

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
load("@rules_java//java:defs.bzl", "java_import", "java_library")
22
load("//scala:providers.bzl", "declare_deps_provider")
3+
load("//scala:scala_cross_version.bzl", "version_suffix")
34
load("//scala/private:macros/setup_scala_toolchain.bzl", "default_deps", "setup_scala_toolchain")
4-
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
5+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION", "SCALA_VERSIONS")
56

67
toolchain_type(
78
name = "toolchain_type",
89
visibility = ["//visibility:public"],
910
)
1011

11-
setup_scala_toolchain(
12+
[
13+
setup_scala_toolchain(
14+
name = "toolchain" + version_suffix(scala_version),
15+
scala_version = scala_version,
16+
use_argument_file_in_runner = True,
17+
)
18+
for scala_version in SCALA_VERSIONS
19+
]
20+
21+
# Alias for backward compatibility
22+
alias(
1223
name = "default_toolchain",
13-
use_argument_file_in_runner = True,
24+
actual = "toolchain" + version_suffix(SCALA_VERSION),
1425
)
1526

1627
setup_scala_toolchain(

scala/scalafmt/BUILD

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
load("//scala:scala.bzl", "scala_binary")
22
load("//scala:scala_cross_version.bzl", "version_suffix")
3-
load("//scala/scalafmt/toolchain:toolchain.bzl", "export_scalafmt_deps", "scalafmt_toolchain")
4-
load("@io_bazel_rules_scala//scala:providers.bzl", "declare_deps_provider")
3+
load("//scala/scalafmt/toolchain:toolchain.bzl", "export_scalafmt_deps")
4+
load("//scala/scalafmt/toolchain:setup_scalafmt_toolchain.bzl", "setup_scalafmt_toolchains")
55
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
66
load(
77
"//scala/scalafmt:phase_scalafmt_ext.bzl",
@@ -36,34 +36,12 @@ scalafmt_singleton(
3636
visibility = ["//visibility:public"],
3737
)
3838

39-
declare_deps_provider(
40-
name = "scalafmt_classpath_provider",
41-
deps_id = "scalafmt_classpath",
42-
visibility = ["//visibility:public"],
43-
deps = [dep + version_suffix(SCALA_VERSION) for dep in [
44-
"@com_geirsson_metaconfig_core",
45-
"@org_scalameta_common",
46-
"@org_scalameta_parsers",
47-
"@org_scalameta_scalafmt_core",
48-
"@org_scalameta_scalameta",
49-
"@org_scalameta_trees",
50-
]],
51-
)
52-
53-
scalafmt_toolchain(
54-
name = "scalafmt_toolchain_impl",
55-
dep_providers = [
56-
":scalafmt_classpath_provider",
57-
],
58-
visibility = ["//visibility:public"],
59-
)
39+
setup_scalafmt_toolchains()
6040

61-
toolchain(
41+
# Alias for backward compatibility:
42+
alias(
6243
name = "scalafmt_toolchain",
63-
target_settings = ["@io_bazel_rules_scala_config//:scala_version" + version_suffix(SCALA_VERSION)],
64-
toolchain = ":scalafmt_toolchain_impl",
65-
toolchain_type = "//scala/scalafmt/toolchain:scalafmt_toolchain_type",
66-
visibility = ["//visibility:public"],
44+
actual = "scalafmt_toolchain" + version_suffix(SCALA_VERSION),
6745
)
6846

6947
export_scalafmt_deps(

scala/scalafmt/scalafmt_repositories.bzl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
load(
22
"//scala:scala_cross_version.bzl",
33
"extract_major_version",
4+
"version_suffix",
45
_default_maven_server_urls = "default_maven_server_urls",
56
)
67
load("//third_party/repositories:repositories.bzl", "repositories")
@@ -55,4 +56,10 @@ def scalafmt_repositories(
5556
maven_servers = maven_servers,
5657
overriden_artifacts = overriden_artifacts,
5758
)
58-
native.register_toolchains("@io_bazel_rules_scala//scala/scalafmt:scalafmt_toolchain")
59+
_register_scalafmt_toolchains()
60+
61+
def _register_scalafmt_toolchains():
62+
for scala_version in SCALA_VERSIONS:
63+
native.register_toolchains(
64+
"@io_bazel_rules_scala//scala/scalafmt:scalafmt_toolchain" + version_suffix(scala_version),
65+
)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
load("//scala/scalafmt/toolchain:toolchain.bzl", "scalafmt_toolchain")
2+
load("//scala:providers.bzl", "declare_deps_provider")
3+
load("//scala:scala_cross_version.bzl", "version_suffix")
4+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
5+
6+
_SCALAFMT_DEPS = [
7+
"@com_geirsson_metaconfig_core",
8+
"@org_scalameta_common",
9+
"@org_scalameta_parsers",
10+
"@org_scalameta_scalafmt_core",
11+
"@org_scalameta_scalameta",
12+
"@org_scalameta_trees",
13+
]
14+
15+
def setup_scalafmt_toolchain(
16+
name,
17+
scalafmt_classpath,
18+
scala_version,
19+
visibility = ["//visibility:public"]):
20+
scalafmt_classpath_provider = "%s_scalafmt_classpath_provider" % name
21+
declare_deps_provider(
22+
name = scalafmt_classpath_provider,
23+
deps_id = "scalafmt_classpath",
24+
visibility = visibility,
25+
deps = scalafmt_classpath,
26+
)
27+
scalafmt_toolchain(
28+
name = "%s_impl" % name,
29+
dep_providers = [scalafmt_classpath_provider],
30+
visibility = visibility,
31+
)
32+
native.toolchain(
33+
name = name,
34+
target_settings = ["@io_bazel_rules_scala_config//:scala_version" + version_suffix(scala_version)],
35+
toolchain = ":%s_impl" % name,
36+
toolchain_type = "//scala/scalafmt/toolchain:scalafmt_toolchain_type",
37+
visibility = visibility,
38+
)
39+
40+
def setup_scalafmt_toolchains():
41+
for scala_version in SCALA_VERSIONS:
42+
setup_scalafmt_toolchain(
43+
name = "scalafmt_toolchain" + version_suffix(scala_version),
44+
scala_version = scala_version,
45+
scalafmt_classpath = _deps(scala_version),
46+
)
47+
48+
def _deps(scala_version):
49+
return [dep + version_suffix(scala_version) for dep in _SCALAFMT_DEPS]

scala/toolchains.bzl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
2+
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix")
3+
14
def scala_register_toolchains():
2-
native.register_toolchains(
3-
"@io_bazel_rules_scala//scala:default_toolchain",
4-
)
5+
for scala_version in SCALA_VERSIONS:
6+
native.register_toolchains(
7+
"@io_bazel_rules_scala//scala:toolchain" + version_suffix(scala_version),
8+
)
59

610
def scala_register_unused_deps_toolchains():
711
native.register_toolchains(

testing/BUILD

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
load("@io_bazel_rules_scala//scala:scala.bzl", "setup_scala_testing_toolchain")
22
load("//scala:scala_cross_version.bzl", "version_suffix")
3-
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
3+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION", "SCALA_VERSIONS")
44

55
_SPECS2_DEPS = [
66
"@io_bazel_rules_scala_org_specs2_specs2_common",
@@ -33,19 +33,38 @@ _SCALATEST_DEPS = [
3333
"@io_bazel_rules_scala_scalatest_shouldmatchers",
3434
]
3535

36-
setup_scala_testing_toolchain(
36+
[
37+
setup_scala_testing_toolchain(
38+
name = "testing_toolchain" + version_suffix(scala_version),
39+
junit_classpath = _JUNIT_DEPS,
40+
scala_version = scala_version,
41+
scalatest_classpath = [dep + version_suffix(scala_version) for dep in _SCALATEST_DEPS],
42+
specs2_classpath = _SPECS2_DEPS,
43+
specs2_junit_classpath = _SPECS2_JUNIT_DEPS,
44+
visibility = ["//visibility:public"],
45+
)
46+
for scala_version in SCALA_VERSIONS
47+
]
48+
49+
[
50+
setup_scala_testing_toolchain(
51+
name = "scalatest_toolchain" + version_suffix(scala_version),
52+
scala_version = scala_version,
53+
scalatest_classpath = [dep + version_suffix(scala_version) for dep in _SCALATEST_DEPS],
54+
visibility = ["//visibility:public"],
55+
)
56+
for scala_version in SCALA_VERSIONS
57+
]
58+
59+
# Aliases for backward compatibility:
60+
alias(
3761
name = "testing_toolchain",
38-
junit_classpath = _JUNIT_DEPS,
39-
scalatest_classpath = [dep + version_suffix(SCALA_VERSION) for dep in _SCALATEST_DEPS],
40-
specs2_classpath = _SPECS2_DEPS,
41-
specs2_junit_classpath = _SPECS2_JUNIT_DEPS,
42-
visibility = ["//visibility:public"],
62+
actual = "testing_toolchain" + version_suffix(SCALA_VERSION),
4363
)
4464

45-
setup_scala_testing_toolchain(
65+
alias(
4666
name = "scalatest_toolchain",
47-
scalatest_classpath = [dep + version_suffix(SCALA_VERSION) for dep in _SCALATEST_DEPS],
48-
visibility = ["//visibility:public"],
67+
actual = "scalatest_toolchain" + version_suffix(SCALA_VERSION),
4968
)
5069

5170
setup_scala_testing_toolchain(

testing/scalatest.bzl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
load("//scalatest:scalatest.bzl", _repositories = "scalatest_repositories")
2+
load("//scala:scala_cross_version.bzl", "version_suffix")
3+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
24

35
def scalatest_repositories():
46
_repositories()
57

68
def scalatest_toolchain():
7-
native.register_toolchains("@io_bazel_rules_scala//testing:scalatest_toolchain")
9+
for scala_version in SCALA_VERSIONS:
10+
native.register_toolchains("@io_bazel_rules_scala//testing:scalatest_toolchain" + version_suffix(scala_version))

third_party/dependency_analyzer/src/main/io/bazel/rulesscala/dependencyanalyzer/compiler/BUILD

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
load("//scala:scala.bzl", "scala_library_for_plugin_bootstrapping")
2-
load("//scala:scala_cross_version.bzl", "version_suffix")
3-
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
2+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
3+
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix")
44

55
scala_library_for_plugin_bootstrapping(
66
name = "dep_reporting_compiler",
7-
srcs = ["@scala_compiler_source%s//:src" % version_suffix(SCALA_VERSION)],
7+
srcs = select({
8+
"@io_bazel_rules_scala_config//:scala_version" + version_suffix(v): ["@scala_compiler_source%s//:src" % version_suffix(v)]
9+
for v in SCALA_VERSIONS
10+
}),
811
scalac_jvm_flags = ["-Xmx128M"], # fixme - workaround for a failing test
912
visibility = ["//visibility:public"],
1013
deps = ["//scala/private/toolchain_deps:scala_compile_classpath"],

0 commit comments

Comments
 (0)