xref: /XiangShan/build.sc (revision e3da8bad334fc71ba0d72f0607e2e93245ddaece)
1c6d43980SLemover/***************************************************************************************
2*e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC)
3*e3da8badSTang Haojin* Copyright (c) 2020-2024 Institute of Computing Technology, Chinese Academy of Sciences
4f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory
5c6d43980SLemover*
6c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
7c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
8c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
9c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
10c6d43980SLemover*
11c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
12c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
13c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
14c6d43980SLemover*
15c6d43980SLemover* See the Mulan PSL v2 for more details.
16c6d43980SLemover***************************************************************************************/
17c6d43980SLemover
182102afb5SLinJiaweiimport mill._
19718a511dSLinJiaweiimport scalalib._
2072060888SJiawei Linimport $file.`rocket-chip`.common
218891a219SYinan Xuimport $file.`rocket-chip`.cde.common
2272060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build
237f37d55fSTang Haojinimport $file.huancun.common
247f37d55fSTang Haojinimport $file.coupledL2.common
2578a8cd25Szhanglinjuanimport $file.openLLC.common
262905e463SZihao Yu
27195ef4a5STang Haojinval defaultScalaVersion = "2.13.14"
2872060888SJiawei Lin
29*e3da8badSTang Haojindef defaultVersions = Map(
30ae0295f4STang Haojin  "chisel"        -> ivy"org.chipsalliance::chisel:6.5.0",
31ae0295f4STang Haojin  "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0",
32195ef4a5STang Haojin  "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:6.0.0"
33c21bff99SJiawei Lin)
347f37d55fSTang Haojin
35*e3da8badSTang Haojintrait HasChisel extends SbtModule {
367f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
377f37d55fSTang Haojin
387f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
397f37d55fSTang Haojin
40*e3da8badSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions("chisel"))
417f37d55fSTang Haojin
42*e3da8badSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin"))
437f37d55fSTang Haojin
447f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
457f37d55fSTang Haojin
467f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
477f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
487f37d55fSTang Haojin
49*e3da8badSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
507f37d55fSTang Haojin
517f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
52c21bff99SJiawei Lin}
53c21bff99SJiawei Lin
54*e3da8badSTang Haojinobject rocketchip
557f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
5651e45dbbSTang Haojin    with HasChisel {
577f37d55fSTang Haojin  def scalaVersion: T[String] = T(defaultScalaVersion)
5872060888SJiawei Lin
597f37d55fSTang Haojin  override def millSourcePath = os.pwd / "rocket-chip"
6072060888SJiawei Lin
617f37d55fSTang Haojin  def macrosModule = macros
6272060888SJiawei Lin
63*e3da8badSTang Haojin  def hardfloatModule = hardfloat
6472060888SJiawei Lin
657f37d55fSTang Haojin  def cdeModule = cde
6672060888SJiawei Lin
67195ef4a5STang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0"
687f37d55fSTang Haojin
69195ef4a5STang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7"
707f37d55fSTang Haojin
717f37d55fSTang Haojin  object macros extends Macros
727f37d55fSTang Haojin
737f37d55fSTang Haojin  trait Macros
747f37d55fSTang Haojin    extends millbuild.`rocket-chip`.common.MacrosModule
757f37d55fSTang Haojin      with SbtModule {
767f37d55fSTang Haojin
777f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
787f37d55fSTang Haojin
797f37d55fSTang Haojin    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
802905e463SZihao Yu  }
812905e463SZihao Yu
82*e3da8badSTang Haojin  object hardfloat
837f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
842102afb5SLinJiawei
857f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
86718a511dSLinJiawei
877f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
8872060888SJiawei Lin
8972060888SJiawei Lin  }
9072060888SJiawei Lin
91*e3da8badSTang Haojin  object cde
92*e3da8badSTang Haojin    extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
93718a511dSLinJiawei
947f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
957f37d55fSTang Haojin
967f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
977f37d55fSTang Haojin  }
98718a511dSLinJiawei}
99718a511dSLinJiawei
100*e3da8badSTang Haojinobject utility extends HasChisel {
1013c02ee8fSwakafa
1023c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1033c02ee8fSwakafa
1043c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
105*e3da8badSTang Haojin    rocketchip
1063c02ee8fSwakafa  )
1077f37d55fSTang Haojin
1087f37d55fSTang Haojin}
1097f37d55fSTang Haojin
110*e3da8badSTang Haojinobject yunsuan extends HasChisel {
1114b0d80d8SXuan Hu
1124b0d80d8SXuan Hu  override def millSourcePath = os.pwd / "yunsuan"
1134b0d80d8SXuan Hu
1144b0d80d8SXuan Hu}
1154b0d80d8SXuan Hu
116*e3da8badSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with HasChisel {
1177f37d55fSTang Haojin
1187f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1197f37d55fSTang Haojin
120*e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
1217f37d55fSTang Haojin
122*e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
1237f37d55fSTang Haojin
1247f37d55fSTang Haojin}
1257f37d55fSTang Haojin
126*e3da8badSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel {
1277f37d55fSTang Haojin
1287f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1297f37d55fSTang Haojin
130*e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
1317f37d55fSTang Haojin
132*e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
1337f37d55fSTang Haojin
134*e3da8badSTang Haojin  def huancunModule: ScalaModule = huancun
1357f37d55fSTang Haojin
1367f37d55fSTang Haojin}
1377f37d55fSTang Haojin
138*e3da8badSTang Haojinobject openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel {
13978a8cd25Szhanglinjuan
14078a8cd25Szhanglinjuan  override def millSourcePath = os.pwd / "openLLC"
14178a8cd25Szhanglinjuan
142*e3da8badSTang Haojin  def coupledL2Module: ScalaModule = coupledL2
14378a8cd25Szhanglinjuan
144*e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
14578a8cd25Szhanglinjuan
146*e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
14778a8cd25Szhanglinjuan}
14878a8cd25Szhanglinjuan
149*e3da8badSTang Haojinobject difftest extends HasChisel {
1507f37d55fSTang Haojin
1517f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1527f37d55fSTang Haojin
1537f37d55fSTang Haojin}
1547f37d55fSTang Haojin
155*e3da8badSTang Haojinobject fudian extends HasChisel {
1567f37d55fSTang Haojin
1577f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1587f37d55fSTang Haojin
1593c02ee8fSwakafa}
1603c02ee8fSwakafa
161*e3da8badSTang Haojinobject macros extends ScalaModule {
162039cdc35SXuan Hu
163039cdc35SXuan Hu  override def millSourcePath = os.pwd / "macros"
164039cdc35SXuan Hu
165039cdc35SXuan Hu  override def scalaVersion: T[String] = T(defaultScalaVersion)
166039cdc35SXuan Hu
167039cdc35SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}")
168039cdc35SXuan Hu
169039cdc35SXuan Hu  def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
170039cdc35SXuan Hu}
171039cdc35SXuan Hu
17272060888SJiawei Lin// extends this trait to use XiangShan in other projects
1737f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
17472060888SJiawei Lin
1757f37d55fSTang Haojin  def rocketModule: ScalaModule
17672060888SJiawei Lin
1777f37d55fSTang Haojin  def difftestModule: ScalaModule
178718a511dSLinJiawei
1797f37d55fSTang Haojin  def huancunModule: ScalaModule
180718a511dSLinJiawei
1817f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1827f37d55fSTang Haojin
18378a8cd25Szhanglinjuan  def openLLCModule: ScalaModule
18478a8cd25Szhanglinjuan
1857f37d55fSTang Haojin  def fudianModule: ScalaModule
1867f37d55fSTang Haojin
1877f37d55fSTang Haojin  def utilityModule: ScalaModule
18872060888SJiawei Lin
18983ba63b3SXuan Hu  def yunsuanModule: ScalaModule
190718a511dSLinJiawei
191039cdc35SXuan Hu  def macrosModule: ScalaModule
192039cdc35SXuan Hu
193c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
19472060888SJiawei Lin    rocketModule,
19572060888SJiawei Lin    difftestModule,
19672060888SJiawei Lin    huancunModule,
19715ee59e4Swakafa    coupledL2Module,
19878a8cd25Szhanglinjuan    openLLCModule,
19930056234SZhangZifei    yunsuanModule,
2003c02ee8fSwakafa    fudianModule,
2017f37d55fSTang Haojin    utilityModule,
202039cdc35SXuan Hu    macrosModule,
203c5f31b5bSLinJiawei  )
2042905e463SZihao Yu
2054b0d80d8SXuan Hu  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2064b0d80d8SXuan Hu  val envPATH = sys.env("PATH") + ":" + resourcesPATH
2076f021e01SJiawei Lin
2084b0d80d8SXuan Hu  override def forkEnv = Map("PATH" -> envPATH)
2097f37d55fSTang Haojin}
2107f37d55fSTang Haojin
211*e3da8badSTang Haojinobject xiangshan extends XiangShanModule with HasChisel {
2127f37d55fSTang Haojin
21351e45dbbSTang Haojin  override def millSourcePath = os.pwd
2147f37d55fSTang Haojin
215*e3da8badSTang Haojin  def rocketModule = rocketchip
2167f37d55fSTang Haojin
217*e3da8badSTang Haojin  def difftestModule = difftest
2187f37d55fSTang Haojin
219*e3da8badSTang Haojin  def huancunModule = huancun
2207f37d55fSTang Haojin
221*e3da8badSTang Haojin  def coupledL2Module = coupledL2
2227f37d55fSTang Haojin
223*e3da8badSTang Haojin  def openLLCModule = openLLC
22478a8cd25Szhanglinjuan
225*e3da8badSTang Haojin  def fudianModule = fudian
2267f37d55fSTang Haojin
227*e3da8badSTang Haojin  def utilityModule = utility
2287f37d55fSTang Haojin
229*e3da8badSTang Haojin  def yunsuanModule = yunsuan
23083ba63b3SXuan Hu
231039cdc35SXuan Hu  def macrosModule = macros
232039cdc35SXuan Hu
2335fca38ffSXuan Hu  override def forkArgs = Seq("-Xmx40G", "-Xss256m")
2347f37d55fSTang Haojin
23583ba63b3SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(
236*e3da8badSTang Haojin    defaultVersions("chiseltest"),
23783ba63b3SXuan Hu  )
23883ba63b3SXuan Hu
239*e3da8badSTang Haojin  override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature")
240*e3da8badSTang Haojin
241cf9b35a7SYinan Xu  object test extends SbtModuleTests with TestModule.ScalaTest {
2425fca38ffSXuan Hu    override def forkArgs = Seq("-Xmx40G", "-Xss256m")
24351e45dbbSTang Haojin
244718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
245*e3da8badSTang Haojin      defaultVersions("chiseltest")
2466aea7ec5SLinJiawei    )
2474364f1d0SHaojin Tang
248*e3da8badSTang Haojin    override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature")
249*e3da8badSTang Haojin
2504364f1d0SHaojin Tang    val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2514364f1d0SHaojin Tang    val envPATH = sys.env("PATH") + ":" + resourcesPATH
2524364f1d0SHaojin Tang
2534364f1d0SHaojin Tang    override def forkEnv = Map("PATH" -> envPATH)
254fc85214eSLinJiawei  }
2552905e463SZihao Yu}
256