xref: /XiangShan/build.sc (revision 78a8cd257caa1ff2b977d80082b1b3a2fa98a1d3)
1c6d43980SLemover/***************************************************************************************
2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory
4c6d43980SLemover*
5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
8c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
9c6d43980SLemover*
10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13c6d43980SLemover*
14c6d43980SLemover* See the Mulan PSL v2 for more details.
15c6d43980SLemover***************************************************************************************/
16c6d43980SLemover
172102afb5SLinJiaweiimport mill._
18718a511dSLinJiaweiimport scalalib._
1972060888SJiawei Linimport $file.`rocket-chip`.common
208891a219SYinan Xuimport $file.`rocket-chip`.cde.common
2172060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build
227f37d55fSTang Haojinimport $file.huancun.common
237f37d55fSTang Haojinimport $file.coupledL2.common
24*78a8cd25Szhanglinjuanimport $file.openLLC.common
252905e463SZihao Yu
26195ef4a5STang Haojinval defaultScalaVersion = "2.13.14"
2772060888SJiawei Lin
28084afb77STang Haojindef defaultVersions(chiselVersion: String) = chiselVersion match {
29084afb77STang Haojin  case "chisel" => Map(
304c46d755SEaston Man    "chisel"        -> ivy"org.chipsalliance::chisel:6.4.0",
314c46d755SEaston Man    "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.4.0",
32195ef4a5STang Haojin    "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:6.0.0"
33c21bff99SJiawei Lin  )
34084afb77STang Haojin  case "chisel3" => Map(
35195ef4a5STang Haojin    "chisel"        -> ivy"edu.berkeley.cs::chisel3:3.6.1",
36195ef4a5STang Haojin    "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.1",
37084afb77STang Haojin    "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:0.6.2"
38084afb77STang Haojin  )
39084afb77STang Haojin}
407f37d55fSTang Haojin
4151e45dbbSTang Haojintrait HasChisel extends SbtModule with Cross.Module[String] {
427f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
437f37d55fSTang Haojin
447f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
457f37d55fSTang Haojin
4651e45dbbSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel"))
477f37d55fSTang Haojin
4851e45dbbSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel-plugin"))
497f37d55fSTang Haojin
507f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
517f37d55fSTang Haojin
527f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
537f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
547f37d55fSTang Haojin
557f37d55fSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
567f37d55fSTang Haojin
577f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
58c21bff99SJiawei Lin}
59c21bff99SJiawei Lin
6051e45dbbSTang Haojinobject rocketchip extends Cross[RocketChip]("chisel", "chisel3")
6172060888SJiawei Lin
627f37d55fSTang Haojintrait RocketChip
637f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
6451e45dbbSTang Haojin    with HasChisel {
657f37d55fSTang Haojin  def scalaVersion: T[String] = T(defaultScalaVersion)
6672060888SJiawei Lin
677f37d55fSTang Haojin  override def millSourcePath = os.pwd / "rocket-chip"
6872060888SJiawei Lin
697f37d55fSTang Haojin  def macrosModule = macros
7072060888SJiawei Lin
7151e45dbbSTang Haojin  def hardfloatModule = hardfloat(crossValue)
7272060888SJiawei Lin
737f37d55fSTang Haojin  def cdeModule = cde
7472060888SJiawei Lin
75195ef4a5STang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0"
767f37d55fSTang Haojin
77195ef4a5STang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7"
787f37d55fSTang Haojin
797f37d55fSTang Haojin  object macros extends Macros
807f37d55fSTang Haojin
817f37d55fSTang Haojin  trait Macros
827f37d55fSTang Haojin    extends millbuild.`rocket-chip`.common.MacrosModule
837f37d55fSTang Haojin      with SbtModule {
847f37d55fSTang Haojin
857f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
867f37d55fSTang Haojin
877f37d55fSTang Haojin    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
882905e463SZihao Yu  }
892905e463SZihao Yu
9051e45dbbSTang Haojin  object hardfloat extends Cross[Hardfloat](crossValue)
912102afb5SLinJiawei
927f37d55fSTang Haojin  trait Hardfloat
937f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
942102afb5SLinJiawei
957f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
96718a511dSLinJiawei
977f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9872060888SJiawei Lin
9972060888SJiawei Lin  }
10072060888SJiawei Lin
1017f37d55fSTang Haojin  object cde extends CDE
10272060888SJiawei Lin
1037f37d55fSTang Haojin  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
104718a511dSLinJiawei
1057f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
1067f37d55fSTang Haojin
1077f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
1087f37d55fSTang Haojin  }
109718a511dSLinJiawei}
110718a511dSLinJiawei
11151e45dbbSTang Haojinobject utility extends Cross[Utility]("chisel", "chisel3")
11251e45dbbSTang Haojintrait Utility extends HasChisel {
1133c02ee8fSwakafa
1143c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1153c02ee8fSwakafa
1163c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
11751e45dbbSTang Haojin    rocketchip(crossValue)
1183c02ee8fSwakafa  )
1197f37d55fSTang Haojin
1207f37d55fSTang Haojin}
1217f37d55fSTang Haojin
1226ce10964SXuan Huobject yunsuan extends Cross[YunSuan]("chisel", "chisel3")
1236ce10964SXuan Hutrait YunSuan extends HasChisel {
1244b0d80d8SXuan Hu
1254b0d80d8SXuan Hu  override def millSourcePath = os.pwd / "yunsuan"
1264b0d80d8SXuan Hu
1274b0d80d8SXuan Hu}
1284b0d80d8SXuan Hu
12951e45dbbSTang Haojinobject huancun extends Cross[HuanCun]("chisel", "chisel3")
13051e45dbbSTang Haojintrait HuanCun extends millbuild.huancun.common.HuanCunModule with HasChisel {
1317f37d55fSTang Haojin
1327f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1337f37d55fSTang Haojin
13451e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1357f37d55fSTang Haojin
13651e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1377f37d55fSTang Haojin
1387f37d55fSTang Haojin}
1397f37d55fSTang Haojin
14051e45dbbSTang Haojinobject coupledL2 extends Cross[CoupledL2]("chisel", "chisel3")
14151e45dbbSTang Haojintrait CoupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel {
1427f37d55fSTang Haojin
1437f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1447f37d55fSTang Haojin
14551e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1467f37d55fSTang Haojin
14751e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1487f37d55fSTang Haojin
14951e45dbbSTang Haojin  def huancunModule: ScalaModule = huancun(crossValue)
1507f37d55fSTang Haojin
1517f37d55fSTang Haojin}
1527f37d55fSTang Haojin
153*78a8cd25Szhanglinjuanobject openLLC extends Cross[OpenLLC]("chisel", "chisel3")
154*78a8cd25Szhanglinjuantrait OpenLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel {
155*78a8cd25Szhanglinjuan
156*78a8cd25Szhanglinjuan  override def millSourcePath = os.pwd / "openLLC"
157*78a8cd25Szhanglinjuan
158*78a8cd25Szhanglinjuan  def coupledL2Module: ScalaModule = coupledL2(crossValue)
159*78a8cd25Szhanglinjuan
160*78a8cd25Szhanglinjuan  def rocketModule: ScalaModule = rocketchip(crossValue)
161*78a8cd25Szhanglinjuan
162*78a8cd25Szhanglinjuan  def utilityModule: ScalaModule = utility(crossValue)
163*78a8cd25Szhanglinjuan}
164*78a8cd25Szhanglinjuan
16551e45dbbSTang Haojinobject difftest extends Cross[Difftest]("chisel", "chisel3")
16651e45dbbSTang Haojintrait Difftest extends HasChisel {
1677f37d55fSTang Haojin
1687f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1697f37d55fSTang Haojin
1707f37d55fSTang Haojin}
1717f37d55fSTang Haojin
17251e45dbbSTang Haojinobject fudian extends Cross[FuDian]("chisel", "chisel3")
17351e45dbbSTang Haojintrait FuDian extends HasChisel {
1747f37d55fSTang Haojin
1757f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1767f37d55fSTang Haojin
1773c02ee8fSwakafa}
1783c02ee8fSwakafa
17972060888SJiawei Lin// extends this trait to use XiangShan in other projects
1807f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
18172060888SJiawei Lin
1827f37d55fSTang Haojin  def rocketModule: ScalaModule
18372060888SJiawei Lin
1847f37d55fSTang Haojin  def difftestModule: ScalaModule
185718a511dSLinJiawei
1867f37d55fSTang Haojin  def huancunModule: ScalaModule
187718a511dSLinJiawei
1887f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1897f37d55fSTang Haojin
190*78a8cd25Szhanglinjuan  def openLLCModule: ScalaModule
191*78a8cd25Szhanglinjuan
1927f37d55fSTang Haojin  def fudianModule: ScalaModule
1937f37d55fSTang Haojin
1947f37d55fSTang Haojin  def utilityModule: ScalaModule
19572060888SJiawei Lin
19683ba63b3SXuan Hu  def yunsuanModule: ScalaModule
197718a511dSLinJiawei
198c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
19972060888SJiawei Lin    rocketModule,
20072060888SJiawei Lin    difftestModule,
20172060888SJiawei Lin    huancunModule,
20215ee59e4Swakafa    coupledL2Module,
203*78a8cd25Szhanglinjuan    openLLCModule,
20430056234SZhangZifei    yunsuanModule,
2053c02ee8fSwakafa    fudianModule,
2067f37d55fSTang Haojin    utilityModule,
207c5f31b5bSLinJiawei  )
2082905e463SZihao Yu
2094b0d80d8SXuan Hu  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2104b0d80d8SXuan Hu  val envPATH = sys.env("PATH") + ":" + resourcesPATH
2116f021e01SJiawei Lin
2124b0d80d8SXuan Hu  override def forkEnv = Map("PATH" -> envPATH)
2137f37d55fSTang Haojin}
2147f37d55fSTang Haojin
21551e45dbbSTang Haojinobject xiangshan extends Cross[XiangShan]("chisel", "chisel3")
21651e45dbbSTang Haojintrait XiangShan extends XiangShanModule with HasChisel {
2177f37d55fSTang Haojin
21851e45dbbSTang Haojin  override def millSourcePath = os.pwd
2197f37d55fSTang Haojin
22051e45dbbSTang Haojin  def rocketModule = rocketchip(crossValue)
2217f37d55fSTang Haojin
22251e45dbbSTang Haojin  def difftestModule = difftest(crossValue)
2237f37d55fSTang Haojin
22451e45dbbSTang Haojin  def huancunModule = huancun(crossValue)
2257f37d55fSTang Haojin
22651e45dbbSTang Haojin  def coupledL2Module = coupledL2(crossValue)
2277f37d55fSTang Haojin
228*78a8cd25Szhanglinjuan  def openLLCModule = openLLC(crossValue)
229*78a8cd25Szhanglinjuan
23051e45dbbSTang Haojin  def fudianModule = fudian(crossValue)
2317f37d55fSTang Haojin
23251e45dbbSTang Haojin  def utilityModule = utility(crossValue)
2337f37d55fSTang Haojin
2346ce10964SXuan Hu  def yunsuanModule = yunsuan(crossValue)
23583ba63b3SXuan Hu
2365fca38ffSXuan Hu  override def forkArgs = Seq("-Xmx40G", "-Xss256m")
2377f37d55fSTang Haojin
23851e45dbbSTang Haojin  override def sources = T.sources {
2395931ace3STang Haojin    super.sources() ++ Seq(PathRef(millSourcePath / "src" / crossValue / "main" / "scala"))
240fc85214eSLinJiawei  }
241718a511dSLinJiawei
24283ba63b3SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(
2436ce10964SXuan Hu    defaultVersions(crossValue)("chiseltest"),
24483ba63b3SXuan Hu  )
24583ba63b3SXuan Hu
2462905e463SZihao Yu  object test extends SbtModuleTests with TestModule.ScalaTest {
2475fca38ffSXuan Hu    override def forkArgs = Seq("-Xmx40G", "-Xss256m")
24851e45dbbSTang Haojin
24951e45dbbSTang Haojin    override def sources = T.sources {
250195ef4a5STang Haojin      super.sources() ++ Seq(PathRef(this.millSourcePath / "src" / crossValue / "test" / "scala"))
25151e45dbbSTang Haojin    }
2522905e463SZihao Yu
2532905e463SZihao Yu    override def ivyDeps = super.ivyDeps() ++ Agg(
25451e45dbbSTang Haojin      defaultVersions(crossValue)("chiseltest")
2556aea7ec5SLinJiawei    )
2564364f1d0SHaojin Tang
2574364f1d0SHaojin Tang    val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2584364f1d0SHaojin Tang    val envPATH = sys.env("PATH") + ":" + resourcesPATH
2594364f1d0SHaojin Tang
2604364f1d0SHaojin Tang    override def forkEnv = Map("PATH" -> envPATH)
2612905e463SZihao Yu  }
2622905e463SZihao Yu}
263