xref: /XiangShan/build.sc (revision 83ba63b34cf09b33c0a9e1b3203138e51af4491b)
1/***************************************************************************************
2* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3* Copyright (c) 2020-2021 Peng Cheng Laboratory
4*
5* XiangShan is licensed under Mulan PSL v2.
6* You can use this software according to the terms and conditions of the Mulan PSL v2.
7* You may obtain a copy of Mulan PSL v2 at:
8*          http://license.coscl.org.cn/MulanPSL2
9*
10* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13*
14* See the Mulan PSL v2 for more details.
15***************************************************************************************/
16
17import mill._
18import scalalib._
19import $file.`rocket-chip`.common
20import $file.`rocket-chip`.cde.common
21import $file.`rocket-chip`.hardfloat.build
22import $file.huancun.common
23import $file.coupledL2.common
24
25val defaultScalaVersion = "2.13.10"
26
27val defaultVersions = Map(
28  "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.0",
29  "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0",
30  "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2",
31)
32
33trait HasChisel extends ScalaModule {
34  def chiselModule: Option[ScalaModule] = None
35
36  def chiselPluginJar: T[Option[PathRef]] = None
37
38  def chiselIvy: Option[Dep] = Some(defaultVersions("chisel"))
39
40  def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin"))
41
42  override def scalaVersion = defaultScalaVersion
43
44  override def scalacOptions = super.scalacOptions() ++
45    Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader")
46
47  override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get)
48
49  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get)
50}
51
52object rocketchip extends RocketChip
53
54trait RocketChip
55  extends millbuild.`rocket-chip`.common.RocketChipModule
56    with SbtModule with HasChisel {
57  def scalaVersion: T[String] = T(defaultScalaVersion)
58
59  override def millSourcePath = os.pwd / "rocket-chip"
60
61  def macrosModule = macros
62
63  def hardfloatModule = hardfloat
64
65  def cdeModule = cde
66
67  def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.0"
68
69  def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.5"
70
71  object macros extends Macros
72
73  trait Macros
74    extends millbuild.`rocket-chip`.common.MacrosModule
75      with SbtModule {
76
77    def scalaVersion: T[String] = T(defaultScalaVersion)
78
79    def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}"
80  }
81
82  object hardfloat extends Hardfloat
83
84  trait Hardfloat
85    extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel {
86
87    def scalaVersion: T[String] = T(defaultScalaVersion)
88
89    override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat"
90
91  }
92
93  object cde extends CDE
94
95  trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule {
96
97    def scalaVersion: T[String] = T(defaultScalaVersion)
98
99    override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde"
100  }
101}
102
103object utility extends SbtModule with HasChisel {
104
105  override def millSourcePath = os.pwd / "utility"
106
107  override def moduleDeps = super.moduleDeps ++ Seq(
108    rocketchip
109  )
110
111}
112
113object yunsuan extends SbtModule with HasChisel {
114
115  override def millSourcePath = os.pwd / "yunsuan"
116
117}
118
119object huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel {
120
121  override def millSourcePath = os.pwd / "huancun"
122
123  def rocketModule: ScalaModule = rocketchip
124
125  def utilityModule: ScalaModule = utility
126
127}
128
129object coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel {
130
131  override def millSourcePath = os.pwd / "coupledL2"
132
133  def rocketModule: ScalaModule = rocketchip
134
135  def utilityModule: ScalaModule = utility
136
137  def huancunModule: ScalaModule = huancun
138
139}
140
141object difftest extends SbtModule with HasChisel {
142
143  override def millSourcePath = os.pwd / "difftest"
144
145}
146
147object fudian extends SbtModule with HasChisel {
148
149  override def millSourcePath = os.pwd / "fudian"
150
151}
152
153// extends this trait to use XiangShan in other projects
154trait XiangShanModule extends ScalaModule {
155
156  def rocketModule: ScalaModule
157
158  def difftestModule: ScalaModule
159
160  def huancunModule: ScalaModule
161
162  def coupledL2Module: ScalaModule
163
164  def fudianModule: ScalaModule
165
166  def utilityModule: ScalaModule
167
168  def yunsuanModule: ScalaModule
169
170  override def moduleDeps = super.moduleDeps ++ Seq(
171    rocketModule,
172    difftestModule,
173    huancunModule,
174    coupledL2Module,
175    yunsuanModule,
176    fudianModule,
177    utilityModule,
178  )
179
180  val resourcesPATH = os.pwd.toString() + "/src/main/resources"
181  val envPATH = sys.env("PATH") + ":" + resourcesPATH
182
183  override def forkEnv = Map("PATH" -> envPATH)
184}
185
186object XiangShan extends XiangShanModule with SbtModule with HasChisel {
187
188  override def millSourcePath = millOuterCtx.millSourcePath
189
190  def rocketModule = rocketchip
191
192  def difftestModule = difftest
193
194  def huancunModule = huancun
195
196  def coupledL2Module = coupledL2
197
198  def fudianModule = fudian
199
200  def utilityModule = utility
201
202  def yunsuanModule = yunsuan
203
204  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
205
206  override def ivyDeps = super.ivyDeps() ++ Agg(
207    defaultVersions("chiseltest"),
208  )
209
210  object test extends SbtModuleTests with TestModule.ScalaTest {
211    override def forkArgs = XiangShan.forkArgs
212
213    override def forkEnv = XiangShan.forkEnv
214
215    override def ivyDeps = super.ivyDeps() ++ Agg(
216      defaultVersions("chiseltest"),
217    )
218  }
219
220}
221