xref: /XiangShan/build.sc (revision 26f0fb0db89b6c9397a7c9ab310013ea83ec4185)
1c6d43980SLemover/***************************************************************************************
2e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC)
3e3da8badSTang 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
27ce34d21eSJiuyue Ma/* for publishVersion */
28ce34d21eSJiuyue Maimport $ivy.`de.tototec::de.tobiasroeser.mill.vcs.version::0.4.0`
29ce34d21eSJiuyue Maimport de.tobiasroeser.mill.vcs.version.VcsVersion
30ce34d21eSJiuyue Maimport java.time.LocalDateTime
31ce34d21eSJiuyue Maimport java.time.format.DateTimeFormatter
32*26f0fb0dSJiuyue Maimport java.util.Locale
33ce34d21eSJiuyue Maimport scala.util.matching.Regex
34ce34d21eSJiuyue Ma
35195ef4a5STang Haojinval defaultScalaVersion = "2.13.14"
3672060888SJiawei Lin
37e3da8badSTang Haojindef defaultVersions = Map(
38ae0295f4STang Haojin  "chisel"        -> ivy"org.chipsalliance::chisel:6.5.0",
39ae0295f4STang Haojin  "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0",
40195ef4a5STang Haojin  "chiseltest"    -> ivy"edu.berkeley.cs::chiseltest:6.0.0"
41c21bff99SJiawei Lin)
427f37d55fSTang Haojin
43e3da8badSTang Haojintrait HasChisel extends SbtModule {
447f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
457f37d55fSTang Haojin
467f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
477f37d55fSTang Haojin
48e3da8badSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions("chisel"))
497f37d55fSTang Haojin
50e3da8badSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin"))
517f37d55fSTang Haojin
527f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
537f37d55fSTang Haojin
547f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
557f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
567f37d55fSTang Haojin
57e3da8badSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
587f37d55fSTang Haojin
597f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
60c21bff99SJiawei Lin}
61c21bff99SJiawei Lin
62e3da8badSTang Haojinobject 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
71e3da8badSTang Haojin  def hardfloatModule = hardfloat
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
90e3da8badSTang Haojin  object hardfloat
917f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
922102afb5SLinJiawei
937f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
94718a511dSLinJiawei
957f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9672060888SJiawei Lin
9772060888SJiawei Lin  }
9872060888SJiawei Lin
99e3da8badSTang Haojin  object cde
100e3da8badSTang Haojin    extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
101718a511dSLinJiawei
1027f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
1037f37d55fSTang Haojin
1047f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
1057f37d55fSTang Haojin  }
106718a511dSLinJiawei}
107718a511dSLinJiawei
108e3da8badSTang Haojinobject utility extends HasChisel {
1093c02ee8fSwakafa
1103c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1113c02ee8fSwakafa
1123c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
113e3da8badSTang Haojin    rocketchip
1143c02ee8fSwakafa  )
1157f37d55fSTang Haojin
1167f37d55fSTang Haojin}
1177f37d55fSTang Haojin
118e3da8badSTang Haojinobject yunsuan extends HasChisel {
1194b0d80d8SXuan Hu
1204b0d80d8SXuan Hu  override def millSourcePath = os.pwd / "yunsuan"
1214b0d80d8SXuan Hu
1224b0d80d8SXuan Hu}
1234b0d80d8SXuan Hu
124e3da8badSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with HasChisel {
1257f37d55fSTang Haojin
1267f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1277f37d55fSTang Haojin
128e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
1297f37d55fSTang Haojin
130e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
1317f37d55fSTang Haojin
1327f37d55fSTang Haojin}
1337f37d55fSTang Haojin
134e3da8badSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel {
1357f37d55fSTang Haojin
1367f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1377f37d55fSTang Haojin
138e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
1397f37d55fSTang Haojin
140e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
1417f37d55fSTang Haojin
142e3da8badSTang Haojin  def huancunModule: ScalaModule = huancun
1437f37d55fSTang Haojin
1447f37d55fSTang Haojin}
1457f37d55fSTang Haojin
146e3da8badSTang Haojinobject openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel {
14778a8cd25Szhanglinjuan
14878a8cd25Szhanglinjuan  override def millSourcePath = os.pwd / "openLLC"
14978a8cd25Szhanglinjuan
150e3da8badSTang Haojin  def coupledL2Module: ScalaModule = coupledL2
15178a8cd25Szhanglinjuan
152e3da8badSTang Haojin  def rocketModule: ScalaModule = rocketchip
15378a8cd25Szhanglinjuan
154e3da8badSTang Haojin  def utilityModule: ScalaModule = utility
15578a8cd25Szhanglinjuan}
15678a8cd25Szhanglinjuan
157e3da8badSTang Haojinobject difftest extends HasChisel {
1587f37d55fSTang Haojin
1597f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1607f37d55fSTang Haojin
1617f37d55fSTang Haojin}
1627f37d55fSTang Haojin
163e3da8badSTang Haojinobject fudian extends HasChisel {
1647f37d55fSTang Haojin
1657f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1667f37d55fSTang Haojin
1673c02ee8fSwakafa}
1683c02ee8fSwakafa
169e3da8badSTang Haojinobject macros extends ScalaModule {
170039cdc35SXuan Hu
171039cdc35SXuan Hu  override def millSourcePath = os.pwd / "macros"
172039cdc35SXuan Hu
173039cdc35SXuan Hu  override def scalaVersion: T[String] = T(defaultScalaVersion)
174039cdc35SXuan Hu
175039cdc35SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}")
176039cdc35SXuan Hu
177039cdc35SXuan Hu  def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
178039cdc35SXuan Hu}
179039cdc35SXuan Hu
18072060888SJiawei Lin// extends this trait to use XiangShan in other projects
1817f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
18272060888SJiawei Lin
1837f37d55fSTang Haojin  def rocketModule: ScalaModule
18472060888SJiawei Lin
1857f37d55fSTang Haojin  def difftestModule: ScalaModule
186718a511dSLinJiawei
1877f37d55fSTang Haojin  def huancunModule: ScalaModule
188718a511dSLinJiawei
1897f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1907f37d55fSTang Haojin
19178a8cd25Szhanglinjuan  def openLLCModule: ScalaModule
19278a8cd25Szhanglinjuan
1937f37d55fSTang Haojin  def fudianModule: ScalaModule
1947f37d55fSTang Haojin
1957f37d55fSTang Haojin  def utilityModule: ScalaModule
19672060888SJiawei Lin
19783ba63b3SXuan Hu  def yunsuanModule: ScalaModule
198718a511dSLinJiawei
199039cdc35SXuan Hu  def macrosModule: ScalaModule
200039cdc35SXuan Hu
201c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
20272060888SJiawei Lin    rocketModule,
20372060888SJiawei Lin    difftestModule,
20472060888SJiawei Lin    huancunModule,
20515ee59e4Swakafa    coupledL2Module,
20678a8cd25Szhanglinjuan    openLLCModule,
20730056234SZhangZifei    yunsuanModule,
2083c02ee8fSwakafa    fudianModule,
2097f37d55fSTang Haojin    utilityModule,
210039cdc35SXuan Hu    macrosModule,
211c5f31b5bSLinJiawei  )
2122905e463SZihao Yu
2134b0d80d8SXuan Hu  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2144b0d80d8SXuan Hu  val envPATH = sys.env("PATH") + ":" + resourcesPATH
2156f021e01SJiawei Lin
2164b0d80d8SXuan Hu  override def forkEnv = Map("PATH" -> envPATH)
2177f37d55fSTang Haojin}
2187f37d55fSTang Haojin
219e3da8badSTang Haojinobject xiangshan extends XiangShanModule with HasChisel {
2207f37d55fSTang Haojin
22151e45dbbSTang Haojin  override def millSourcePath = os.pwd
2227f37d55fSTang Haojin
223e3da8badSTang Haojin  def rocketModule = rocketchip
2247f37d55fSTang Haojin
225e3da8badSTang Haojin  def difftestModule = difftest
2267f37d55fSTang Haojin
227e3da8badSTang Haojin  def huancunModule = huancun
2287f37d55fSTang Haojin
229e3da8badSTang Haojin  def coupledL2Module = coupledL2
2307f37d55fSTang Haojin
231e3da8badSTang Haojin  def openLLCModule = openLLC
23278a8cd25Szhanglinjuan
233e3da8badSTang Haojin  def fudianModule = fudian
2347f37d55fSTang Haojin
235e3da8badSTang Haojin  def utilityModule = utility
2367f37d55fSTang Haojin
237e3da8badSTang Haojin  def yunsuanModule = yunsuan
23883ba63b3SXuan Hu
239039cdc35SXuan Hu  def macrosModule = macros
240039cdc35SXuan Hu
2415fca38ffSXuan Hu  override def forkArgs = Seq("-Xmx40G", "-Xss256m")
2427f37d55fSTang Haojin
24383ba63b3SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Agg(
244e3da8badSTang Haojin    defaultVersions("chiseltest"),
24583ba63b3SXuan Hu  )
24683ba63b3SXuan Hu
247e3da8badSTang Haojin  override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature")
248e3da8badSTang Haojin
249ce34d21eSJiuyue Ma  def publishVersion: T[String] = VcsVersion.vcsState().format(
250ce34d21eSJiuyue Ma    revHashDigits = 8,
251ce34d21eSJiuyue Ma    dirtyHashDigits = 0,
252ce34d21eSJiuyue Ma    commitCountPad = -1,
253ce34d21eSJiuyue Ma    countSep = "",
254ce34d21eSJiuyue Ma    tagModifier = (tag: String) => "[Rr]elease.*".r.findFirstMatchIn(tag) match {
255ce34d21eSJiuyue Ma      case Some(_) => "Kunminghu-Release-" + LocalDateTime.now().format(
256*26f0fb0dSJiuyue Ma                                 DateTimeFormatter.ofPattern("MMM-dd-yyyy").withLocale(new Locale("en")))
257ce34d21eSJiuyue Ma      case None => "Kunminghu-dev"
258ce34d21eSJiuyue Ma    },
259ce34d21eSJiuyue Ma    /* add "username, buildhost, buildtime" for non-release version */
260ce34d21eSJiuyue Ma    untaggedSuffix = " (%s@%s) # %s".format(
261ce34d21eSJiuyue Ma      System.getProperty("user.name"),
262ce34d21eSJiuyue Ma      java.net.InetAddress.getLocalHost().getHostName(),
263*26f0fb0dSJiuyue Ma      LocalDateTime.now().format(DateTimeFormatter.ofPattern("MMM dd hh:mm:ss yyyy").withLocale(new Locale("en")))),
264ce34d21eSJiuyue Ma  )
265ce34d21eSJiuyue Ma
266ce34d21eSJiuyue Ma  override def resources = T.sources {
267ce34d21eSJiuyue Ma    os.write(T.dest / "publishVersion", publishVersion())
268ce34d21eSJiuyue Ma    super.resources() ++ Seq(PathRef(T.dest))
269ce34d21eSJiuyue Ma  }
270ce34d21eSJiuyue Ma
271cf9b35a7SYinan Xu  object test extends SbtModuleTests with TestModule.ScalaTest {
2725fca38ffSXuan Hu    override def forkArgs = Seq("-Xmx40G", "-Xss256m")
27351e45dbbSTang Haojin
274718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
275e3da8badSTang Haojin      defaultVersions("chiseltest")
2766aea7ec5SLinJiawei    )
2774364f1d0SHaojin Tang
278e3da8badSTang Haojin    override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature")
279e3da8badSTang Haojin
2804364f1d0SHaojin Tang    val resourcesPATH = os.pwd.toString() + "/src/main/resources"
2814364f1d0SHaojin Tang    val envPATH = sys.env("PATH") + ":" + resourcesPATH
2824364f1d0SHaojin Tang
2834364f1d0SHaojin Tang    override def forkEnv = Map("PATH" -> envPATH)
284fc85214eSLinJiawei  }
2852905e463SZihao Yu}
286