Files
gps/dependencies/chisel/build.sc
T
2026-07-12 11:01:51 +03:00

279 lines
7.7 KiB
Python

import mill._
import mill.scalalib._
import mill.scalalib.TestModule._
import mill.scalalib.publish._
import mill.scalalib.scalafmt._
import coursier.maven.MavenRepository
import mill.scalalib.api.ZincWorkerUtil.matchingVersions
import $file.common
object v {
val pluginScalaCrossVersions = Seq(
"2.13.11",
"2.13.12"
)
val scalaCrossVersions = Seq(
"2.13.12"
)
val osLib = ivy"com.lihaoyi::os-lib:0.9.1"
val upickle = ivy"com.lihaoyi::upickle:3.1.0"
val scalatest = ivy"org.scalatest::scalatest:3.2.14"
val scalacheck = ivy"org.scalatestplus::scalacheck-1-15:3.2.11.0"
val json4s = ivy"org.json4s::json4s-native:4.0.6"
val dataclass = ivy"io.github.alexarchambault::data-class:0.2.5"
val commonText = ivy"org.apache.commons:commons-text:1.10.0"
val scopt = ivy"com.github.scopt::scopt:3.7.1"
def scalaReflect(scalaVersion: String) = ivy"org.scala-lang:scala-reflect:$scalaVersion"
def scalaCompiler(scalaVersion: String) = ivy"org.scala-lang:scala-compiler:$scalaVersion"
def scalaLibrary(scalaVersion: String) = ivy"org.scala-lang:scala-library:$scalaVersion"
}
object firrtl extends Cross[Firrtl](v.scalaCrossVersions)
trait Firrtl
extends common.FirrtlModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "firrtl"
def osLibModuleIvy = v.osLib
def json4sIvy = v.json4s
def dataclassIvy = v.dataclass
def commonTextIvy = v.commonText
def scoptIvy = v.scopt
}
object svsim extends Cross[Svsim](v.scalaCrossVersions)
trait Svsim
extends common.SvsimModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "svsim"
}
object firrtlut extends Cross[FirrtlUnitTest](v.scalaCrossVersions)
trait FirrtlUnitTest
extends common.FirrtlUnitTestModule
with CrossModuleBase
with ScalafmtModule {
override def millSourcePath = firrtl(crossScalaVersion).millSourcePath
def firrtlModule = firrtl(crossScalaVersion)
def scalatestIvy = v.scalatest
def scalacheckIvy = v.scalacheck
override def sources = T.sources {
Seq(PathRef(millSourcePath / "src" / "test")) ++
matchingVersions(crossScalaVersion).map(s => PathRef(millSourcePath / "src" / "test" / s"scala-$s"))
}
}
object macros extends Cross[Macros](v.scalaCrossVersions)
trait Macros
extends common.MacrosModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "macros"
def scalaReflectIvy = v.scalaReflect(crossScalaVersion)
}
object core extends Cross[Core](v.scalaCrossVersions)
trait Core
extends common.CoreModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "core"
def firrtlModule = firrtl(crossScalaVersion)
def macrosModule = macros(crossScalaVersion)
def osLibModuleIvy = v.osLib
def upickleModuleIvy = v.upickle
def firtoolVersion = T {
import scala.sys.process._
val Version = """^CIRCT firtool-(\S+)$""".r
try {
val lines = Process(Seq("firtool", "--version")).lineStream
lines.collectFirst {
case Version(v) => Some(v)
case _ => None
}.get
} catch {
case e: java.io.IOException => None
}
}
def buildVersion = T("build-from-source")
private def generateBuildInfo = T {
val outputFile = T.dest / "chisel3" / "BuildInfo.scala"
val firtoolVersionString = firtoolVersion().map("Some(" + _ + ")").getOrElse("None")
val contents =
s"""
|package chisel3
|case object BuildInfo {
| val buildInfoPackage: String = "${artifactName()}"
| val version: String = "${buildVersion()}"
| val scalaVersion: String = "${scalaVersion()}"
| val firtoolVersion: scala.Option[String] = $firtoolVersionString
| override val toString: String = {
| "buildInfoPackage: %s, version: %s, scalaVersion: %s, firtoolVersion %s".format(
| buildInfoPackage, version, scalaVersion, firtoolVersion
| )
| }
|}
|""".stripMargin
os.write(outputFile, contents, createFolders = true)
PathRef(T.dest)
}
override def generatedSources = T {
super.generatedSources() :+ generateBuildInfo()
}
}
object plugin extends Cross[Plugin](v.pluginScalaCrossVersions)
trait Plugin
extends common.PluginModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "plugin"
def scalaLibraryIvy = v.scalaLibrary(crossScalaVersion)
def scalaReflectIvy = v.scalaReflect(crossScalaVersion)
def scalaCompilerIvy: Dep = v.scalaCompiler(crossScalaVersion)
}
object chisel extends Cross[Chisel](v.scalaCrossVersions)
trait Chisel
extends common.ChiselModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
override def millSourcePath = super.millSourcePath / os.up
def svsimModule = svsim(crossScalaVersion)
def macrosModule = macros(crossScalaVersion)
def coreModule = core(crossScalaVersion)
def pluginModule = plugin(crossScalaVersion)
}
object chiselut extends Cross[ChiselUnitTest](v.scalaCrossVersions)
trait ChiselUnitTest
extends common.ChiselUnitTestModule
with CrossModuleBase
with ScalafmtModule {
override def millSourcePath = chisel(crossScalaVersion).millSourcePath
def chiselModule = chisel(crossScalaVersion)
def pluginModule = plugin(crossScalaVersion)
def scalatestIvy = v.scalatest
def scalacheckIvy = v.scalacheck
override def sources = T.sources {
Seq(PathRef(millSourcePath / "src" / "test")) ++
matchingVersions(crossScalaVersion).map(s => PathRef(millSourcePath / "src" / "test" / s"scala-$s"))
}
}
object stdlib extends Cross[Stdlib](v.scalaCrossVersions)
trait Stdlib
extends common.StdLibModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "stdlib"
def chiselModule = chisel(crossScalaVersion)
def pluginModule = plugin(crossScalaVersion)
}
trait ChiselPublishModule extends PublishModule {
def pomSettings = PomSettings(
description = artifactName(),
organization = "org.chipsalliance",
url = "https://www.chisel-lang.org",
licenses = Seq(License.`Apache-2.0`),
versionControl = VersionControl.github("chipsalliance", "chisel"),
developers = Seq()
)
def publishVersion = "5.0-SNAPSHOT"
}
object circtpanamabinder extends Cross[CIRCTPanamaBinder](v.scalaCrossVersions)
trait CIRCTPanamaBinder
extends common.CIRCTPanamaBinderModule
with ChiselPublishModule
with CrossSbtModule
with ScalafmtModule {
def millSourcePath = super.millSourcePath / os.up / "binder"
def header = T(PathRef(millSourcePath / "jextract-headers.h"))
def circtInstallPath = T(os.Path(T.ctx.env.get("CIRCT_INSTALL_PATH").getOrElse("/usr/local")))
def includePaths = T(Seq(PathRef(circtInstallPath() / "include")))
def libraryPaths = T(Seq(PathRef(circtInstallPath() / "lib")))
def chiselModule = chisel(crossScalaVersion)
def pluginModule = plugin(crossScalaVersion)
}
object bindertest extends Cross[CIRCTPanamaBinderModuleTest](v.scalaCrossVersions)
trait CIRCTPanamaBinderModuleTest
extends common.CIRCTPanamaBinderModuleTestModule
with CrossModuleBase
with ScalafmtModule {
override def millSourcePath = circtpanamabinder(crossScalaVersion).millSourcePath
def circtPanamaBinderModule = circtpanamabinder(crossScalaVersion)
def scalatestIvy = v.scalatest
def scalacheckIvy = v.scalacheck
override def sources = T.sources {
Seq(PathRef(millSourcePath / "src" / "test"))
}
}