summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.sc135
1 files changed, 88 insertions, 47 deletions
diff --git a/build.sc b/build.sc
index 8ae21352..20fa9edd 100644
--- a/build.sc
+++ b/build.sc
@@ -1,4 +1,3 @@
-// Build script for mill 0.6.0
import mill._
import mill.scalalib._
import mill.scalalib.publish._
@@ -30,33 +29,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
-
- def scalaVersion = crossVersion
+ protected def majorVersion = crossScalaVersion.split('.')(1).toInt
- 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")
)
@@ -71,12 +66,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"
@@ -96,24 +95,35 @@ 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 =>
+ /** Default behavior assumes `build.sc` in the upper path of `src`.
+ * This override makes `src` folder stay with `build.sc` in the same directory,
+ * If chisel3 is used as a sub-project, [[millSourcePath]] should be overridden to the folder where `src` located.
+ */
+ override def millSourcePath = super.millSourcePath / os.up
- def crossVersion = crossVersionValue
+ override def mainClass = T {
+ Some("chisel3.stage.ChiselMain")
+ }
- def mainClass = Some("chisel3.stage.ChiselMain")
+ override def moduleDeps = super.moduleDeps ++ Seq(macros, core)
- override def moduleDeps = super.moduleDeps ++ Seq(macros, core) ++ firrtlModule
+ override def scalacPluginClasspath = T {
+ super.scalacPluginClasspath() ++ Agg(
+ plugin.jar()
+ )
+ }
object test extends Tests {
+ override def scalacPluginClasspath: T[Loose.Agg[PathRef]] = m.scalacPluginClasspath
+
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"
@@ -121,7 +131,9 @@ class chisel3CrossModule(crossVersionValue: String) extends CommonModule with Pu
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"
@@ -132,7 +144,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(),
@@ -141,33 +153,62 @@ class chisel3CrossModule(crossVersionValue: String) extends CommonModule with Pu
}
object macros extends CommonModule {
- def firrtlModule = m.firrtlModule
+ /** millOuterCtx.segment.pathSegments didn't detect error here. */
+ override def millSourcePath = m.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 {
+ /** millOuterCtx.segment.pathSegments didn't detect error here. */
+ override def millSourcePath = m.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 {
+ /** millOuterCtx.segment.pathSegments didn't detect error here. */
+ override def millSourcePath = m.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"
}