Skip to content

Commit ccd0fe5

Browse files
authored
Extract scalacopts phase (#1435)
A separate phase for scalac opts allows customizing how scalac opts can be provided in different rules.
1 parent 4960e77 commit ccd0fe5

File tree

11 files changed

+34
-8
lines changed

11 files changed

+34
-8
lines changed

scala/private/phases/phase_compile.bzl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ def _phase_compile(
132132

133133
out = _compile_or_empty(
134134
ctx,
135+
p.scalacopts,
135136
manifest,
136137
jars,
137138
srcjars,
@@ -157,6 +158,7 @@ def _phase_compile(
157158

158159
def _compile_or_empty(
159160
ctx,
161+
scalacopts,
160162
manifest,
161163
jars,
162164
srcjars,
@@ -202,10 +204,10 @@ def _compile_or_empty(
202204
ctx.files.resources,
203205
ctx.files.resource_jars,
204206
jars2labels,
205-
ctx.attr.scalacopts,
206207
ctx.attr.print_compile_time,
207208
ctx.attr.expect_java_output,
208209
ctx.attr.scalac_jvm_flags,
210+
scalacopts,
209211
ctx.executable._scalac,
210212
dependency_info,
211213
unused_dependency_checker_ignored_targets,
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def phase_scalacopts(ctx, p):
2+
toolchain = ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"]
3+
return toolchain.scalacopts + ctx.attr.scalacopts

scala/private/phases/phases.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ load(
6262
load("@io_bazel_rules_scala//scala/private:phases/phase_declare_executable.bzl", _phase_declare_executable = "phase_declare_executable")
6363
load("@io_bazel_rules_scala//scala/private:phases/phase_merge_jars.bzl", _phase_merge_jars = "phase_merge_jars")
6464
load("@io_bazel_rules_scala//scala/private:phases/phase_jvm_flags.bzl", _phase_jvm_flags = "phase_jvm_flags")
65+
load("@io_bazel_rules_scala//scala/private:phases/phase_scalacopts.bzl", _phase_scalacopts = "phase_scalacopts")
6566
load("@io_bazel_rules_scala//scala/private:phases/phase_coverage_runfiles.bzl", _phase_coverage_runfiles = "phase_coverage_runfiles")
6667
load("@io_bazel_rules_scala//scala/private:phases/phase_scalafmt.bzl", _phase_scalafmt = "phase_scalafmt")
6768
load("@io_bazel_rules_scala//scala/private:phases/phase_test_environment.bzl", _phase_test_environment = "phase_test_environment")
@@ -95,6 +96,9 @@ phase_merge_jars = _phase_merge_jars
9596
# jvm_flags
9697
phase_jvm_flags = _phase_jvm_flags
9798

99+
# scalacopts
100+
phase_scalacopts = _phase_scalacopts
101+
98102
# coverage
99103
phase_coverage_library = _phase_coverage_library
100104
phase_coverage_common = _phase_coverage_common

scala/private/rule_impls.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ def compile_scala(
4848
resources,
4949
resource_jars,
5050
labels,
51-
in_scalacopts,
5251
print_compile_time,
5352
expect_java_output,
5453
scalac_jvm_flags,
54+
scalacopts,
5555
scalac,
5656
dependency_info,
5757
unused_dependency_checker_ignored_targets,
@@ -65,7 +65,7 @@ def compile_scala(
6565
toolchain = ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"]
6666
compiler_classpath_jars = cjars if dependency_info.dependency_mode == "direct" else transitive_compile_jars
6767
classpath_resources = getattr(ctx.files, "classpath_resources", [])
68-
scalacopts = [ctx.expand_location(v, input_plugins) for v in toolchain.scalacopts + in_scalacopts]
68+
scalacopts_expanded = [ctx.expand_location(v, input_plugins) for v in scalacopts]
6969
resource_paths = _resource_paths(resources, resource_strip_prefix)
7070
enable_stats_file = toolchain.enable_stats_file
7171
enable_diagnostics_report = toolchain.enable_diagnostics_report
@@ -93,7 +93,7 @@ def compile_scala(
9393
args.add_all("--ResourceTargets", [p[0] for p in resource_paths])
9494
args.add_all("--ResourceSources", [p[1] for p in resource_paths])
9595
args.add_all("--ResourceJars", resource_jars)
96-
args.add_all("--ScalacOpts", scalacopts)
96+
args.add_all("--ScalacOpts", scalacopts_expanded)
9797
args.add_all("--SourceJars", all_srcjars)
9898

9999
if dependency_info.need_direct_info:

scala/private/rules/scala_binary.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ load(
2222
"phase_merge_jars",
2323
"phase_runfiles_common",
2424
"phase_scalac_provider",
25+
"phase_scalacopts",
2526
"phase_write_executable_common",
2627
"phase_write_manifest",
2728
"run_phases",
@@ -38,6 +39,7 @@ def _scala_binary_impl(ctx):
3839
("collect_jars", phase_collect_jars_common),
3940
("java_wrapper", phase_java_wrapper_common),
4041
("declare_executable", phase_declare_executable),
42+
("scalacopts", phase_scalacopts),
4143
# no need to build an ijar for an executable
4244
("compile", phase_compile_binary),
4345
("coverage", phase_coverage_common),

scala/private/rules/scala_junit_test.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ load(
2323
"phase_merge_jars",
2424
"phase_runfiles_common",
2525
"phase_scalac_provider",
26+
"phase_scalacopts",
2627
"phase_test_environment",
2728
"phase_write_executable_junit_test",
2829
"phase_write_manifest",
@@ -44,6 +45,7 @@ def _scala_junit_test_impl(ctx):
4445
("collect_jars", phase_collect_jars_junit_test),
4546
("java_wrapper", phase_java_wrapper_common),
4647
("declare_executable", phase_declare_executable),
48+
("scalacopts", phase_scalacopts),
4749
# no need to build an ijar for an executable
4850
("compile", phase_compile_junit_test),
4951
("coverage", phase_coverage_common),

scala/private/rules/scala_library.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ load(
3333
"phase_merge_jars",
3434
"phase_runfiles_library",
3535
"phase_scalac_provider",
36+
"phase_scalacopts",
3637
"phase_write_manifest",
3738
"run_phases",
3839
)
@@ -64,6 +65,7 @@ def _scala_library_impl(ctx):
6465
("write_manifest", phase_write_manifest),
6566
("dependency", phase_dependency_common),
6667
("collect_jars", phase_collect_jars_common),
68+
("scalacopts", phase_scalacopts),
6769
("compile", phase_compile_library),
6870
("coverage", phase_coverage_library),
6971
("merge_jars", phase_merge_jars),
@@ -143,6 +145,7 @@ def _scala_library_for_plugin_bootstrapping_impl(ctx):
143145
("write_manifest", phase_write_manifest),
144146
("dependency", phase_dependency_library_for_plugin_bootstrapping),
145147
("collect_jars", phase_collect_jars_common),
148+
("scalacopts", phase_scalacopts),
146149
("compile", phase_compile_library_for_plugin_bootstrapping),
147150
("merge_jars", phase_merge_jars),
148151
("runfiles", phase_runfiles_library),
@@ -201,6 +204,7 @@ def _scala_macro_library_impl(ctx):
201204
("write_manifest", phase_write_manifest),
202205
("dependency", phase_dependency_common),
203206
("collect_jars", phase_collect_jars_macro_library),
207+
("scalacopts", phase_scalacopts),
204208
("compile", phase_compile_macro_library),
205209
("coverage", phase_coverage_common),
206210
("merge_jars", phase_merge_jars),

scala/private/rules/scala_repl.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ load(
2222
"phase_merge_jars",
2323
"phase_runfiles_common",
2424
"phase_scalac_provider",
25+
"phase_scalacopts",
2526
"phase_write_executable_repl",
2627
"phase_write_manifest",
2728
"run_phases",
@@ -39,6 +40,7 @@ def _scala_repl_impl(ctx):
3940
("collect_jars", phase_collect_jars_repl),
4041
("java_wrapper", phase_java_wrapper_repl),
4142
("declare_executable", phase_declare_executable),
43+
("scalacopts", phase_scalacopts),
4244
# no need to build an ijar for an executable
4345
("compile", phase_compile_repl),
4446
("coverage", phase_coverage_common),

scala/private/rules/scala_test.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ load(
2323
"phase_merge_jars",
2424
"phase_runfiles_scalatest",
2525
"phase_scalac_provider",
26+
"phase_scalacopts",
2627
"phase_test_environment",
2728
"phase_write_executable_scalatest",
2829
"phase_write_manifest",
@@ -40,6 +41,7 @@ def _scala_test_impl(ctx):
4041
("collect_jars", phase_collect_jars_scalatest),
4142
("java_wrapper", phase_java_wrapper_common),
4243
("declare_executable", phase_declare_executable),
44+
("scalacopts", phase_scalacopts),
4345
# no need to build an ijar for an executable
4446
("compile", phase_compile_scalatest),
4547
("coverage", phase_coverage_common),

scala_proto/private/scala_proto_aspect.bzl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def _generate_sources(ctx, toolchain, proto):
8383

8484
return outputs.values()
8585

86-
def _compile_sources(ctx, toolchain, proto, src_jars, deps, stamp_label):
86+
def _compile_sources(ctx, toolchain, proto, src_jars, deps, scalacopts, stamp_label):
8787
output = ctx.actions.declare_file(ctx.label.name + "_scalapb.jar")
8888
manifest = ctx.actions.declare_file(ctx.label.name + "_MANIFEST.MF")
8989
write_manifest_file(ctx.actions, manifest, None)
@@ -112,10 +112,10 @@ def _compile_sources(ctx, toolchain, proto, src_jars, deps, stamp_label):
112112
resources = proto.direct_sources,
113113
resource_jars = [],
114114
labels = {},
115-
in_scalacopts = [],
116115
print_compile_time = False,
117116
expect_java_output = False,
118117
scalac_jvm_flags = [],
118+
scalacopts = scalacopts,
119119
scalac = toolchain.scalac,
120120
dependency_info = legacy_unclear_dependency_info_for_protobuf_scrooge(ctx),
121121
unused_dependency_checker_ignored_targets = [],
@@ -137,15 +137,19 @@ def _phase_proto_provider(ctx, p):
137137
def _phase_deps(ctx, p):
138138
return [d[ScalaProtoAspectInfo].java_info for d in ctx.rule.attr.deps]
139139

140+
def _phase_scalacopts(ctx, p):
141+
return ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"].scalacopts
142+
140143
def _phase_generate_and_compile(ctx, p):
141144
proto = p.proto_info
142145
deps = p.deps
146+
scalacopts = p.scalacopts
143147
stamp_label = p.stamp_label
144148
toolchain = ctx.toolchains["@io_bazel_rules_scala//scala_proto:toolchain_type"]
145149

146150
if proto.direct_sources and _code_should_be_generated(ctx, toolchain):
147151
src_jars = _generate_sources(ctx, toolchain, proto)
148-
java_info = _compile_sources(ctx, toolchain, proto, src_jars, deps, stamp_label)
152+
java_info = _compile_sources(ctx, toolchain, proto, src_jars, deps, scalacopts, stamp_label)
149153
return java_info
150154
else:
151155
# this target is only an aggregation target
@@ -184,6 +188,7 @@ def _scala_proto_aspect_impl(target, ctx):
184188
("proto_info", _phase_proto_provider),
185189
("deps", _phase_deps),
186190
("stamp_label", _phase_stamp_label),
191+
("scalacopts", _phase_scalacopts),
187192
("generate_and_compile", _phase_generate_and_compile),
188193
("aspect_provider", _phase_aspect_provider),
189194
],

0 commit comments

Comments
 (0)