diff --git a/libs/scalajslib/api/src/mill/scalajslib/worker/api/ScalaJSWorkerApi.scala b/libs/scalajslib/api/src/mill/scalajslib/worker/api/ScalaJSWorkerApi.scala index 9c5c6f3182fb..c8d626207fd3 100644 --- a/libs/scalajslib/api/src/mill/scalajslib/worker/api/ScalaJSWorkerApi.scala +++ b/libs/scalajslib/api/src/mill/scalajslib/worker/api/ScalaJSWorkerApi.scala @@ -19,7 +19,8 @@ private[scalajslib] trait ScalaJSWorkerApi extends AutoCloseable { outputPatterns: OutputPatterns, minify: Boolean, importMap: Seq[ESModuleImportMapping], - experimentalUseWebAssembly: Boolean + experimentalUseWebAssembly: Boolean, + parallel: Boolean ): Either[String, Report] def run(config: JsEnvConfig, report: Report): Unit diff --git a/libs/scalajslib/src/mill/scalajslib/ScalaJSModule.scala b/libs/scalajslib/src/mill/scalajslib/ScalaJSModule.scala index 1f4941e97815..6d8aec54ef4d 100644 --- a/libs/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/libs/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -28,6 +28,7 @@ trait ScalaJSModule extends scalalib.ScalaModule with ScalaJSModuleApi { outer = override def esFeatures = outer.esFeatures() override def jsEnvConfig: T[JsEnvConfig] = outer.jsEnvConfig() override def scalaJSOptimizer: T[Boolean] = outer.scalaJSOptimizer() + override def scalaJSParallel: T[Boolean] = outer.scalaJSParallel() } def scalaJSBinaryVersion = Task { JvmWorkerUtil.scalaJSBinaryVersion(scalaJSVersion()) } @@ -133,7 +134,8 @@ trait ScalaJSModule extends scalalib.ScalaModule with ScalaJSModuleApi { outer = outputPatterns = scalaJSOutputPatterns(), minify = scalaJSMinify(), importMap = scalaJSImportMap(), - experimentalUseWebAssembly = scalaJSExperimentalUseWebAssembly() + experimentalUseWebAssembly = scalaJSExperimentalUseWebAssembly(), + parallel = scalaJSParallel() ) } @@ -185,7 +187,8 @@ trait ScalaJSModule extends scalalib.ScalaModule with ScalaJSModuleApi { outer = outputPatterns: OutputPatterns, minify: Boolean, importMap: Seq[ESModuleImportMapping], - experimentalUseWebAssembly: Boolean + experimentalUseWebAssembly: Boolean, + parallel: Boolean )(using ctx: mill.api.TaskCtx): Result[Report] = { val outputPath = ctx.dest @@ -207,7 +210,8 @@ trait ScalaJSModule extends scalalib.ScalaModule with ScalaJSModuleApi { outer = outputPatterns = outputPatterns, minify = minify, importMap = importMap, - experimentalUseWebAssembly = experimentalUseWebAssembly + experimentalUseWebAssembly = experimentalUseWebAssembly, + parallel = parallel ) } @@ -281,6 +285,12 @@ trait ScalaJSModule extends scalalib.ScalaModule with ScalaJSModuleApi { outer = def scalaJSOptimizer: T[Boolean] = Task { true } + /** + * Whether Scala.js operations that can be parallelized should be parallelized. + * On the JavaScript platform, this does not have any effect. + */ + def scalaJSParallel: T[Boolean] = Task { true } + def scalaJSImportMap: T[Seq[ESModuleImportMapping]] = Task { Seq.empty[ESModuleImportMapping] } @@ -382,7 +392,8 @@ trait TestScalaJSModule extends ScalaJSModule with TestModule { outputPatterns = scalaJSOutputPatterns(), minify = scalaJSMinify(), importMap = scalaJSImportMap(), - experimentalUseWebAssembly = scalaJSExperimentalUseWebAssembly() + experimentalUseWebAssembly = scalaJSExperimentalUseWebAssembly(), + parallel = scalaJSParallel() ) } diff --git a/libs/scalajslib/src/mill/scalajslib/worker/ScalaJSWorker.scala b/libs/scalajslib/src/mill/scalajslib/worker/ScalaJSWorker.scala index a32180f1e824..2a6edf8688d0 100644 --- a/libs/scalajslib/src/mill/scalajslib/worker/ScalaJSWorker.scala +++ b/libs/scalajslib/src/mill/scalajslib/worker/ScalaJSWorker.scala @@ -206,7 +206,8 @@ private[scalajslib] class ScalaJSWorker(jobs: Int) outputPatterns: api.OutputPatterns, minify: Boolean, importMap: Seq[api.ESModuleImportMapping], - experimentalUseWebAssembly: Boolean + experimentalUseWebAssembly: Boolean, + parallel: Boolean ): Result[api.Report] = { withValue(toolsClasspath) { case (_, bridge) => bridge.link( @@ -224,7 +225,8 @@ private[scalajslib] class ScalaJSWorker(jobs: Int) outputPatterns = toWorkerApi(outputPatterns), minify = minify, importMap = importMap.map(toWorkerApi), - experimentalUseWebAssembly = experimentalUseWebAssembly + experimentalUseWebAssembly = experimentalUseWebAssembly, + parallel = parallel ) match { case Right(report) => Result.Success(fromWorkerApi(report)) case Left(message) => Result.Failure(message) diff --git a/libs/scalajslib/worker/1/src/mill/scalajslib/worker/ScalaJSWorkerImpl.scala b/libs/scalajslib/worker/1/src/mill/scalajslib/worker/ScalaJSWorkerImpl.scala index 1b6ceaee2038..9aaa6b84527d 100644 --- a/libs/scalajslib/worker/1/src/mill/scalajslib/worker/ScalaJSWorkerImpl.scala +++ b/libs/scalajslib/worker/1/src/mill/scalajslib/worker/ScalaJSWorkerImpl.scala @@ -37,7 +37,8 @@ class ScalaJSWorkerImpl(jobs: Int) extends ScalaJSWorkerApi { outputPatterns: OutputPatterns, minify: Boolean, dest: File, - experimentalUseWebAssembly: Boolean + experimentalUseWebAssembly: Boolean, + parallel: Boolean ) private def minorIsGreaterThanOrEqual(number: Int) = ScalaJSVersions.current match { case s"1.$n.$_" if n.toIntOption.exists(_ < number) => false @@ -104,6 +105,7 @@ class ScalaJSWorkerImpl(jobs: Int) extends ScalaJSWorkerApi { .withModuleKind(scalaJSModuleKind) .withESFeatures(scalaJSESFeatures) .withSourceMap(input.sourceMap) + .withParallel(input.parallel) def withModuleSplitStyle_1_3_plus(config: StandardConfig): StandardConfig = { config.withModuleSplitStyle( @@ -192,7 +194,8 @@ class ScalaJSWorkerImpl(jobs: Int) extends ScalaJSWorkerApi { outputPatterns: OutputPatterns, minify: Boolean, importMap: Seq[ESModuleImportMapping], - experimentalUseWebAssembly: Boolean + experimentalUseWebAssembly: Boolean, + parallel: Boolean ): Either[String, Report] = ScalaJSLinker.withValue(LinkerInput( isFullLinkJS = isFullLinkJS, optimizer = optimizer, @@ -203,7 +206,8 @@ class ScalaJSWorkerImpl(jobs: Int) extends ScalaJSWorkerApi { outputPatterns = outputPatterns, minify = minify, dest = dest, - experimentalUseWebAssembly = experimentalUseWebAssembly + experimentalUseWebAssembly = experimentalUseWebAssembly, + parallel = parallel )) { (linker, irFileCacheCache) => // On Scala.js 1.2- we want to use the legacy mode either way since // the new mode is not supported and in tests we always use legacy = false