xref: /XiangShan/build.sc (revision 51e45dbbf87325e45ff2af6ca86ed6c7eed04464)
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
257f37d55fSTang Haojinval defaultScalaVersion = "2.13.10"
2672060888SJiawei Lin
27*51e45dbbSTang Haojindef defaultVersions(chiselVersion: String) = Map(
28*51e45dbbSTang Haojin  "chisel" -> (chiselVersion match {
29*51e45dbbSTang Haojin    case "chisel"  => ivy"org.chipsalliance::chisel:6.0.0-M3"
30*51e45dbbSTang Haojin    case "chisel3" => ivy"edu.berkeley.cs::chisel3:3.6.0"
31*51e45dbbSTang Haojin  }),
32*51e45dbbSTang Haojin  "chisel-plugin" -> (chiselVersion match {
33*51e45dbbSTang Haojin    case "chisel"  => ivy"org.chipsalliance:::chisel-plugin:6.0.0-M3"
34*51e45dbbSTang Haojin    case "chisel3" => ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0"
35*51e45dbbSTang Haojin  }),
36*51e45dbbSTang Haojin  "chiseltest" -> (chiselVersion match {
37*51e45dbbSTang Haojin    case "chisel"  => ivy"edu.berkeley.cs::chiseltest:5.0.2"
38*51e45dbbSTang Haojin    case "chisel3" => ivy"edu.berkeley.cs::chiseltest:0.6.2"
39*51e45dbbSTang Haojin  })
40c21bff99SJiawei Lin)
417f37d55fSTang Haojin
42*51e45dbbSTang Haojintrait HasChisel extends SbtModule with Cross.Module[String] {
437f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
447f37d55fSTang Haojin
457f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
467f37d55fSTang Haojin
47*51e45dbbSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel"))
487f37d55fSTang Haojin
49*51e45dbbSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel-plugin"))
507f37d55fSTang Haojin
517f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
527f37d55fSTang Haojin
537f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
547f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
557f37d55fSTang Haojin
567f37d55fSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
577f37d55fSTang Haojin
587f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
59c21bff99SJiawei Lin}
60c21bff99SJiawei Lin
61*51e45dbbSTang Haojinobject rocketchip extends Cross[RocketChip]("chisel", "chisel3")
6272060888SJiawei Lin
637f37d55fSTang Haojintrait RocketChip
647f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
65*51e45dbbSTang Haojin    with HasChisel {
667f37d55fSTang Haojin  def scalaVersion: T[String] = T(defaultScalaVersion)
6772060888SJiawei Lin
687f37d55fSTang Haojin  override def millSourcePath = os.pwd / "rocket-chip"
6972060888SJiawei Lin
707f37d55fSTang Haojin  def macrosModule = macros
7172060888SJiawei Lin
72*51e45dbbSTang Haojin  def hardfloatModule = hardfloat(crossValue)
7372060888SJiawei Lin
747f37d55fSTang Haojin  def cdeModule = cde
7572060888SJiawei Lin
76*51e45dbbSTang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.4"
777f37d55fSTang Haojin
78*51e45dbbSTang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.6"
797f37d55fSTang Haojin
807f37d55fSTang Haojin  object macros extends Macros
817f37d55fSTang Haojin
827f37d55fSTang Haojin  trait Macros
837f37d55fSTang Haojin    extends millbuild.`rocket-chip`.common.MacrosModule
847f37d55fSTang Haojin      with SbtModule {
857f37d55fSTang Haojin
867f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
877f37d55fSTang Haojin
887f37d55fSTang Haojin    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
892905e463SZihao Yu  }
902905e463SZihao Yu
91*51e45dbbSTang Haojin  object hardfloat extends Cross[Hardfloat](crossValue)
922102afb5SLinJiawei
937f37d55fSTang Haojin  trait Hardfloat
947f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
952102afb5SLinJiawei
967f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
97718a511dSLinJiawei
987f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9972060888SJiawei Lin
10072060888SJiawei Lin  }
10172060888SJiawei Lin
1027f37d55fSTang Haojin  object cde extends CDE
10372060888SJiawei Lin
1047f37d55fSTang Haojin  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
105718a511dSLinJiawei
1067f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
1077f37d55fSTang Haojin
1087f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
1097f37d55fSTang Haojin  }
110718a511dSLinJiawei}
111718a511dSLinJiawei
112*51e45dbbSTang Haojinobject utility extends Cross[Utility]("chisel", "chisel3")
113*51e45dbbSTang Haojintrait Utility extends HasChisel {
1143c02ee8fSwakafa
1153c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1163c02ee8fSwakafa
1173c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
118*51e45dbbSTang Haojin    rocketchip(crossValue)
1193c02ee8fSwakafa  )
1207f37d55fSTang Haojin
1217f37d55fSTang Haojin}
1227f37d55fSTang Haojin
123*51e45dbbSTang Haojinobject huancun extends Cross[HuanCun]("chisel", "chisel3")
124*51e45dbbSTang Haojintrait HuanCun extends millbuild.huancun.common.HuanCunModule with HasChisel {
1257f37d55fSTang Haojin
1267f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1277f37d55fSTang Haojin
128*51e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1297f37d55fSTang Haojin
130*51e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1317f37d55fSTang Haojin
1327f37d55fSTang Haojin}
1337f37d55fSTang Haojin
134*51e45dbbSTang Haojinobject coupledL2 extends Cross[CoupledL2]("chisel", "chisel3")
135*51e45dbbSTang Haojintrait CoupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel {
1367f37d55fSTang Haojin
1377f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1387f37d55fSTang Haojin
139*51e45dbbSTang Haojin  def rocketModule: ScalaModule = rocketchip(crossValue)
1407f37d55fSTang Haojin
141*51e45dbbSTang Haojin  def utilityModule: ScalaModule = utility(crossValue)
1427f37d55fSTang Haojin
143*51e45dbbSTang Haojin  def huancunModule: ScalaModule = huancun(crossValue)
1447f37d55fSTang Haojin
1457f37d55fSTang Haojin}
1467f37d55fSTang Haojin
147*51e45dbbSTang Haojinobject difftest extends Cross[Difftest]("chisel", "chisel3")
148*51e45dbbSTang Haojintrait Difftest extends HasChisel {
1497f37d55fSTang Haojin
1507f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1517f37d55fSTang Haojin
1527f37d55fSTang Haojin}
1537f37d55fSTang Haojin
154*51e45dbbSTang Haojinobject fudian extends Cross[FuDian]("chisel", "chisel3")
155*51e45dbbSTang Haojintrait FuDian extends HasChisel {
1567f37d55fSTang Haojin
1577f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1587f37d55fSTang Haojin
1593c02ee8fSwakafa}
1603c02ee8fSwakafa
16172060888SJiawei Lin// extends this trait to use XiangShan in other projects
1627f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
16372060888SJiawei Lin
1647f37d55fSTang Haojin  def rocketModule: ScalaModule
16572060888SJiawei Lin
1667f37d55fSTang Haojin  def difftestModule: ScalaModule
167718a511dSLinJiawei
1687f37d55fSTang Haojin  def huancunModule: ScalaModule
169718a511dSLinJiawei
1707f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1717f37d55fSTang Haojin
1727f37d55fSTang Haojin  def fudianModule: ScalaModule
1737f37d55fSTang Haojin
1747f37d55fSTang Haojin  def utilityModule: ScalaModule
17572060888SJiawei Lin
176c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
17772060888SJiawei Lin    rocketModule,
17872060888SJiawei Lin    difftestModule,
17972060888SJiawei Lin    huancunModule,
18015ee59e4Swakafa    coupledL2Module,
1813c02ee8fSwakafa    fudianModule,
1827f37d55fSTang Haojin    utilityModule,
183c5f31b5bSLinJiawei  )
1842905e463SZihao Yu
1857f37d55fSTang Haojin}
1867f37d55fSTang Haojin
187*51e45dbbSTang Haojinobject xiangshan extends Cross[XiangShan]("chisel", "chisel3")
188*51e45dbbSTang Haojintrait XiangShan extends XiangShanModule with HasChisel {
1897f37d55fSTang Haojin
190*51e45dbbSTang Haojin  override def millSourcePath = os.pwd
1917f37d55fSTang Haojin
192*51e45dbbSTang Haojin  def rocketModule = rocketchip(crossValue)
1937f37d55fSTang Haojin
194*51e45dbbSTang Haojin  def difftestModule = difftest(crossValue)
1957f37d55fSTang Haojin
196*51e45dbbSTang Haojin  def huancunModule = huancun(crossValue)
1977f37d55fSTang Haojin
198*51e45dbbSTang Haojin  def coupledL2Module = coupledL2(crossValue)
1997f37d55fSTang Haojin
200*51e45dbbSTang Haojin  def fudianModule = fudian(crossValue)
2017f37d55fSTang Haojin
202*51e45dbbSTang Haojin  def utilityModule = utility(crossValue)
2037f37d55fSTang Haojin
2047f37d55fSTang Haojin  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
2057f37d55fSTang Haojin
206*51e45dbbSTang Haojin  override def sources = T.sources {
207*51e45dbbSTang Haojin    super.sources() ++ Seq(PathRef(millSourcePath / s"src-${crossValue}" / "main" / "scala"))
208fc85214eSLinJiawei  }
209718a511dSLinJiawei
210*51e45dbbSTang Haojin  object test extends SbtModuleTests with TestModule.ScalaTest {
211*51e45dbbSTang Haojin    override def forkArgs = Seq("-Xmx20G", "-Xss256m")
212*51e45dbbSTang Haojin
213*51e45dbbSTang Haojin    override def sources = T.sources {
214*51e45dbbSTang Haojin      super.sources() ++ Seq(PathRef(millSourcePath / s"src-${crossValue}" / "test" / "scala"))
215*51e45dbbSTang Haojin    }
216*51e45dbbSTang Haojin
217*51e45dbbSTang Haojin    override def ivyDeps = super.ivyDeps() ++ Agg(
218*51e45dbbSTang Haojin      defaultVersions(crossValue)("chiseltest")
219*51e45dbbSTang Haojin    )
220*51e45dbbSTang Haojin  }
2212905e463SZihao Yu}
222