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