Skip to content

Commit 93a44d6

Browse files
committed
Toolchainize //jmh/toolchain:jmh_toolchain_type
Adds the jmh toolchain to `scala_toolchains()` and moves `jmh_repositories()` to `jmh/toolchain/toolchain.bzl` for `rules_java` 8 compatibility. Part of bazelbuild#1482 and bazelbuild#1652.
1 parent a499cac commit 93a44d6

File tree

6 files changed

+127
-116
lines changed

6 files changed

+127
-116
lines changed

WORKSPACE

+1-4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ load("//scala:toolchains.bzl", "scala_toolchains")
4343

4444
scala_toolchains(
4545
fetch_sources = True,
46+
jmh = True,
4647
scala_proto = True,
4748
scalafmt = True,
4849
testing = True,
@@ -75,10 +76,6 @@ load("//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge")
7576

7677
twitter_scrooge()
7778

78-
load("//jmh:jmh.bzl", "jmh_repositories")
79-
80-
jmh_repositories()
81-
8279
MAVEN_SERVER_URLS = default_maven_server_urls()
8380

8481
# needed for the cross repo proto test

jmh/BUILD

+10-77
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,10 @@
1-
load("//scala:providers.bzl", "declare_deps_provider")
2-
load("//jmh/toolchain:toolchain.bzl", "export_toolchain_deps", "jmh_toolchain")
3-
4-
jmh_toolchain(
5-
name = "jmh_toolchain_impl",
6-
visibility = ["//visibility:public"],
7-
)
8-
9-
toolchain(
10-
name = "jmh_toolchain",
11-
toolchain = ":jmh_toolchain_impl",
12-
toolchain_type = "@io_bazel_rules_scala//jmh/toolchain:jmh_toolchain_type",
13-
)
14-
15-
declare_deps_provider(
16-
name = "jmh_core_provider",
17-
deps_id = "jmh_core",
18-
visibility = ["//visibility:public"],
19-
deps = [
20-
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
21-
],
22-
)
23-
24-
declare_deps_provider(
25-
name = "jmh_classpath_provider",
26-
deps_id = "jmh_classpath",
27-
visibility = ["//visibility:public"],
28-
deps = [
29-
"@io_bazel_rules_scala_net_sf_jopt_simple_jopt_simple",
30-
"@io_bazel_rules_scala_org_apache_commons_commons_math3",
31-
],
32-
)
33-
34-
declare_deps_provider(
35-
name = "benchmark_generator_provider",
36-
deps_id = "benchmark_generator",
37-
visibility = ["//visibility:public"],
38-
deps = [
39-
"//src/java/io/bazel/rulesscala/jar",
40-
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
41-
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
42-
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection",
43-
],
44-
)
45-
46-
declare_deps_provider(
47-
name = "benchmark_generator_runtime_provider",
48-
deps_id = "benchmark_generator_runtime",
49-
visibility = ["//visibility:public"],
50-
deps = [
51-
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
52-
],
53-
)
54-
55-
export_toolchain_deps(
56-
name = "jmh_classpath",
57-
deps_id = "jmh_classpath",
58-
visibility = ["//visibility:public"],
59-
)
60-
61-
export_toolchain_deps(
62-
name = "jmh_core",
63-
deps_id = "jmh_core",
64-
visibility = ["//visibility:public"],
65-
)
66-
67-
export_toolchain_deps(
68-
name = "benchmark_generator",
69-
deps_id = "benchmark_generator",
70-
visibility = ["//visibility:public"],
71-
)
72-
73-
export_toolchain_deps(
74-
name = "benchmark_generator_runtime",
75-
deps_id = "benchmark_generator_runtime",
76-
visibility = ["//visibility:public"],
77-
)
1+
load("//jmh/toolchain:toolchain.bzl", "DEP_PROVIDERS", "export_toolchain_deps")
2+
3+
[
4+
export_toolchain_deps(
5+
name = provider,
6+
deps_id = provider,
7+
visibility = ["//visibility:public"],
8+
)
9+
for provider in DEP_PROVIDERS
10+
]

jmh/jmh.bzl

-25
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,5 @@
11
load("//scala/private:rules/scala_binary.bzl", "scala_binary")
22
load("//scala/private:rules/scala_library.bzl", "scala_library")
3-
load(
4-
"//scala:scala_cross_version.bzl",
5-
"default_maven_server_urls",
6-
)
7-
load("//third_party/repositories:repositories.bzl", "repositories")
8-
9-
def jmh_repositories(
10-
maven_servers = default_maven_server_urls(),
11-
overriden_artifacts = {}):
12-
repositories(
13-
for_artifact_ids = [
14-
"io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
15-
"io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
16-
"io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection",
17-
"io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection",
18-
"io_bazel_rules_scala_org_ow2_asm_asm",
19-
"io_bazel_rules_scala_net_sf_jopt_simple_jopt_simple",
20-
"io_bazel_rules_scala_org_apache_commons_commons_math3",
21-
],
22-
fetch_sources = False,
23-
maven_servers = maven_servers,
24-
overriden_artifacts = {},
25-
)
26-
27-
native.register_toolchains("@io_bazel_rules_scala//jmh:jmh_toolchain")
283

294
def _scala_generate_benchmark(ctx):
305
# we use required providers to ensure JavaInfo exists

jmh/toolchain/toolchain.bzl

+97-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
11
load("//scala/private/toolchain_deps:toolchain_deps.bzl", "expose_toolchain_deps")
2-
load("@io_bazel_rules_scala//scala:providers.bzl", _DepsInfo = "DepsInfo")
2+
load("//scala:providers.bzl", "declare_deps_provider", _DepsInfo = "DepsInfo")
3+
load(
4+
"//scala:scala_cross_version.bzl",
5+
"default_maven_server_urls",
6+
_versioned_repositories = "repositories",
7+
)
8+
load("//third_party/repositories:repositories.bzl", "repositories")
9+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
10+
11+
DEP_PROVIDERS = [
12+
"jmh_classpath",
13+
"jmh_core",
14+
"benchmark_generator",
15+
"benchmark_generator_runtime",
16+
]
17+
18+
def jmh_artifact_ids():
19+
return [
20+
"io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
21+
"io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
22+
"io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection",
23+
"io_bazel_rules_scala_org_ow2_asm_asm",
24+
"io_bazel_rules_scala_net_sf_jopt_simple_jopt_simple",
25+
"io_bazel_rules_scala_org_apache_commons_commons_math3",
26+
]
27+
28+
def jmh_repositories(
29+
maven_servers = default_maven_server_urls(),
30+
overriden_artifacts = {}):
31+
repositories(
32+
scala_version = SCALA_VERSION,
33+
for_artifact_ids = jmh_artifact_ids(),
34+
fetch_sources = False,
35+
maven_servers = maven_servers,
36+
overriden_artifacts = overriden_artifacts,
37+
)
38+
native.register_toolchains("@io_bazel_rules_scala_toolchains//jmh:all")
339

440
def _jmh_toolchain_impl(ctx):
541
toolchain = platform_common.ToolchainInfo(
@@ -11,19 +47,16 @@ jmh_toolchain = rule(
1147
_jmh_toolchain_impl,
1248
attrs = {
1349
"dep_providers": attr.label_list(
14-
default = [
15-
"@io_bazel_rules_scala//jmh:jmh_classpath_provider",
16-
"@io_bazel_rules_scala//jmh:jmh_core_provider",
17-
"@io_bazel_rules_scala//jmh:benchmark_generator_provider",
18-
"@io_bazel_rules_scala//jmh:benchmark_generator_runtime_provider",
19-
],
50+
default = [":%s_provider" % p for p in DEP_PROVIDERS],
2051
providers = [_DepsInfo],
2152
),
2253
},
2354
)
2455

56+
_toolchain_type = "//jmh/toolchain:jmh_toolchain_type"
57+
2558
def _export_toolchain_deps_impl(ctx):
26-
return expose_toolchain_deps(ctx, "@io_bazel_rules_scala//jmh/toolchain:jmh_toolchain_type")
59+
return expose_toolchain_deps(ctx, _toolchain_type)
2760

2861
export_toolchain_deps = rule(
2962
_export_toolchain_deps_impl,
@@ -32,6 +65,61 @@ export_toolchain_deps = rule(
3265
mandatory = True,
3366
),
3467
},
35-
toolchains = ["@io_bazel_rules_scala//jmh/toolchain:jmh_toolchain_type"],
68+
toolchains = [_toolchain_type],
3669
incompatible_use_toolchain_transition = True,
3770
)
71+
72+
def setup_jmh_toolchain(name):
73+
jmh_toolchain(
74+
name = "%s_impl" % name,
75+
dep_providers = [":%s_provider" % p for p in DEP_PROVIDERS],
76+
visibility = ["//visibility:public"],
77+
)
78+
79+
native.toolchain(
80+
name = name,
81+
toolchain = ":%s_impl" % name,
82+
toolchain_type = Label(_toolchain_type),
83+
visibility = ["//visibility:public"],
84+
)
85+
86+
declare_deps_provider(
87+
name = "jmh_core_provider",
88+
deps_id = "jmh_core",
89+
visibility = ["//visibility:public"],
90+
deps = _versioned_repositories(SCALA_VERSION, [
91+
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
92+
]),
93+
)
94+
95+
declare_deps_provider(
96+
name = "jmh_classpath_provider",
97+
deps_id = "jmh_classpath",
98+
visibility = ["//visibility:public"],
99+
deps = _versioned_repositories(SCALA_VERSION, [
100+
"@io_bazel_rules_scala_net_sf_jopt_simple_jopt_simple",
101+
"@io_bazel_rules_scala_org_apache_commons_commons_math3",
102+
]),
103+
)
104+
105+
declare_deps_provider(
106+
name = "benchmark_generator_provider",
107+
deps_id = "benchmark_generator",
108+
visibility = ["//visibility:public"],
109+
deps = [
110+
"@io_bazel_rules_scala//src/java/io/bazel/rulesscala/jar",
111+
] + _versioned_repositories(SCALA_VERSION, [
112+
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_core",
113+
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
114+
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection",
115+
]),
116+
)
117+
118+
declare_deps_provider(
119+
name = "benchmark_generator_runtime_provider",
120+
deps_id = "benchmark_generator_runtime",
121+
visibility = ["//visibility:public"],
122+
deps = _versioned_repositories(SCALA_VERSION, [
123+
"@io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm",
124+
]),
125+
)

scala/private/macros/toolchains_repo.bzl

+9
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def _scala_toolchains_repo_impl(repository_ctx):
4747
toolchains["scala"] = _SCALA_TOOLCHAIN_BUILD
4848
if repo_attr.scala_proto:
4949
toolchains["scala_proto"] = _SCALA_PROTO_TOOLCHAIN_BUILD
50+
if repo_attr.jmh:
51+
toolchains["jmh"] = _JMH_TOOLCHAIN_BUILD
5052

5153
testing_build_args = _generate_testing_toolchain_build_file_args(repo_attr)
5254
if testing_build_args != None:
@@ -78,6 +80,7 @@ _scala_toolchains_repo = repository_rule(
7880
"scalafmt": attr.bool(),
7981
"scala_proto": attr.bool(),
8082
"scala_proto_enable_all_options": attr.bool(),
83+
"jmh": attr.bool(),
8184
},
8285
)
8386

@@ -201,3 +204,9 @@ declare_deps_provider(
201204
deps = DEFAULT_SCALAPB_WORKER_DEPS,
202205
)
203206
"""
207+
208+
_JMH_TOOLCHAIN_BUILD = """
209+
load("@@{rules_scala_repo}//jmh/toolchain:toolchain.bzl", "setup_jmh_toolchain")
210+
211+
setup_jmh_toolchain(name = "jmh_toolchain")
212+
"""

scala/toolchains.bzl

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Macros to instantiate and register @io_bazel_rules_scala_toolchains"""
22

3+
load("//jmh/toolchain:toolchain.bzl", "jmh_artifact_ids")
34
load("//junit:junit.bzl", "junit_artifact_ids")
45
load("//scala/private:macros/scala_repositories.bzl", "scala_repositories")
56
load("//scala/private:macros/toolchains_repo.bzl", "scala_toolchains_repo")
@@ -31,7 +32,8 @@ def scala_toolchains(
3132
scalafmt = False,
3233
scalafmt_default_config_path = ".scalafmt.conf",
3334
scala_proto = False,
34-
scala_proto_enable_all_options = False):
35+
scala_proto_enable_all_options = False,
36+
jmh = False):
3537
"""Instantiates @io_bazel_rules_scala_toolchains and all its dependencies.
3638
3739
Provides a unified interface to configuring rules_scala both directly in a
@@ -83,6 +85,7 @@ def scala_toolchains(
8385
scala_proto_enable_all_options: whether to instantiate the scala_proto
8486
toolchain with all options enabled; `scala_proto` must also be
8587
`True` for this to take effect
88+
jmh: whether to instantiate the jmh toolchain
8689
"""
8790
scala_repositories(
8891
maven_servers = maven_servers,
@@ -122,6 +125,11 @@ def scala_toolchains(
122125
id: True
123126
for id in specs2_artifact_ids() + specs2_junit_artifact_ids()
124127
})
128+
if jmh:
129+
artifact_ids_to_fetch_sources.update({
130+
id: False
131+
for id in jmh_artifact_ids()
132+
})
125133

126134
for scala_version in SCALA_VERSIONS:
127135
version_specific_artifact_ids = {}
@@ -159,6 +167,7 @@ def scala_toolchains(
159167
scalafmt = scalafmt,
160168
scala_proto = scala_proto,
161169
scala_proto_enable_all_options = scala_proto_enable_all_options,
170+
jmh = jmh,
162171
)
163172

164173
def scala_register_toolchains():

0 commit comments

Comments
 (0)