diff options
author | Olivier Mélois <baccata64@gmail.com> | 2019-05-28 09:40:58 +0200 |
---|---|---|
committer | Tobias Roeser <le.petit.fou@web.de> | 2019-05-28 09:40:57 +0200 |
commit | d3e277f813dd0ad96a4ddeac5cdf62546ebcec41 (patch) | |
tree | 9041d4f006e50d0b074ef93bb83d99d47edd28da /contrib/bloop/src | |
parent | 64469e59c4f1e8f4691214b89e1f19c73a0311d3 (diff) | |
download | mill-d3e277f813dd0ad96a4ddeac5cdf62546ebcec41.tar.gz mill-d3e277f813dd0ad96a4ddeac5cdf62546ebcec41.tar.bz2 mill-d3e277f813dd0ad96a4ddeac5cdf62546ebcec41.zip |
Bloop config for Js/Native modules (#617)
This generates correct bloop configuration for ScalaJs/ScalaNative
module.
Diffstat (limited to 'contrib/bloop/src')
-rw-r--r-- | contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala | 81 |
1 files changed, 73 insertions, 8 deletions
diff --git a/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala b/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala index 64f7b386..0db3b7dc 100644 --- a/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala +++ b/contrib/bloop/src/mill.contrib.bloop/BloopImpl.scala @@ -7,7 +7,11 @@ import mill._ import mill.api.Loose import mill.define.{Module => MillModule, _} import mill.eval.Evaluator +import mill.scalajslib.ScalaJSModule +import mill.scalajslib.api.ModuleKind import mill.scalalib._ +import mill.scalanativelib.ScalaNativeModule +import mill.scalanativelib.api.ReleaseMode import os.pwd /** @@ -46,6 +50,12 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => */ trait Module extends MillModule with CirceCompat { self: JavaModule => + /** + * Allows to tell Bloop whether it should use "fullOptJs" or + * "fastOptJs" when compiling. Used exclusively with ScalaJsModules. + */ + def linkerMode: T[Option[BloopConfig.LinkerMode]] = None + object bloop extends MillModule { def config = T { new BloopOps(self).bloop.config() @@ -82,6 +92,11 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => Task.traverse(jm.transitiveModuleDeps)(_.bloop.writeConfig) } } + + def asBloop: Option[Module] = jm match { + case m: Module => Some(m) + case _ => None + } } private def computeModules: Seq[JavaModule] = { @@ -193,14 +208,63 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => // Platform (Jvm/Js/Native) //////////////////////////////////////////////////////////////////////////// - val platform = T.task { - BloopConfig.Platform.Jvm( - BloopConfig.JvmConfig( - home = T.ctx().env.get("JAVA_HOME").map(s => Path(s).toNIO), - options = module.forkArgs().toList - ), - mainClass = module.mainClass() - ) + def jsLinkerMode(m: JavaModule): Task[Config.LinkerMode] = + (m.asBloop match { + case Some(bm) => T.task(bm.linkerMode()) + case None => T.task(None) + }).map(_.getOrElse(Config.LinkerMode.Debug)) + + val platform: Task[BloopConfig.Platform] = module match { + case m: ScalaJSModule => + T.task { + BloopConfig.Platform.Js( + BloopConfig.JsConfig.empty.copy( + version = m.scalaJSVersion(), + mode = jsLinkerMode(m)(), + kind = m.moduleKind() match { + case ModuleKind.NoModule => Config.ModuleKindJS.NoModule + case ModuleKind.CommonJSModule => + Config.ModuleKindJS.CommonJSModule + }, + emitSourceMaps = m.nodeJSConfig().sourceMap, + jsdom = Some(false), + ), + mainClass = module.mainClass() + ) + } + case m: ScalaNativeModule => + T.task { + BloopConfig.Platform.Native( + BloopConfig.NativeConfig.empty.copy( + version = m.scalaNativeVersion(), + mode = m.releaseMode() match { + case ReleaseMode.Debug => BloopConfig.LinkerMode.Debug + case ReleaseMode.Release => BloopConfig.LinkerMode.Release + }, + gc = m.nativeGC(), + targetTriple = m.nativeTarget(), + nativelib = m.nativeLibJar().path.toNIO, + clang = m.nativeClang().toNIO, + clangpp = m.nativeClangPP().toNIO, + options = Config.NativeOptions( + m.nativeLinkingOptions().toList, + m.nativeCompileOptions().toList + ), + linkStubs = m.nativeLinkStubs(), + ), + mainClass = module.mainClass() + ) + } + case _ => + T.task { + BloopConfig.Platform.Jvm( + BloopConfig.JvmConfig( + home = T.ctx().env.get("JAVA_HOME").map(s => Path(s).toNIO), + options = module.forkArgs().toList + ), + mainClass = module.mainClass() + ) + } } //////////////////////////////////////////////////////////////////////////// @@ -241,6 +305,7 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => */ def artifacts(repos: Seq[coursier.Repository], deps: Seq[coursier.Dependency]): List[BloopConfig.Module] = { + import coursier._ import coursier.util._ |