xref: /XiangShan/build.sc (revision 195ef4a53ab54326d879e884c4e1568f424f2668)
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
242905e463SZihao Yu
25*195ef4a5STang Haojinval defaultScalaVersion = "2.13.14"
2672060888SJiawei Lin
27084afb77STang Haojindef defaultVersions(chiselVersion: String) = chiselVersion match {
28084afb77STang Haojin  case "chisel" => Map(
294c46d755SEaston Man    "chisel"        -> ivy"org.chipsalliance::chisel:6.4.0",
304c46d755SEaston Man    "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.4.0",
31*195ef4a5STang Haojin    "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:6.0.0"
32c21bff99SJiawei Lin  )
33084afb77STang Haojin  case "chisel3" => Map(
34*195ef4a5STang Haojin    "chisel"        -> ivy"edu.berkeley.cs::chisel3:3.6.1",
35*195ef4a5STang Haojin    "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.1",
36084afb77STang Haojin    "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:0.6.2"
37084afb77STang Haojin  )
38084afb77STang Haojin}
397f37d55fSTang Haojin
4051e45dbbSTang Haojintrait HasChisel extends SbtModule with Cross.Module[String] {
417f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
427f37d55fSTang Haojin
437f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
447f37d55fSTang Haojin
4551e45dbbSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel"))
467f37d55fSTang Haojin
4751e45dbbSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel-plugin"))
487f37d55fSTang Haojin
497f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
507f37d55fSTang Haojin
517f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
527f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
537f37d55fSTang Haojin
547f37d55fSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
557f37d55fSTang Haojin
567f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
57c21bff99SJiawei Lin}
58c21bff99SJiawei Lin
5951e45dbbSTang Haojinobject rocketchip extends Cross[RocketChip]("chisel", "chisel3")
6072060888SJiawei Lin
617f37d55fSTang Haojintrait RocketChip
627f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
6351e45dbbSTang Haojin    with HasChisel {
647f37d55fSTang Haojin  def scalaVersion: T[String] = T(defaultScalaVersion)
6572060888SJiawei Lin
667f37d55fSTang Haojin  override def millSourcePath = os.pwd / "rocket-chip"
6772060888SJiawei Lin
687f37d55fSTang Haojin  def macrosModule = macros
6972060888SJiawei Lin
7051e45dbbSTang Haojin  def hardfloatModule = hardfloat(crossValue)
7172060888SJiawei Lin
727f37d55fSTang Haojin  def cdeModule = cde
7372060888SJiawei Lin
74*195ef4a5STang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0"
757f37d55fSTang Haojin
76*195ef4a5STang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7"
777f37d55fSTang Haojin
787f37d55fSTang Haojin  object macros extends Macros
797f37d55fSTang Haojin
807f37d55fSTang Haojin  trait Macros
817f37d55fSTang Haojin    extends millbuild.`rocket-chip`.common.MacrosModule
827f37d55fSTang Haojin      with SbtModule {
837f37d55fSTang Haojin
847f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
857f37d55fSTang Haojin
867f37d55fSTang Haojin    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
872905e463SZihao Yu  }
882905e463SZihao Yu
8951e45dbbSTang Haojin  object hardfloat extends Cross[Hardfloat](crossValue)
902102afb5SLinJiawei
917f37d55fSTang Haojin  trait Hardfloat
927f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
932102afb5SLinJiawei
947f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
95718a511dSLinJiawei
967f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9772060888SJiawei Lin
9872060888SJiawei Lin  }
9972060888SJiawei Lin
1007f37d55fSTang Haojin  object cde extends CDE
10172060888SJiawei Lin
1027f37d55fSTang Haojin  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
103718a511dSLinJiawei
1047f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
1057f37d55fSTang Haojin
1067f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
1077f37d55fSTang Haojin  }
108718a511dSLinJiawei}
109718a511dSLinJiawei
11051e45dbbSTang Haojinobject utility extends Cross[Utility]("chisel", "chisel3")
11151e45dbbSTang Haojintrait Utility extends HasChisel {
1123c02ee8fSwakafa
1133c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1143c02ee8fSwakafa
1153c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
11651e45dbbSTang Haojin    rocketchip(crossValue)
1173c02ee8fSwakafa  )
1187f37d55fSTang Haojin
1197f37d55fSTang Haojin}
1207f37d55fSTang Haojin
1216ce10964SXuan Huobject yunsuan extends Cross[YunSuan]("chisel", "chisel3")
1226ce10964SXuan Hutrait YunSuan extends HasChisel {
1234b0d80d8SXuan Hu
1244b0d80d8SXuan Hu  override def millSourcePath = os.pwd / "yunsuan"
1254b0d80d8SXuan Hu
1264b0d80d8SXuan Hu}
1274b0d80d8SXuan Hu
12851e45dbbSTang Haojinobject huancun extends Cross[HuanCun]("chisel", "chisel3")
12951e45dbbSTang Haojintrait HuanCun extends millbuild.huancun.common.HuanCunModule with HasChisel {
1307f37d55fSTang Haojin
1317f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1327f37d55fSTang Haojin
13351e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1347f37d55fSTang Haojin
13551e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1367f37d55fSTang Haojin
1377f37d55fSTang Haojin}
1387f37d55fSTang Haojin
13951e45dbbSTang Haojinobject coupledL2 extends Cross[CoupledL2]("chisel", "chisel3")
14051e45dbbSTang Haojintrait CoupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel {
1417f37d55fSTang Haojin
1427f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1437f37d55fSTang Haojin
14451e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1457f37d55fSTang Haojin
14651e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1477f37d55fSTang Haojin
14851e45dbbSTang Haojin  def huancunModule: ScalaModule = huancun(crossValue)
1497f37d55fSTang Haojin
1507f37d55fSTang Haojin}
1517f37d55fSTang Haojin
15251e45dbbSTang Haojinobject difftest extends Cross[Difftest]("chisel", "chisel3")
15351e45dbbSTang Haojintrait Difftest extends HasChisel {
1547f37d55fSTang Haojin
1557f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1567f37d55fSTang Haojin
1577f37d55fSTang Haojin}
1587f37d55fSTang Haojin
15951e45dbbSTang Haojinobject fudian extends Cross[FuDian]("chisel", "chisel3")
16051e45dbbSTang Haojintrait FuDian extends HasChisel {
1617f37d55fSTang Haojin
1627f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1637f37d55fSTang Haojin
1643c02ee8fSwakafa}
1653c02ee8fSwakafa
16672060888SJiawei Lin// extends this trait to use XiangShan in other projects
1677f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
16872060888SJiawei Lin
1697f37d55fSTang Haojin  def rocketModule: ScalaModule
17072060888SJiawei Lin
1717f37d55fSTang Haojin  def difftestModule: ScalaModule
172718a511dSLinJiawei
1737f37d55fSTang Haojin  def huancunModule: ScalaModule
174718a511dSLinJiawei
1757f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1767f37d55fSTang Haojin
1777f37d55fSTang Haojin  def fudianModule: ScalaModule
1787f37d55fSTang Haojin
1797f37d55fSTang Haojin  def utilityModule: ScalaModule
18072060888SJiawei Lin
18183ba63b3SXuan Hu  def yunsuanModule: ScalaModule
182718a511dSLinJiawei
183c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
18472060888SJiawei Lin    rocketModule,
18572060888SJiawei Lin    difftestModule,
18672060888SJiawei Lin    huancunModule,
18715ee59e4Swakafa    coupledL2Module,
18830056234SZhangZifei    yunsuanModule,
1893c02ee8fSwakafa    fudianModule,
1907f37d55fSTang Haojin    utilityModule,
191c5f31b5bSLinJiawei  )
1922905e463SZihao Yu
1934b0d80d8SXuan Hu  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
1944b0d80d8SXuan Hu  val envPATH = sys.env("PATH") + ":" + resourcesPATH
1956f021e01SJiawei Lin
1964b0d80d8SXuan Hu  override def forkEnv = Map("PATH" -> envPATH)
1977f37d55fSTang Haojin}
1987f37d55fSTang Haojin
19951e45dbbSTang Haojinobject xiangshan extends Cross[XiangShan]("chisel", "chisel3")
20051e45dbbSTang Haojintrait XiangShan extends XiangShanModule with HasChisel {
2017f37d55fSTang Haojin
20251e45dbbSTang Haojin  override def millSourcePath = os.pwd
2037f37d55fSTang Haojin
20451e45dbbSTang Haojin  def rocketModule = rocketchip(crossValue)
2057f37d55fSTang Haojin
20651e45dbbSTang Haojin  def difftestModule = difftest(crossValue)
2077f37d55fSTang Haojin
20851e45dbbSTang Haojin  def huancunModule = huancun(crossValue)
2097f37d55fSTang Haojin
21051e45dbbSTang Haojin  def coupledL2Module = coupledL2(crossValue)
2117f37d55fSTang Haojin
21251e45dbbSTang Haojin  def fudianModule = fudian(crossValue)
2137f37d55fSTang Haojin
21451e45dbbSTang Haojin  def utilityModule = utility(crossValue)
2157f37d55fSTang Haojin
2166ce10964SXuan Hu  def yunsuanModule = yunsuan(crossValue)
21783ba63b3SXuan Hu
2185fca38ffSXuan Hu  override def forkArgs = Seq("-Xmx40G", "-Xss256m")
2197f37d55fSTang Haojin
22051e45dbbSTang Haojin  override def sources = T.sources {
2215931ace3STang Haojin    super.sources() ++ Seq(PathRef(millSourcePath / "src" / crossValue / "main" / "scala"))
222fc85214eSLinJiawei  }
223718a511dSLinJiawei
22483ba63b3SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(
2256ce10964SXuan Hu    defaultVersions(crossValue)("chiseltest"),
22683ba63b3SXuan Hu  )
22783ba63b3SXuan Hu
2282905e463SZihao Yu  object test extends SbtModuleTests with TestModule.ScalaTest {
2295fca38ffSXuan Hu    override def forkArgs = Seq("-Xmx40G", "-Xss256m")
23051e45dbbSTang Haojin
23151e45dbbSTang Haojin    override def sources = T.sources {
232*195ef4a5STang Haojin      super.sources() ++ Seq(PathRef(this.millSourcePath / "src" / crossValue / "test" / "scala"))
23351e45dbbSTang Haojin    }
2342905e463SZihao Yu
2352905e463SZihao Yu    override def ivyDeps = super.ivyDeps() ++ Agg(
23651e45dbbSTang Haojin      defaultVersions(crossValue)("chiseltest")
2376aea7ec5SLinJiawei    )
2384364f1d0SHaojin Tang
2394364f1d0SHaojin Tang    val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2404364f1d0SHaojin Tang    val envPATH = sys.env("PATH") + ":" + resourcesPATH
2414364f1d0SHaojin Tang
2424364f1d0SHaojin Tang    override def forkEnv = Map("PATH" -> envPATH)
2432905e463SZihao Yu  }
2442905e463SZihao Yu}
245