aboutsummaryrefslogtreecommitdiff
path: root/plugins/scalajs
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/scalajs')
-rw-r--r--plugins/scalajs/ScalaJsBuild.scala52
-rw-r--r--plugins/scalajs/ScalaJsLib.scala51
-rw-r--r--plugins/scalajs/build/build.scala3
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