1import mill._ 2import mill.modules.Util 3import scalalib._ 4import $ivy.`com.lihaoyi::mill-contrib-buildinfo:$MILL_VERSION` 5import $ivy.`com.lihaoyi::mill-contrib-bsp:$MILL_VERSION` 6import mill.contrib.buildinfo.BuildInfo 7import $file.chisel3.build 8import $file.firrtl.build 9import $file.treadle.build 10import $file.chiseltest.build 11import $file.`berkeley-hardfloat`.build 12import $file.`rocket-chip`.common 13import $file.`api-config-chipsalliance`.`build-rules`.mill.build 14 15val sv = "2.12.12" 16 17object myfirrtl extends firrtl.build.firrtlCrossModule(sv) { 18 override def millSourcePath = os.pwd / "firrtl" 19} 20 21object mychisel3 extends chisel3.build.chisel3CrossModule(sv) { 22 override def millSourcePath = os.pwd / "chisel3" 23 24 def firrtlModule: Option[PublishModule] = Some(myfirrtl) 25 26 def treadleModule: Option[PublishModule] = Some(mytreadle) 27} 28 29object mytreadle extends treadle.build.treadleCrossModule(sv) { 30 override def millSourcePath = os.pwd / "treadle" 31 32 def firrtlModule: Option[PublishModule] = Some(myfirrtl) 33} 34 35object mychiseltest extends chiseltest.build.chiseltestCrossModule(sv) { 36 override def scalaVersion = sv 37 override def millSourcePath = os.pwd / "chiseltest" 38 def chisel3Module: Option[PublishModule] = Some(mychisel3) 39 def treadleModule: Option[PublishModule] = Some(mytreadle) 40} 41 42object myhardfloat extends `berkeley-hardfloat`.build.hardfloat { 43 override def scalaVersion = sv 44 45 def chisel3Module: Option[PublishModule] = Some(mychisel3) 46} 47 48object myconfig extends `api-config-chipsalliance`.`build-rules`.mill.build.config with PublishModule { 49 override def scalaVersion = sv 50 51 override def millSourcePath = os.pwd / "api-config-chipsalliance" / "design" / "craft" 52 53 override def pomSettings = T { 54 myrocketchip.pomSettings() 55 } 56 57 override def publishVersion = T { 58 myrocketchip.publishVersion() 59 } 60} 61 62object myrocketchip extends `rocket-chip`.common.CommonRocketChip { 63 override def scalaVersion = sv 64 65 override def millSourcePath = os.pwd / "rocket-chip" 66 67 def chisel3Module: Option[PublishModule] = Some(mychisel3) 68 69 def hardfloatModule: PublishModule = myhardfloat 70 71 def configModule: PublishModule = myconfig 72} 73 74 75trait CommonModule extends ScalaModule { 76 override def scalaVersion = sv 77 78 override def scalacOptions = Seq("-Xsource:2.11") 79 80 override def moduleDeps: Seq[ScalaModule] = Seq(mychisel3) 81 82 private val macroParadise = ivy"org.scalamacros:::paradise:2.1.1" 83 84 override def compileIvyDeps = Agg(macroParadise) 85 86 override def scalacPluginIvyDeps = Agg(macroParadise) 87} 88 89object myinclusivecache extends CommonModule { 90 override def millSourcePath = os.pwd / "block-inclusivecache-sifive" / "design" / "craft" / "inclusivecache" 91 92 override def moduleDeps = super.moduleDeps ++ Seq(myrocketchip) 93} 94 95object myblocks extends CommonModule with SbtModule { 96 override def moduleDeps = super.moduleDeps ++ Seq(myrocketchip) 97} 98 99object XiangShan extends CommonModule with SbtModule { 100 override def millSourcePath = millOuterCtx.millSourcePath 101 override def forkArgs = Seq("-Xmx10G") 102 override def moduleDeps = super.moduleDeps ++ Seq( 103 myrocketchip, 104 myinclusivecache, 105 ) 106 107 object test extends Tests { 108 override def ivyDeps = Agg( 109 ivy"org.scalatest::scalatest:3.2.0", 110 ) 111 override def moduleDeps = super.moduleDeps ++ Seq( 112 mychiseltest 113 ) 114 def testFrameworks = Seq( 115 "org.scalatest.tools.Framework" 116 ) 117 def testOnly(args: String*) = T.command { 118 super.runMain("org.scalatest.tools.Runner", args: _*) 119 } 120 } 121} 122