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 27/* for publishVersion */ 28import $ivy.`de.tototec::de.tobiasroeser.mill.vcs.version::0.4.0` 29import de.tobiasroeser.mill.vcs.version.VcsVersion 30import java.time.LocalDateTime 31import java.time.format.DateTimeFormatter 32import scala.util.matching.Regex 33 34val defaultScalaVersion = "2.13.14" 35 36def defaultVersions = Map( 37 "chisel" -> ivy"org.chipsalliance::chisel:6.5.0", 38 "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0", 39 "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:6.0.0" 40) 41 42trait HasChisel extends SbtModule { 43 def chiselModule: Option[ScalaModule] = None 44 45 def chiselPluginJar: T[Option[PathRef]] = None 46 47 def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 48 49 def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 50 51 override def scalaVersion = defaultScalaVersion 52 53 override def scalacOptions = super.scalacOptions() ++ 54 Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 55 56 override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 57 58 override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 59} 60 61object rocketchip 62 extends millbuild.`rocket-chip`.common.RocketChipModule 63 with HasChisel { 64 def scalaVersion: T[String] = T(defaultScalaVersion) 65 66 override def millSourcePath = os.pwd / "rocket-chip" 67 68 def macrosModule = macros 69 70 def hardfloatModule = hardfloat 71 72 def cdeModule = cde 73 74 def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0" 75 76 def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7" 77 78 object macros extends Macros 79 80 trait Macros 81 extends millbuild.`rocket-chip`.common.MacrosModule 82 with SbtModule { 83 84 def scalaVersion: T[String] = T(defaultScalaVersion) 85 86 def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 87 } 88 89 object hardfloat 90 extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 91 92 def scalaVersion: T[String] = T(defaultScalaVersion) 93 94 override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 95 96 } 97 98 object cde 99 extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 100 101 def scalaVersion: T[String] = T(defaultScalaVersion) 102 103 override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 104 } 105} 106 107object utility extends HasChisel { 108 109 override def millSourcePath = os.pwd / "utility" 110 111 override def moduleDeps = super.moduleDeps ++ Seq( 112 rocketchip 113 ) 114 115} 116 117object yunsuan extends HasChisel { 118 119 override def millSourcePath = os.pwd / "yunsuan" 120 121} 122 123object huancun extends millbuild.huancun.common.HuanCunModule with HasChisel { 124 125 override def millSourcePath = os.pwd / "huancun" 126 127 def rocketModule: ScalaModule = rocketchip 128 129 def utilityModule: ScalaModule = utility 130 131} 132 133object coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 134 135 override def millSourcePath = os.pwd / "coupledL2" 136 137 def rocketModule: ScalaModule = rocketchip 138 139 def utilityModule: ScalaModule = utility 140 141 def huancunModule: ScalaModule = huancun 142 143} 144 145object openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel { 146 147 override def millSourcePath = os.pwd / "openLLC" 148 149 def coupledL2Module: ScalaModule = coupledL2 150 151 def rocketModule: ScalaModule = rocketchip 152 153 def utilityModule: ScalaModule = utility 154} 155 156object difftest extends HasChisel { 157 158 override def millSourcePath = os.pwd / "difftest" 159 160} 161 162object fudian extends HasChisel { 163 164 override def millSourcePath = os.pwd / "fudian" 165 166} 167 168object macros extends ScalaModule { 169 170 override def millSourcePath = os.pwd / "macros" 171 172 override def scalaVersion: T[String] = T(defaultScalaVersion) 173 174 override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}") 175 176 def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 177} 178 179// extends this trait to use XiangShan in other projects 180trait XiangShanModule extends ScalaModule { 181 182 def rocketModule: ScalaModule 183 184 def difftestModule: ScalaModule 185 186 def huancunModule: ScalaModule 187 188 def coupledL2Module: ScalaModule 189 190 def openLLCModule: ScalaModule 191 192 def fudianModule: ScalaModule 193 194 def utilityModule: ScalaModule 195 196 def yunsuanModule: ScalaModule 197 198 def macrosModule: ScalaModule 199 200 override def moduleDeps = super.moduleDeps ++ Seq( 201 rocketModule, 202 difftestModule, 203 huancunModule, 204 coupledL2Module, 205 openLLCModule, 206 yunsuanModule, 207 fudianModule, 208 utilityModule, 209 macrosModule, 210 ) 211 212 val resourcesPATH = os.pwd.toString() + "/src/main/resources" 213 val envPATH = sys.env("PATH") + ":" + resourcesPATH 214 215 override def forkEnv = Map("PATH" -> envPATH) 216} 217 218object xiangshan extends XiangShanModule with HasChisel { 219 220 override def millSourcePath = os.pwd 221 222 def rocketModule = rocketchip 223 224 def difftestModule = difftest 225 226 def huancunModule = huancun 227 228 def coupledL2Module = coupledL2 229 230 def openLLCModule = openLLC 231 232 def fudianModule = fudian 233 234 def utilityModule = utility 235 236 def yunsuanModule = yunsuan 237 238 def macrosModule = macros 239 240 override def forkArgs = Seq("-Xmx40G", "-Xss256m") 241 242 override def ivyDeps = super.ivyDeps() ++ Agg( 243 defaultVersions("chiseltest"), 244 ) 245 246 override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 247 248 def publishVersion: T[String] = VcsVersion.vcsState().format( 249 revHashDigits = 8, 250 dirtyHashDigits = 0, 251 commitCountPad = -1, 252 countSep = "", 253 tagModifier = (tag: String) => "[Rr]elease.*".r.findFirstMatchIn(tag) match { 254 case Some(_) => "Kunminghu-Release-" + LocalDateTime.now().format( 255 DateTimeFormatter.ofPattern("MMM-dd-yyyy")) 256 case None => "Kunminghu-dev" 257 }, 258 /* add "username, buildhost, buildtime" for non-release version */ 259 untaggedSuffix = " (%s@%s) # %s".format( 260 System.getProperty("user.name"), 261 java.net.InetAddress.getLocalHost().getHostName(), 262 LocalDateTime.now().format(DateTimeFormatter.ofPattern("MMM dd hh:mm:ss yyyy"))), 263 ) 264 265 override def resources = T.sources { 266 os.write(T.dest / "publishVersion", publishVersion()) 267 super.resources() ++ Seq(PathRef(T.dest)) 268 } 269 270 object test extends SbtModuleTests with TestModule.ScalaTest { 271 override def forkArgs = Seq("-Xmx40G", "-Xss256m") 272 273 override def ivyDeps = super.ivyDeps() ++ Agg( 274 defaultVersions("chiseltest") 275 ) 276 277 override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 278 279 val resourcesPATH = os.pwd.toString() + "/src/main/resources" 280 val envPATH = sys.env("PATH") + ":" + resourcesPATH 281 282 override def forkEnv = Map("PATH" -> envPATH) 283 } 284} 285