blob: 1a3168376893e85afb8d26d3c0691a36f9bc7e95 (
plain) (
tree)
|
|
import java.io.File
import cbt._
import scala.collection.immutable.Seq
trait ScalaJsSbtDependencyDsl extends SbtDependencyDsl { self: ScalaJsBuild =>
//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))
}
}
trait ScalaJsBuild extends BaseBuild with ScalaJsSbtDependencyDsl with ScalaJsInformation { outer =>
def sharedFolder = projectDirectory ++ "/shared"
def jvmFolder = projectDirectory ++ "/jvm"
def jsFolder = projectDirectory ++ "/js"
private lazy val jvmBuild = new BasicBuild(outer.context){
override def sources = Seq(sharedFolder ++ "/src/main/scala", jvmFolder ++ "/src/main/scala")
override def target = jvmFolder ++ "/target"
override def dependencies = outer.dependencies ++ jvmDependencies
}
private lazy val jsBuild = new BasicBuild(outer.context){
override def sources = Seq(sharedFolder ++ "/src/main/scala", jsFolder ++ "/src/main/scala")
override def target = jsFolder ++ "/target"
override def dependencies = outer.dependencies :+ scalaJsLibDep
override def scalacOptions = super.scalacOptions ++
Seq(s"-Xplugin:${scalaJsCompilerDep.jar.getAbsolutePath}", "-Xplugin-require:scalajs")
}
def jvmDependencies = Seq.empty[Dependency]
//TODO: implement
def jsDependencies = Seq.empty[Dependency]
def jvmCompile: Option[File] = jvmBuild.compile
def jsCompile: Option[File] = jsBuild.compile
override def compile = {
jvmCompile
jsCompile
}
trait JsOutputMode {
def option: String
def fileSuffix: String
}
case object FastOptJS extends JsOutputMode{
override val option = "-f"
override val fileSuffix = "fastopt"
}
case object FullOptJS extends JsOutputMode{
override val option = "-u"
override val fileSuffix = "fullopt"
}
private def output(mode: JsOutputMode) = s"${jsBuild.target.getAbsolutePath}/$projectName-${mode.fileSuffix}.js"
//TODO: should process all options that Scalajsld recognizes?
private def link(mode: JsOutputMode, outputPath: String) = {
lib.runMain(
"org.scalajs.cli.Scalajsld",
Seq(
mode.option,
"-s",
"--stdlib", s"${scalaJsLibDep.jar.getAbsolutePath}",
"-o", outputPath,
jsBuild.target.getAbsolutePath) ++
jsBuild.dependencies.collect{case d: BoundMavenDependency => d.jar.getAbsolutePath},
scalaJsCliDep.classLoader(jsBuild.context.classLoaderCache))
}
def fastOptJS = link(FastOptJS, fastOptOutput)
def fullOptJS = link(FullOptJS, fullOptOutput)
def fastOptOutput: String = output(FastOptJS)
def fullOptOutput: String = output(FullOptJS)
}
|