xref: /XiangShan/build.sc (revision 4b0d80d87574e82ba31737496d63ac30bed0d40a)
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
277f37d55fSTang Haojinval defaultVersions = Map(
287f37d55fSTang Haojin  "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.0",
297f37d55fSTang Haojin  "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0",
307f37d55fSTang Haojin  "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2",
31c21bff99SJiawei Lin)
327f37d55fSTang Haojin
337f37d55fSTang Haojintrait HasChisel extends ScalaModule {
347f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
357f37d55fSTang Haojin
367f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
377f37d55fSTang Haojin
387f37d55fSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions("chisel"))
397f37d55fSTang Haojin
407f37d55fSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin"))
417f37d55fSTang Haojin
427f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
437f37d55fSTang Haojin
447f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
457f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
467f37d55fSTang Haojin
477f37d55fSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
487f37d55fSTang Haojin
497f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
50c21bff99SJiawei Lin}
51c21bff99SJiawei Lin
527f37d55fSTang Haojinobject rocketchip extends RocketChip
5372060888SJiawei Lin
547f37d55fSTang Haojintrait RocketChip
557f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
567f37d55fSTang Haojin    with SbtModule 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
637f37d55fSTang Haojin  def hardfloatModule = hardfloat
6472060888SJiawei Lin
657f37d55fSTang Haojin  def cdeModule = cde
6672060888SJiawei Lin
677f37d55fSTang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.0"
687f37d55fSTang Haojin
697f37d55fSTang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.5"
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
827f37d55fSTang Haojin  object hardfloat extends Hardfloat
832102afb5SLinJiawei
847f37d55fSTang Haojin  trait Hardfloat
857f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
862102afb5SLinJiawei
877f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
88718a511dSLinJiawei
897f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9072060888SJiawei Lin
9172060888SJiawei Lin  }
9272060888SJiawei Lin
937f37d55fSTang Haojin  object cde extends CDE
9472060888SJiawei Lin
957f37d55fSTang Haojin  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
96718a511dSLinJiawei
977f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
987f37d55fSTang Haojin
997f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
1007f37d55fSTang Haojin  }
101718a511dSLinJiawei}
102718a511dSLinJiawei
1037f37d55fSTang Haojinobject utility extends SbtModule with HasChisel {
1043c02ee8fSwakafa
1053c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1063c02ee8fSwakafa
1073c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
1083c02ee8fSwakafa    rocketchip
1093c02ee8fSwakafa  )
1107f37d55fSTang Haojin
1117f37d55fSTang Haojin}
1127f37d55fSTang Haojin
113*4b0d80d8SXuan Huobject yunsuan extends XSModule with SbtModule {
114*4b0d80d8SXuan Hu
115*4b0d80d8SXuan Hu  override def millSourcePath = os.pwd / "yunsuan"
116*4b0d80d8SXuan Hu
117*4b0d80d8SXuan Hu}
118*4b0d80d8SXuan Hu
1197f37d55fSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel {
1207f37d55fSTang Haojin
1217f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
1227f37d55fSTang Haojin
1237f37d55fSTang Haojin  def rocketModule: ScalaModule = rocketchip
1247f37d55fSTang Haojin
1257f37d55fSTang Haojin  def utilityModule: ScalaModule = utility
1267f37d55fSTang Haojin
1277f37d55fSTang Haojin}
1287f37d55fSTang Haojin
1297f37d55fSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel {
1307f37d55fSTang Haojin
1317f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
1327f37d55fSTang Haojin
1337f37d55fSTang Haojin  def rocketModule: ScalaModule = rocketchip
1347f37d55fSTang Haojin
1357f37d55fSTang Haojin  def utilityModule: ScalaModule = utility
1367f37d55fSTang Haojin
1377f37d55fSTang Haojin  def huancunModule: ScalaModule = huancun
1387f37d55fSTang Haojin
1397f37d55fSTang Haojin}
1407f37d55fSTang Haojin
1417f37d55fSTang Haojinobject difftest extends SbtModule with HasChisel {
1427f37d55fSTang Haojin
1437f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
1447f37d55fSTang Haojin
1457f37d55fSTang Haojin}
1467f37d55fSTang Haojin
1477f37d55fSTang Haojinobject fudian extends SbtModule with HasChisel {
1487f37d55fSTang Haojin
1497f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
1507f37d55fSTang Haojin
1513c02ee8fSwakafa}
1523c02ee8fSwakafa
15372060888SJiawei Lin// extends this trait to use XiangShan in other projects
1547f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
15572060888SJiawei Lin
1567f37d55fSTang Haojin  def rocketModule: ScalaModule
15772060888SJiawei Lin
1587f37d55fSTang Haojin  def difftestModule: ScalaModule
159718a511dSLinJiawei
1607f37d55fSTang Haojin  def huancunModule: ScalaModule
161718a511dSLinJiawei
1627f37d55fSTang Haojin  def coupledL2Module: ScalaModule
1637f37d55fSTang Haojin
1647f37d55fSTang Haojin  def fudianModule: ScalaModule
1657f37d55fSTang Haojin
1667f37d55fSTang Haojin  def utilityModule: ScalaModule
16772060888SJiawei Lin
16830056234SZhangZifei  def yunsuanModule: PublishModule
169718a511dSLinJiawei
170c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
17172060888SJiawei Lin    rocketModule,
17272060888SJiawei Lin    difftestModule,
17372060888SJiawei Lin    huancunModule,
17415ee59e4Swakafa    coupledL2Module,
17530056234SZhangZifei    yunsuanModule,
1763c02ee8fSwakafa    fudianModule,
1777f37d55fSTang Haojin    utilityModule,
178c5f31b5bSLinJiawei  )
1792905e463SZihao Yu
180*4b0d80d8SXuan Hu  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
181*4b0d80d8SXuan Hu  val envPATH = sys.env("PATH") + ":" + resourcesPATH
1826f021e01SJiawei Lin
183*4b0d80d8SXuan Hu  override def forkEnv = Map("PATH" -> envPATH)
184*4b0d80d8SXuan Hu
185*4b0d80d8SXuan Hu  override def ivyDeps = super.ivyDeps() ++ Seq(ivys.chiseltest)
1867f37d55fSTang Haojin}
1877f37d55fSTang Haojin
1887f37d55fSTang Haojinobject XiangShan extends XiangShanModule with SbtModule with HasChisel {
1897f37d55fSTang Haojin
1907f37d55fSTang Haojin  override def millSourcePath = millOuterCtx.millSourcePath
1917f37d55fSTang Haojin
1927f37d55fSTang Haojin  def rocketModule = rocketchip
1937f37d55fSTang Haojin
1947f37d55fSTang Haojin  def difftestModule = difftest
1957f37d55fSTang Haojin
1967f37d55fSTang Haojin  def huancunModule = huancun
1977f37d55fSTang Haojin
1987f37d55fSTang Haojin  def coupledL2Module = coupledL2
1997f37d55fSTang Haojin
2007f37d55fSTang Haojin  def fudianModule = fudian
2017f37d55fSTang Haojin
2027f37d55fSTang Haojin  def utilityModule = utility
2037f37d55fSTang Haojin
2047f37d55fSTang Haojin  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
2057f37d55fSTang Haojin
206cf9b35a7SYinan Xu  object test extends SbtModuleTests with TestModule.ScalaTest {
2077f37d55fSTang Haojin    override def forkArgs = XiangShan.forkArgs
2086f021e01SJiawei Lin
2097720a376Sfdy    override def forkEnv = m.forkEnv
2107720a376Sfdy
211718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
2127f37d55fSTang Haojin      defaultVersions("chiseltest"),
2136aea7ec5SLinJiawei    )
214fc85214eSLinJiawei  }
215718a511dSLinJiawei
2162905e463SZihao Yu}
217