astral-compiler/build.sc

118 lines
3 KiB
Scala

import mill._
import mill.scalalib._
import mill.scalalib.publish._
import $ivy.`com.lihaoyi::mill-contrib-twirllib:`, mill.twirllib._
object astral extends Module
{
def scalaVersion = "3.3.0"
def compile = compiler.compile
object compiler extends ScalaModule
with PublishModule
with TwirlModule
{
val VERSION = "0.0.1-SNAPSHOT"
def scalaVersion = astral.scalaVersion
def twirlScalaVersion = scalaVersion
def twirlVersion = "1.6.0-RC4"
def mainClass = Some("com.astraldb.Astral")
def generatedSources = T{ Seq(compileTwirl().classes) }
/*************************************************
*** Twirl Config
*************************************************/
def twirlFormats = super.twirlFormats() ++ Map(
"scala" -> "play.twirl.api.TxtFormat"
)
/*************************************************
*** Backend Dependencies
*************************************************/
def ivyDeps = Agg(
ivy"com.typesafe.play::twirl-api::${twirlVersion()}"
)
def publishVersion = VERSION
override def pomSettings = PomSettings(
description = "The Astral Compiler Compiler",
organization = "com.astraldb",
url = "http://astraldb.com",
licenses = Seq(License.`Apache-2.0`),
versionControl = VersionControl.github("UBOdin", "astral"),
developers = Seq(
Developer("okennedy", "Oliver Kennedy", "https://odin.cse.buffalo.edu"),
)
)
}
object catalyst extends ScalaModule
{
def scalaVersion = astral.scalaVersion
def mainClass = Some("com.astraldb.catalyst.Astral")
def moduleDeps = Seq(astral.compiler)
def outputClasspath = T{
Seq[PathRef](compile().classes) ++
compileClasspath() ++
resources()
}
def rendered = T {
val target = T.dest
val files = scala.collection.mutable.Buffer[String]()
os.proc(
"scala",
"-cp",
outputClasspath().mkString(":"),
"com.astraldb.catalyst.Generate",
target
).call(
cwd = target,
stdout = os.ProcessOutput.Readlines(
line => files += line
),
stderr = os.ProcessOutput.Readlines(
println(_)
)
)
for(f <- files)
{
println(s"GOT : $f")
}
/* return */
files.map {
file => PathRef(target / file)
}.toSeq
}
def render(args: String*) = T.command {
for(file <- rendered())
{
println(s"\n\n//////////// ${file.path.baseName} ///////////////")
println(os.read(file.path))
}
}
object impl extends ScalaModule
{
def scalaVersion = "2.13.8"
def generatedSources = T{ astral.catalyst.rendered() }
def moduleDeps = Seq(astral.compiler, astral.catalyst)
def ivyDeps = Agg(
ivy"org.apache.spark::spark-sql::3.4.1",
)
}
}
}