diff options
Diffstat (limited to 'plugins/scalajs')
-rw-r--r-- | plugins/scalajs/ScalaJsBuild.scala | 52 | ||||
-rw-r--r-- | plugins/scalajs/ScalaJsLib.scala | 51 | ||||
-rw-r--r-- | plugins/scalajs/build/build.scala | 3 |
3 files changed, 106 insertions, 0 deletions
diff --git a/plugins/scalajs/ScalaJsBuild.scala b/plugins/scalajs/ScalaJsBuild.scala new file mode 100644 index 0000000..9374f66 --- /dev/null +++ b/plugins/scalajs/ScalaJsBuild.scala @@ -0,0 +1,52 @@ +package cbt +import java.io.File +import java.net.URL + +trait ScalaJsBuild extends BaseBuild { + final protected val scalaJsLib = ScalaJsLib( + scalaJsVersion, + scalaVersion, + context.cbtHasChanged, + context.classLoaderCache, + context.paths.mavenCache + ) + import scalaJsLib.{link => _,_} + + def scalaJsVersion = "0.6.8" + final protected val scalaJsMajorVersion: String = lib.libMajorVersion(scalaJsVersion) + final protected val artifactIdSuffix = s"_sjs$scalaJsMajorVersion" + + override def dependencies = super.dependencies :+ scalaJsLibraryDependency + override def scalacOptions = super.scalacOptions ++ scalaJsLib.scalacOptions + + /** Note: We make same assumption about scala version. + In order to be able to choose different scala version, one has to use %. */ + implicit class ScalaJsDependencyBuilder(groupId: String){ + def %%%(artifactId: String) = new DependencyBuilder2( + groupId, artifactId + artifactIdSuffix, Some(scalaMajorVersion)) + } + + private def link(mode: ScalaJsOutputMode, outputPath: File) = scalaJsLib.link( + mode, outputPath, scalaJsOptions, + target +: dependencies.collect{case d: BoundMavenDependency => d.jar} + ) + + def scalaJsOptions: Seq[String] = Seq() + def scalaJsOptionsFastOpt: Seq[String] = scalaJsOptions + def scalaJsOptionsFullOpt: Seq[String] = scalaJsOptions + + private def output(mode: ScalaJsOutputMode) = target ++ s"/$projectName-${mode.fileSuffix}.js" + protected def fastOptJSFile: File = output(FastOptJS) + protected def fullOptJSFile: File = output(FullOptJS) + + def fastOptJS = { + compile + link(FastOptJS, fastOptJSFile) + fastOptJSFile + } + def fullOptJS = { + compile + link(FullOptJS, fullOptJSFile) + fullOptJSFile + } +} diff --git a/plugins/scalajs/ScalaJsLib.scala b/plugins/scalajs/ScalaJsLib.scala new file mode 100644 index 0000000..0355850 --- /dev/null +++ b/plugins/scalajs/ScalaJsLib.scala @@ -0,0 +1,51 @@ +package cbt +import java.io.File + +case class ScalaJsLib( + scalaJsVersion: String, scalaVersion: String, + cbtHasChanged: Boolean, classLoaderCache: ClassLoaderCache, mavenCache: File +)(implicit logger: Logger){ + sealed trait ScalaJsOutputMode { + def option: String + def fileSuffix: String + } + case object FastOptJS extends ScalaJsOutputMode{ + override val option = "--fastOpt" + override val fileSuffix = "fastopt" + } + case object FullOptJS extends ScalaJsOutputMode{ + override val option = "--fullOpt" + override val fileSuffix = "fullopt" + } + + val lib = new Lib(logger) + def dep(artifactId: String) = MavenResolver( cbtHasChanged, mavenCache, mavenCentral ).bindOne( + MavenDependency("org.scala-js", artifactId, scalaJsVersion) + ) + + def link( + mode: ScalaJsOutputMode, outputPath: File, + scalaJsOptions: Seq[String], entriesToLink: Seq[File] + ) = { + val scalaJsCliDep = dep( "scalajs-cli_"++lib.libMajorVersion(scalaVersion) ) + lib.runMain( + "org.scalajs.cli.Scalajsld", + Seq( + mode.option, + "--sourceMap", + "--stdlib", s"${scalaJsLibraryDependency.jar.getAbsolutePath}", + "--output", outputPath.string + ) ++ scalaJsOptions ++ entriesToLink.map(_.getAbsolutePath), + scalaJsCliDep.classLoader(classLoaderCache) + ) + } + + val scalaJsLibraryDependency = dep( "scalajs-library_"++lib.libMajorVersion(scalaVersion) ) + + // Has to be full Scala version because the compiler is incompatible between versions + val scalaJsCompilerDependency = dep( "scalajs-compiler_"++scalaVersion ) + val scalacOptions = Seq( + "-Xplugin:" ++ scalaJsCompilerDependency.jar.string, + "-Xplugin-require:scalajs" + ) +} diff --git a/plugins/scalajs/build/build.scala b/plugins/scalajs/build/build.scala new file mode 100644 index 0000000..0205cf8 --- /dev/null +++ b/plugins/scalajs/build/build.scala @@ -0,0 +1,3 @@ +import cbt._ + +class Build(val context: Context) extends Plugin |