xref: /XiangShan/build.sc (revision 7f37d55fc418d3b4583220e634da7e459802c6d8)
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
22*7f37d55fSTang Haojinimport $file.huancun.common
23*7f37d55fSTang Haojinimport $file.coupledL2.common
242905e463SZihao Yu
25*7f37d55fSTang Haojinval defaultScalaVersion = "2.13.10"
2672060888SJiawei Lin
27*7f37d55fSTang Haojinval defaultVersions = Map(
28*7f37d55fSTang Haojin  "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.0",
29*7f37d55fSTang Haojin  "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0",
30*7f37d55fSTang Haojin  "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2",
31c21bff99SJiawei Lin)
32*7f37d55fSTang Haojin
33*7f37d55fSTang Haojintrait HasChisel extends ScalaModule {
34*7f37d55fSTang Haojin  def chiselModule: Option[ScalaModule] = None
35*7f37d55fSTang Haojin
36*7f37d55fSTang Haojin  def chiselPluginJar: T[Option[PathRef]] = None
37*7f37d55fSTang Haojin
38*7f37d55fSTang Haojin  def chiselIvy: Option[Dep] = Some(defaultVersions("chisel"))
39*7f37d55fSTang Haojin
40*7f37d55fSTang Haojin  def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin"))
41*7f37d55fSTang Haojin
42*7f37d55fSTang Haojin  override def scalaVersion = defaultScalaVersion
43*7f37d55fSTang Haojin
44*7f37d55fSTang Haojin  override def scalacOptions = super.scalacOptions() ++
45*7f37d55fSTang Haojin    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
46*7f37d55fSTang Haojin
47*7f37d55fSTang Haojin  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
48*7f37d55fSTang Haojin
49*7f37d55fSTang Haojin  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
50c21bff99SJiawei Lin}
51c21bff99SJiawei Lin
52*7f37d55fSTang Haojinobject rocketchip extends RocketChip
5372060888SJiawei Lin
54*7f37d55fSTang Haojintrait RocketChip
55*7f37d55fSTang Haojin  extends millbuild.`rocket-chip`.common.RocketChipModule
56*7f37d55fSTang Haojin    with SbtModule with HasChisel {
57*7f37d55fSTang Haojin  def scalaVersion: T[String] = T(defaultScalaVersion)
5872060888SJiawei Lin
59*7f37d55fSTang Haojin  override def millSourcePath = os.pwd / "rocket-chip"
6072060888SJiawei Lin
61*7f37d55fSTang Haojin  def macrosModule = macros
6272060888SJiawei Lin
63*7f37d55fSTang Haojin  def hardfloatModule = hardfloat
6472060888SJiawei Lin
65*7f37d55fSTang Haojin  def cdeModule = cde
6672060888SJiawei Lin
67*7f37d55fSTang Haojin  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.0"
68*7f37d55fSTang Haojin
69*7f37d55fSTang Haojin  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.5"
70*7f37d55fSTang Haojin
71*7f37d55fSTang Haojin  object macros extends Macros
72*7f37d55fSTang Haojin
73*7f37d55fSTang Haojin  trait Macros
74*7f37d55fSTang Haojin    extends millbuild.`rocket-chip`.common.MacrosModule
75*7f37d55fSTang Haojin      with SbtModule {
76*7f37d55fSTang Haojin
77*7f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
78*7f37d55fSTang Haojin
79*7f37d55fSTang Haojin    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
802905e463SZihao Yu  }
812905e463SZihao Yu
82*7f37d55fSTang Haojin  object hardfloat extends Hardfloat
832102afb5SLinJiawei
84*7f37d55fSTang Haojin  trait Hardfloat
85*7f37d55fSTang Haojin    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
862102afb5SLinJiawei
87*7f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
88718a511dSLinJiawei
89*7f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
9072060888SJiawei Lin
9172060888SJiawei Lin  }
9272060888SJiawei Lin
93*7f37d55fSTang Haojin  object cde extends CDE
9472060888SJiawei Lin
95*7f37d55fSTang Haojin  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
96718a511dSLinJiawei
97*7f37d55fSTang Haojin    def scalaVersion: T[String] = T(defaultScalaVersion)
98*7f37d55fSTang Haojin
99*7f37d55fSTang Haojin    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
100*7f37d55fSTang Haojin  }
101718a511dSLinJiawei}
102718a511dSLinJiawei
103*7f37d55fSTang 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  )
110*7f37d55fSTang Haojin
111*7f37d55fSTang Haojin}
112*7f37d55fSTang Haojin
113*7f37d55fSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel {
114*7f37d55fSTang Haojin
115*7f37d55fSTang Haojin  override def millSourcePath = os.pwd / "huancun"
116*7f37d55fSTang Haojin
117*7f37d55fSTang Haojin  def rocketModule: ScalaModule = rocketchip
118*7f37d55fSTang Haojin
119*7f37d55fSTang Haojin  def utilityModule: ScalaModule = utility
120*7f37d55fSTang Haojin
121*7f37d55fSTang Haojin}
122*7f37d55fSTang Haojin
123*7f37d55fSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel {
124*7f37d55fSTang Haojin
125*7f37d55fSTang Haojin  override def millSourcePath = os.pwd / "coupledL2"
126*7f37d55fSTang Haojin
127*7f37d55fSTang Haojin  def rocketModule: ScalaModule = rocketchip
128*7f37d55fSTang Haojin
129*7f37d55fSTang Haojin  def utilityModule: ScalaModule = utility
130*7f37d55fSTang Haojin
131*7f37d55fSTang Haojin  def huancunModule: ScalaModule = huancun
132*7f37d55fSTang Haojin
133*7f37d55fSTang Haojin}
134*7f37d55fSTang Haojin
135*7f37d55fSTang Haojinobject difftest extends SbtModule with HasChisel {
136*7f37d55fSTang Haojin
137*7f37d55fSTang Haojin  override def millSourcePath = os.pwd / "difftest"
138*7f37d55fSTang Haojin
139*7f37d55fSTang Haojin}
140*7f37d55fSTang Haojin
141*7f37d55fSTang Haojinobject fudian extends SbtModule with HasChisel {
142*7f37d55fSTang Haojin
143*7f37d55fSTang Haojin  override def millSourcePath = os.pwd / "fudian"
144*7f37d55fSTang Haojin
1453c02ee8fSwakafa}
1463c02ee8fSwakafa
14772060888SJiawei Lin// extends this trait to use XiangShan in other projects
148*7f37d55fSTang Haojintrait XiangShanModule extends ScalaModule {
14972060888SJiawei Lin
150*7f37d55fSTang Haojin  def rocketModule: ScalaModule
15172060888SJiawei Lin
152*7f37d55fSTang Haojin  def difftestModule: ScalaModule
153718a511dSLinJiawei
154*7f37d55fSTang Haojin  def huancunModule: ScalaModule
155718a511dSLinJiawei
156*7f37d55fSTang Haojin  def coupledL2Module: ScalaModule
157*7f37d55fSTang Haojin
158*7f37d55fSTang Haojin  def fudianModule: ScalaModule
159*7f37d55fSTang Haojin
160*7f37d55fSTang Haojin  def utilityModule: ScalaModule
16172060888SJiawei Lin
162c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
16372060888SJiawei Lin    rocketModule,
16472060888SJiawei Lin    difftestModule,
16572060888SJiawei Lin    huancunModule,
16615ee59e4Swakafa    coupledL2Module,
1673c02ee8fSwakafa    fudianModule,
168*7f37d55fSTang Haojin    utilityModule,
169c5f31b5bSLinJiawei  )
1702905e463SZihao Yu
171*7f37d55fSTang Haojin}
172*7f37d55fSTang Haojin
173*7f37d55fSTang Haojinobject XiangShan extends XiangShanModule with SbtModule with HasChisel {
174*7f37d55fSTang Haojin
175*7f37d55fSTang Haojin  override def millSourcePath = millOuterCtx.millSourcePath
176*7f37d55fSTang Haojin
177*7f37d55fSTang Haojin  def rocketModule = rocketchip
178*7f37d55fSTang Haojin
179*7f37d55fSTang Haojin  def difftestModule = difftest
180*7f37d55fSTang Haojin
181*7f37d55fSTang Haojin  def huancunModule = huancun
182*7f37d55fSTang Haojin
183*7f37d55fSTang Haojin  def coupledL2Module = coupledL2
184*7f37d55fSTang Haojin
185*7f37d55fSTang Haojin  def fudianModule = fudian
186*7f37d55fSTang Haojin
187*7f37d55fSTang Haojin  def utilityModule = utility
188*7f37d55fSTang Haojin
189*7f37d55fSTang Haojin  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
190*7f37d55fSTang Haojin
191cf9b35a7SYinan Xu  object test extends SbtModuleTests with TestModule.ScalaTest {
192*7f37d55fSTang Haojin    override def forkArgs = XiangShan.forkArgs
1936f021e01SJiawei Lin
194718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
195*7f37d55fSTang Haojin      defaultVersions("chiseltest"),
1966aea7ec5SLinJiawei    )
197fc85214eSLinJiawei  }
198718a511dSLinJiawei
1992905e463SZihao Yu}
200