xref: /XiangShan/build.sc (revision 3fce4f48e1f4c43253ff1758dbd05b8b71627990)
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