Skip to content

Commit ac077fd

Browse files
Allow to cross-compile in run / repl / package
A single Scala version and platform ends up being used for run / repl / package, but --cross allows to compile for all Scala versions and platforms prior to running / repl / packaging.
1 parent 47e9342 commit ac077fd

File tree

9 files changed

+50
-6
lines changed

9 files changed

+50
-6
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package scala.cli.commands
2+
3+
import caseapp._
4+
5+
// format: off
6+
final case class CompileCrossOptions(
7+
@HelpMessage("Cross-compile sources")
8+
cross: Option[Boolean] = None
9+
)
10+
// format: on
11+
12+
object CompileCrossOptions {
13+
implicit val parser = Parser[CompileCrossOptions]
14+
implicit val help = Help[CompileCrossOptions]
15+
}

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ object Package extends ScalaCommand[PackageOptions] {
5151
val bloopRifleConfig = options.shared.bloopRifleConfig()
5252
val logger = options.shared.logger
5353

54+
val cross = options.compileCross.cross.getOrElse(false)
55+
5456
if (options.watch.watch) {
5557
val watcher = Build.watch(
5658
inputs,
5759
initialBuildOptions,
5860
bloopRifleConfig,
5961
logger,
60-
crossBuilds = false,
62+
crossBuilds = cross,
6163
postAction = () => WatchUtil.printWatchMessage()
6264
) {
6365
case (s: Build.Successful, _) =>
@@ -70,7 +72,7 @@ object Package extends ScalaCommand[PackageOptions] {
7072
}
7173
else {
7274
val (build, _) =
73-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = false)
75+
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
7476
build match {
7577
case s: Build.Successful =>
7678
doPackage(inputs, logger, options.output.filter(_.nonEmpty), options.force, s)

modules/cli/src/main/scala/scala/cli/commands/PackageOptions.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ final case class PackageOptions(
1313
shared: SharedOptions = SharedOptions(),
1414
@Recurse
1515
watch: SharedWatchOptions = SharedWatchOptions(),
16+
@Recurse
17+
compileCross: CompileCrossOptions = CompileCrossOptions(),
1618

1719
@Group("Package")
1820
@HelpMessage("Set destination path")

modules/cli/src/main/scala/scala/cli/commands/Repl.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ object Repl extends ScalaCommand[ReplOptions] {
5757
sys.exit(1)
5858
}
5959

60+
val cross = options.compileCross.cross.getOrElse(false)
61+
6062
if (inputs.isEmpty) {
6163
val artifacts = initialBuildOptions.artifacts(logger)
6264
maybeRunRepl(initialBuildOptions, artifacts, None, allowExit = !options.watch.watch)
@@ -72,7 +74,7 @@ object Repl extends ScalaCommand[ReplOptions] {
7274
initialBuildOptions,
7375
bloopRifleConfig,
7476
logger,
75-
crossBuilds = false,
77+
crossBuilds = cross,
7678
postAction = () => WatchUtil.printWatchMessage()
7779
) { (build, _) =>
7880
maybeRunRepl(build.options, build.artifacts, build.outputOpt, allowExit = false)
@@ -82,7 +84,7 @@ object Repl extends ScalaCommand[ReplOptions] {
8284
}
8385
else {
8486
val (build, _) =
85-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = false)
87+
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
8688
maybeRunRepl(build.options, build.artifacts, build.outputOpt, allowExit = true)
8789
}
8890
}

modules/cli/src/main/scala/scala/cli/commands/ReplOptions.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ final case class ReplOptions(
1414
sharedJava: SharedJavaOptions = SharedJavaOptions(),
1515
@Recurse
1616
watch: SharedWatchOptions = SharedWatchOptions(),
17+
@Recurse
18+
compileCross: CompileCrossOptions = CompileCrossOptions(),
1719

1820
@Group("Repl")
1921
@HelpMessage("Use Ammonite rather than the default Scala REPL")

modules/cli/src/main/scala/scala/cli/commands/Run.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ object Run extends ScalaCommand[RunOptions] {
3939
jvmRunner = build.options.addRunnerDependency.getOrElse(true)
4040
)
4141

42+
val cross = options.compileCross.cross.getOrElse(false)
43+
4244
if (options.watch.watch) {
4345
val watcher = Build.watch(
4446
inputs,
4547
initialBuildOptions,
4648
bloopRifleConfig,
4749
logger,
48-
crossBuilds = false,
50+
crossBuilds = cross,
4951
postAction = () => WatchUtil.printWatchMessage()
5052
) {
5153
case (s: Build.Successful, _) =>
@@ -58,7 +60,7 @@ object Run extends ScalaCommand[RunOptions] {
5860
}
5961
else {
6062
val (build, _) =
61-
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = false)
63+
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
6264
build match {
6365
case s: Build.Successful =>
6466
maybeRun(s, allowTerminate = true)

modules/cli/src/main/scala/scala/cli/commands/RunOptions.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ final case class RunOptions(
2020
sharedJava: SharedJavaOptions = SharedJavaOptions(),
2121
@Recurse
2222
watch: SharedWatchOptions = SharedWatchOptions(),
23+
@Recurse
24+
compileCross: CompileCrossOptions = CompileCrossOptions(),
2325

2426
@Group("Runner")
2527
@HelpMessage("Specify which main class to run")

website/docs/reference/cli-options.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,20 @@ Aliases: `-p`, `--classpath`
104104

105105
Print resulting class path
106106

107+
## Compile cross options
108+
109+
Available in commands:
110+
- [`package`](./commands#package)
111+
- [`console` / `repl`](./commands#console)
112+
- [`run`](./commands#run)
113+
114+
115+
<!-- Automatically generated, DO NOT EDIT MANUALLY -->
116+
117+
#### `--cross`
118+
119+
Cross-compile sources
120+
107121
## Coursier options
108122

109123
Available in commands:

website/docs/reference/commands.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Fire-up a Scala REPL
8181

8282
Accepts options:
8383
- [compilation server](./cli-options.md#compilation-server-options)
84+
- [compile cross](./cli-options.md#compile-cross-options)
8485
- [coursier](./cli-options.md#coursier-options)
8586
- [dependency](./cli-options.md#dependency-options)
8687
- [java](./cli-options.md#java-options)
@@ -99,6 +100,7 @@ Compile and package Scala code
99100

100101
Accepts options:
101102
- [compilation server](./cli-options.md#compilation-server-options)
103+
- [compile cross](./cli-options.md#compile-cross-options)
102104
- [coursier](./cli-options.md#coursier-options)
103105
- [dependency](./cli-options.md#dependency-options)
104106
- [jvm](./cli-options.md#jvm-options)
@@ -121,6 +123,7 @@ scala-cli MyApp.scala -- first-arg second-arg
121123
Accepts options:
122124
- [benchmarking](./cli-options.md#benchmarking-options)
123125
- [compilation server](./cli-options.md#compilation-server-options)
126+
- [compile cross](./cli-options.md#compile-cross-options)
124127
- [coursier](./cli-options.md#coursier-options)
125128
- [dependency](./cli-options.md#dependency-options)
126129
- [java](./cli-options.md#java-options)

0 commit comments

Comments
 (0)