diff options
| author | Jiuyang Liu | 2020-09-03 03:57:42 +0800 |
|---|---|---|
| committer | GitHub | 2020-09-02 19:57:42 +0000 |
| commit | 29a71e05ea075df860b98ac556257aa9ee7c5722 (patch) | |
| tree | 449815e85c0b8b29371f14ce778c458e5053acbb /build.sc | |
| parent | 7e02ce979228771edc63b136499d8c1b84ffc367 (diff) | |
Add chisel plugin to mill build system. (#1572)
* add chisel plugin to mill build system.
* update for review.
Diffstat (limited to 'build.sc')
| -rw-r--r-- | build.sc | 135 |
1 files changed, 88 insertions, 47 deletions
@@ -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" } |
