xref: /XiangShan/build.sc (revision 7f37d55fc418d3b4583220e634da7e459802c6d8)
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 huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel {
114
115  override def millSourcePath = os.pwd / "huancun"
116
117  def rocketModule: ScalaModule = rocketchip
118
119  def utilityModule: ScalaModule = utility
120
121}
122
123object coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel {
124
125  override def millSourcePath = os.pwd / "coupledL2"
126
127  def rocketModule: ScalaModule = rocketchip
128
129  def utilityModule: ScalaModule = utility
130
131  def huancunModule: ScalaModule = huancun
132
133}
134
135object difftest extends SbtModule with HasChisel {
136
137  override def millSourcePath = os.pwd / "difftest"
138
139}
140
141object fudian extends SbtModule with HasChisel {
142
143  override def millSourcePath = os.pwd / "fudian"
144
145}
146
147// extends this trait to use XiangShan in other projects
148trait XiangShanModule extends ScalaModule {
149
150  def rocketModule: ScalaModule
151
152  def difftestModule: ScalaModule
153
154  def huancunModule: ScalaModule
155
156  def coupledL2Module: ScalaModule
157
158  def fudianModule: ScalaModule
159
160  def utilityModule: ScalaModule
161
162  override def moduleDeps = super.moduleDeps ++ Seq(
163    rocketModule,
164    difftestModule,
165    huancunModule,
166    coupledL2Module,
167    fudianModule,
168    utilityModule,
169  )
170
171}
172
173object XiangShan extends XiangShanModule with SbtModule with HasChisel {
174
175  override def millSourcePath = millOuterCtx.millSourcePath
176
177  def rocketModule = rocketchip
178
179  def difftestModule = difftest
180
181  def huancunModule = huancun
182
183  def coupledL2Module = coupledL2
184
185  def fudianModule = fudian
186
187  def utilityModule = utility
188
189  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
190
191  object test extends SbtModuleTests with TestModule.ScalaTest {
192    override def forkArgs = XiangShan.forkArgs
193
194    override def ivyDeps = super.ivyDeps() ++ Agg(
195      defaultVersions("chiseltest"),
196    )
197  }
198
199}
200