Skip to content

Commit

Permalink
add chisel plugin to mill build system.
Browse files Browse the repository at this point in the history
  • Loading branch information
sequencer committed Aug 29, 2020
1 parent 7e02ce9 commit 062cb91
Showing 1 changed file with 82 additions and 46 deletions.
128 changes: 82 additions & 46 deletions build.sc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Build script for mill 0.6.0

import mill._
import mill.scalalib._
import mill.scalalib.publish._
Expand Down Expand Up @@ -30,33 +31,29 @@ def getTestVersion(dep: String, org: String = "edu.berkeley.cs") = {
}

// Since chisel contains submodule core and macros, a CommonModule is needed
trait CommonModule extends ScalaModule with SbtModule with PublishModule {
trait CommonModule extends CrossSbtModule with PublishModule {
def firrtlModule: Option[PublishModule] = None

def firrtlIvyDeps = if(firrtlModule.isEmpty) Agg(
def firrtlIvyDeps = if (firrtlModule.isEmpty) Agg(
getVersion("firrtl")
) else Agg.empty[Dep]

def treadleModule: Option[PublishModule] = None
def treadleIvyDeps = if(treadleModule.isEmpty) Agg(

def treadleIvyDeps = if (treadleModule.isEmpty) Agg(
getTestVersion("treadle")
) else Agg.empty[Dep]

def moduleDeps = super.moduleDeps ++ firrtlModule

def ivyDeps = super.ivyDeps() ++ firrtlIvyDeps
override def moduleDeps = super.moduleDeps ++ firrtlModule

override def ivyDeps = super.ivyDeps() ++ firrtlIvyDeps

def publishVersion = "3.4-SNAPSHOT"

// 2.12.10 -> Array("2", "12", "10") -> "12" -> 12
protected def majorVersion = crossVersion.split('.')(1).toInt

def crossVersion: String
protected def majorVersion = crossScalaVersion.split('.')(1).toInt

def scalaVersion = crossVersion

def repositories() = super.repositories ++ Seq(
override def repositories = super.repositories ++ Seq(
MavenRepository("https://oss.sonatype.org/content/repositories/snapshots"),
MavenRepository("https://oss.sonatype.org/content/repositories/releases")
)
Expand All @@ -71,12 +68,16 @@ trait CommonModule extends ScalaModule with SbtModule with PublishModule {
case _ => Seq("-source", "1.8", "-target", "1.8")
}

override def scalacOptions = super.scalacOptions() ++ Agg(
"-deprecation",
"-feature"
) ++ scalacCrossOptions

override def javacOptions = super.javacOptions() ++ javacCrossOptions
override def scalacOptions = T {
super.scalacOptions() ++ Agg(
"-deprecation",
"-feature"
) ++ scalacCrossOptions
}

override def javacOptions = T {
super.javacOptions() ++ javacCrossOptions
}

private val macroParadise = ivy"org.scalamacros:::paradise:2.1.1"

Expand All @@ -96,32 +97,41 @@ trait CommonModule extends ScalaModule with SbtModule with PublishModule {
)
}

class chisel3CrossModule(crossVersionValue: String) extends CommonModule with PublishModule with BuildInfo { m =>
// different scala version shares same sources
// mill use foo/2.11.12 foo/2.12.12 as millSourcePath by default
override def millSourcePath = super.millSourcePath / os.up / os.up
class chisel3CrossModule(val crossScalaVersion: String) extends CommonModule with BuildInfo {
m =>
override def mainClass = T {
Some("chisel3.stage.ChiselMain")
}

def crossVersion = crossVersionValue
override def moduleDeps = super.moduleDeps ++ Seq(macros, core)

def mainClass = Some("chisel3.stage.ChiselMain")
override def scalacPluginClasspath = super.scalacPluginClasspath() ++ Agg(
plugin.jar()
)

override def moduleDeps = super.moduleDeps ++ Seq(macros, core) ++ firrtlModule
override def scalacOptions = T {
super.scalacOptions() ++ Seq(
s"-Xplugin:${plugin.jar().path}"
)
}

object test extends Tests {
private def ivyCrossDeps = majorVersion match {
case i if i < 12 => Agg(ivy"junit:junit:4.13")
case _ => Agg()
}
def ivyDeps = m.ivyDeps() ++ Agg(

override def ivyDeps = m.ivyDeps() ++ Agg(
ivy"org.scalatest::scalatest:3.1.2",
ivy"org.scalatestplus::scalacheck-1-14:3.1.1.1",
ivy"com.github.scopt::scopt:3.7.1"
) ++ ivyCrossDeps ++ m.treadleIvyDeps

override def moduleDeps = super.moduleDeps ++ treadleModule

def testFrameworks = Seq("org.scalatest.tools.Framework")
def testFrameworks = T {
Seq("org.scalatest.tools.Framework")
}

// a sbt-like testOnly command.
// for example, mill -i "chisel3[2.12.12].test.testOnly" "chiselTests.BitwiseOpsSpec"
Expand All @@ -132,7 +142,7 @@ class chisel3CrossModule(crossVersionValue: String) extends CommonModule with Pu

override def buildInfoPackageName = Some("chisel3")

override def buildInfoMembers: T[Map[String, String]] = T {
override def buildInfoMembers = T {
Map(
"buildInfoPackage" -> artifactName(),
"version" -> publishVersion(),
Expand All @@ -141,33 +151,59 @@ class chisel3CrossModule(crossVersionValue: String) extends CommonModule with Pu
}

object macros extends CommonModule {
def firrtlModule = m.firrtlModule
override def millSourcePath = super.millSourcePath / "macros"

def crossVersion = crossVersionValue
override def crossScalaVersion = m.crossScalaVersion

override def firrtlModule = m.firrtlModule
}

object core extends CommonModule {
def firrtlModule = m.firrtlModule
object core extends CommonModule {
override def millSourcePath = super.millSourcePath / "core"

def crossVersion = crossVersionValue
override def crossScalaVersion = m.crossScalaVersion

def moduleDeps = super.moduleDeps ++ Seq(macros)
override def moduleDeps = super.moduleDeps ++ Seq(macros)

def scalacOptions = super.scalacOptions() ++ Seq(
"-deprecation",
"-explaintypes",
"-feature",
"-language:reflectiveCalls",
"-unchecked",
"-Xcheckinit",
"-Xlint:infer-any"
)
override def firrtlModule = m.firrtlModule

def scalacOptions = T {
super.scalacOptions() ++ Seq(
"-deprecation",
"-explaintypes",
"-feature",
"-language:reflectiveCalls",
"-unchecked",
"-Xcheckinit",
"-Xlint:infer-any"
)
}

override def generatedSources = T {
Seq(generatedBuildInfo()._2)
}
}

object plugin extends CommonModule {
override def millSourcePath = super.millSourcePath / "plugin"

override def crossScalaVersion = m.crossScalaVersion

override def firrtlModule = m.firrtlModule

override def ivyDeps = Agg(
ivy"${scalaOrganization()}:scala-library:$crossScalaVersion"
)

def scalacOptions = T {
Seq(
"-Xfatal-warnings"
)
}

override def artifactName = "chisel3-plugin"
}

// make mill publish sbt compatible package
def artifactName = "chisel3"
override def artifactName = "chisel3"
}

0 comments on commit 062cb91

Please sign in to comment.