xref: /XiangShan/build.sc (revision 8891a219bbc84f568e1d134854d8d5ed86d6d560)
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 os.Path
18import mill._
19import scalalib._
20import publish._
21import coursier.maven.MavenRepository
22import $file.`rocket-chip`.common
23import $file.`rocket-chip`.cde.common
24import $file.`rocket-chip`.hardfloat.build
25
26object ivys {
27  val sv = "2.12.13"
28  val chisel3 = ivy"edu.berkeley.cs::chisel3:3.5.4"
29  val chisel3Plugin = ivy"edu.berkeley.cs:::chisel3-plugin:3.5.4"
30  val chiseltest = ivy"edu.berkeley.cs::chiseltest:0.5.2"
31  val chiselCirct = ivy"com.sifive::chisel-circt:0.6.0"
32  val scalatest = ivy"org.scalatest::scalatest:3.2.2"
33  val macroParadise = ivy"org.scalamacros:::paradise:2.1.1"
34}
35
36trait XSModule extends ScalaModule with PublishModule {
37
38  // override this to use chisel from source
39  def chiselOpt: Option[PublishModule] = None
40
41  override def scalaVersion = ivys.sv
42
43  override def compileIvyDeps = Agg(ivys.macroParadise)
44
45  override def scalacPluginIvyDeps = Agg(ivys.macroParadise, ivys.chisel3Plugin)
46
47  override def scalacOptions = Seq("-Xsource:2.11")
48
49  override def ivyDeps = (if(chiselOpt.isEmpty) Agg(ivys.chisel3) else Agg.empty[Dep]) ++ Agg(ivys.chiselCirct)
50
51  override def moduleDeps = Seq() ++ chiselOpt
52
53  def publishVersion = "0.0.1"
54
55  // TODO: fix this
56  def pomSettings = PomSettings(
57    description = "XiangShan",
58    organization = "",
59    url = "https://github.com/OpenXiangShan/XiangShan",
60    licenses = Seq(License.`Apache-2.0`),
61    versionControl = VersionControl.github("OpenXiangShan", "XiangShan"),
62    developers = Seq.empty
63  )
64}
65
66object rocketchip extends `rocket-chip`.common.CommonRocketChip {
67
68  val rcPath = os.pwd / "rocket-chip"
69
70  def scalaVersion = ivys.sv
71
72  override def scalacOptions = Seq("-Xsource:2.11")
73
74  override def millSourcePath = rcPath
75
76  object cdeRocket extends `rocket-chip`.cde.common.CDEModule with PublishModule {
77    override def millSourcePath = rcPath / "cde" / "cde"
78
79    def scalaVersion = T {
80      rocketchip.scalaVersion()
81    }
82
83    override def pomSettings = T {
84      rocketchip.pomSettings()
85    }
86
87    override def publishVersion = T {
88      rocketchip.publishVersion()
89    }
90  }
91
92  object hardfloatRocket extends `rocket-chip`.hardfloat.build.hardfloat {
93    override def millSourcePath = rcPath / "hardfloat"
94
95    override def scalaVersion = T {
96      rocketchip.scalaVersion()
97    }
98
99    def chisel3IvyDeps = if(chisel3Module.isEmpty) Agg(
100      `rocket-chip`.common.getVersion("chisel3")
101    ) else Agg.empty[Dep]
102
103    def chisel3PluginIvyDeps = Agg(`rocket-chip`.common.getVersion("chisel3-plugin", cross=true))
104  }
105
106  def hardfloatModule = hardfloatRocket
107
108  def cdeModule = cdeRocket
109
110}
111
112object huancun extends XSModule with SbtModule {
113
114  override def millSourcePath = os.pwd / "huancun"
115
116  override def moduleDeps = super.moduleDeps ++ Seq(
117    rocketchip,
118    utility
119  )
120}
121
122object coupledL2 extends XSModule with SbtModule {
123
124  override def millSourcePath = os.pwd / "coupledL2"
125
126  override def moduleDeps = super.moduleDeps ++ Seq(
127    rocketchip,
128    huancun,
129    utility
130  )
131}
132
133object difftest extends XSModule with SbtModule {
134  override def millSourcePath = os.pwd / "difftest"
135}
136
137object fudian extends XSModule with SbtModule
138
139object utility extends XSModule with SbtModule {
140
141  override def millSourcePath = os.pwd / "utility"
142
143  override def moduleDeps = super.moduleDeps ++ Seq(
144    rocketchip
145  )
146}
147
148// extends this trait to use XiangShan in other projects
149trait CommonXiangShan extends XSModule with SbtModule { m =>
150
151  // module deps
152  def rocketModule: PublishModule
153  def difftestModule: PublishModule
154  def huancunModule: PublishModule
155  def coupledL2Module: PublishModule
156  def fudianModule: PublishModule
157  def utilityModule: PublishModule
158
159  override def millSourcePath = os.pwd
160
161  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
162
163  override def ivyDeps = super.ivyDeps() ++ Seq(ivys.chiseltest)
164
165  override def moduleDeps = super.moduleDeps ++ Seq(
166    rocketModule,
167    difftestModule,
168    huancunModule,
169    coupledL2Module,
170    fudianModule,
171    utilityModule
172  )
173
174  object test extends SbtModuleTests with TestModule.ScalaTest {
175
176    override def forkArgs = m.forkArgs
177
178    override def ivyDeps = super.ivyDeps() ++ Agg(
179      ivys.scalatest
180    )
181
182  }
183
184}
185
186object XiangShan extends CommonXiangShan {
187  override def rocketModule = rocketchip
188  override def difftestModule = difftest
189  override def huancunModule = huancun
190  override def coupledL2Module = coupledL2
191  override def fudianModule = fudian
192  override def utilityModule = utility
193}
194