1/*************************************************************************************** 2* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC) 3* Copyright (c) 2020-2024 Institute of Computing Technology, Chinese Academy of Sciences 4* Copyright (c) 2020-2021 Peng Cheng Laboratory 5* 6* XiangShan is licensed under Mulan PSL v2. 7* You can use this software according to the terms and conditions of the Mulan PSL v2. 8* You may obtain a copy of Mulan PSL v2 at: 9* http://license.coscl.org.cn/MulanPSL2 10* 11* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 12* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 13* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 14* 15* See the Mulan PSL v2 for more details. 16***************************************************************************************/ 17 18import mill._ 19import scalalib._ 20import $file.`rocket-chip`.common 21import $file.`rocket-chip`.cde.common 22import $file.`rocket-chip`.hardfloat.build 23import $file.huancun.common 24import $file.coupledL2.common 25import $file.openLLC.common 26 27val defaultScalaVersion = "2.13.14" 28 29def defaultVersions = Map( 30 "chisel" -> ivy"org.chipsalliance::chisel:6.5.0", 31 "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0", 32 "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:6.0.0" 33) 34 35trait HasChisel extends SbtModule { 36 def chiselModule: Option[ScalaModule] = None 37 38 def chiselPluginJar: T[Option[PathRef]] = None 39 40 def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 41 42 def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 43 44 override def scalaVersion = defaultScalaVersion 45 46 override def scalacOptions = super.scalacOptions() ++ 47 Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 48 49 override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 50 51 override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 52} 53 54object rocketchip 55 extends millbuild.`rocket-chip`.common.RocketChipModule 56 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.7.0" 68 69 def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7" 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 83 extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 84 85 def scalaVersion: T[String] = T(defaultScalaVersion) 86 87 override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 88 89 } 90 91 object cde 92 extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 93 94 def scalaVersion: T[String] = T(defaultScalaVersion) 95 96 override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 97 } 98} 99 100object utility extends HasChisel { 101 102 override def millSourcePath = os.pwd / "utility" 103 104 override def moduleDeps = super.moduleDeps ++ Seq( 105 rocketchip 106 ) 107 108} 109 110object yunsuan extends HasChisel { 111 112 override def millSourcePath = os.pwd / "yunsuan" 113 114} 115 116object huancun extends millbuild.huancun.common.HuanCunModule with HasChisel { 117 118 override def millSourcePath = os.pwd / "huancun" 119 120 def rocketModule: ScalaModule = rocketchip 121 122 def utilityModule: ScalaModule = utility 123 124} 125 126object coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 127 128 override def millSourcePath = os.pwd / "coupledL2" 129 130 def rocketModule: ScalaModule = rocketchip 131 132 def utilityModule: ScalaModule = utility 133 134 def huancunModule: ScalaModule = huancun 135 136} 137 138object openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel { 139 140 override def millSourcePath = os.pwd / "openLLC" 141 142 def coupledL2Module: ScalaModule = coupledL2 143 144 def rocketModule: ScalaModule = rocketchip 145 146 def utilityModule: ScalaModule = utility 147} 148 149object difftest extends HasChisel { 150 151 override def millSourcePath = os.pwd / "difftest" 152 153} 154 155object fudian extends HasChisel { 156 157 override def millSourcePath = os.pwd / "fudian" 158 159} 160 161object macros extends ScalaModule { 162 163 override def millSourcePath = os.pwd / "macros" 164 165 override def scalaVersion: T[String] = T(defaultScalaVersion) 166 167 override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}") 168 169 def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 170} 171 172// extends this trait to use XiangShan in other projects 173trait XiangShanModule extends ScalaModule { 174 175 def rocketModule: ScalaModule 176 177 def difftestModule: ScalaModule 178 179 def huancunModule: ScalaModule 180 181 def coupledL2Module: ScalaModule 182 183 def openLLCModule: ScalaModule 184 185 def fudianModule: ScalaModule 186 187 def utilityModule: ScalaModule 188 189 def yunsuanModule: ScalaModule 190 191 def macrosModule: ScalaModule 192 193 override def moduleDeps = super.moduleDeps ++ Seq( 194 rocketModule, 195 difftestModule, 196 huancunModule, 197 coupledL2Module, 198 openLLCModule, 199 yunsuanModule, 200 fudianModule, 201 utilityModule, 202 macrosModule, 203 ) 204 205 val resourcesPATH = os.pwd.toString() + "/src/main/resources" 206 val envPATH = sys.env("PATH") + ":" + resourcesPATH 207 208 override def forkEnv = Map("PATH" -> envPATH) 209} 210 211object xiangshan extends XiangShanModule with HasChisel { 212 213 override def millSourcePath = os.pwd 214 215 def rocketModule = rocketchip 216 217 def difftestModule = difftest 218 219 def huancunModule = huancun 220 221 def coupledL2Module = coupledL2 222 223 def openLLCModule = openLLC 224 225 def fudianModule = fudian 226 227 def utilityModule = utility 228 229 def yunsuanModule = yunsuan 230 231 def macrosModule = macros 232 233 override def forkArgs = Seq("-Xmx40G", "-Xss256m") 234 235 override def ivyDeps = super.ivyDeps() ++ Agg( 236 defaultVersions("chiseltest"), 237 ) 238 239 override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 240 241 object test extends SbtModuleTests with TestModule.ScalaTest { 242 override def forkArgs = Seq("-Xmx40G", "-Xss256m") 243 244 override def ivyDeps = super.ivyDeps() ++ Agg( 245 defaultVersions("chiseltest") 246 ) 247 248 override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 249 250 val resourcesPATH = os.pwd.toString() + "/src/main/resources" 251 val envPATH = sys.env("PATH") + ":" + resourcesPATH 252 253 override def forkEnv = Map("PATH" -> envPATH) 254 } 255} 256