1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 172102afb5SLinJiaweiimport mill._ 18718a511dSLinJiaweiimport scalalib._ 1972060888SJiawei Linimport $file.`rocket-chip`.common 208891a219SYinan Xuimport $file.`rocket-chip`.cde.common 2172060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build 22*7f37d55fSTang Haojinimport $file.huancun.common 23*7f37d55fSTang Haojinimport $file.coupledL2.common 242905e463SZihao Yu 25*7f37d55fSTang Haojinval defaultScalaVersion = "2.13.10" 2672060888SJiawei Lin 27*7f37d55fSTang Haojinval defaultVersions = Map( 28*7f37d55fSTang Haojin "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.0", 29*7f37d55fSTang Haojin "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0", 30*7f37d55fSTang Haojin "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2", 31c21bff99SJiawei Lin) 32*7f37d55fSTang Haojin 33*7f37d55fSTang Haojintrait HasChisel extends ScalaModule { 34*7f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 35*7f37d55fSTang Haojin 36*7f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 37*7f37d55fSTang Haojin 38*7f37d55fSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 39*7f37d55fSTang Haojin 40*7f37d55fSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 41*7f37d55fSTang Haojin 42*7f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 43*7f37d55fSTang Haojin 44*7f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 45*7f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 46*7f37d55fSTang Haojin 47*7f37d55fSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 48*7f37d55fSTang Haojin 49*7f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 50c21bff99SJiawei Lin} 51c21bff99SJiawei Lin 52*7f37d55fSTang Haojinobject rocketchip extends RocketChip 5372060888SJiawei Lin 54*7f37d55fSTang Haojintrait RocketChip 55*7f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.RocketChipModule 56*7f37d55fSTang Haojin with SbtModule with HasChisel { 57*7f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 5872060888SJiawei Lin 59*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" 6072060888SJiawei Lin 61*7f37d55fSTang Haojin def macrosModule = macros 6272060888SJiawei Lin 63*7f37d55fSTang Haojin def hardfloatModule = hardfloat 6472060888SJiawei Lin 65*7f37d55fSTang Haojin def cdeModule = cde 6672060888SJiawei Lin 67*7f37d55fSTang Haojin def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.0" 68*7f37d55fSTang Haojin 69*7f37d55fSTang Haojin def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.5" 70*7f37d55fSTang Haojin 71*7f37d55fSTang Haojin object macros extends Macros 72*7f37d55fSTang Haojin 73*7f37d55fSTang Haojin trait Macros 74*7f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.MacrosModule 75*7f37d55fSTang Haojin with SbtModule { 76*7f37d55fSTang Haojin 77*7f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 78*7f37d55fSTang Haojin 79*7f37d55fSTang Haojin def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 802905e463SZihao Yu } 812905e463SZihao Yu 82*7f37d55fSTang Haojin object hardfloat extends Hardfloat 832102afb5SLinJiawei 84*7f37d55fSTang Haojin trait Hardfloat 85*7f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 862102afb5SLinJiawei 87*7f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 88718a511dSLinJiawei 89*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 9072060888SJiawei Lin 9172060888SJiawei Lin } 9272060888SJiawei Lin 93*7f37d55fSTang Haojin object cde extends CDE 9472060888SJiawei Lin 95*7f37d55fSTang Haojin trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 96718a511dSLinJiawei 97*7f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 98*7f37d55fSTang Haojin 99*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 100*7f37d55fSTang Haojin } 101718a511dSLinJiawei} 102718a511dSLinJiawei 103*7f37d55fSTang Haojinobject utility extends SbtModule with HasChisel { 1043c02ee8fSwakafa 1053c02ee8fSwakafa override def millSourcePath = os.pwd / "utility" 1063c02ee8fSwakafa 1073c02ee8fSwakafa override def moduleDeps = super.moduleDeps ++ Seq( 1083c02ee8fSwakafa rocketchip 1093c02ee8fSwakafa ) 110*7f37d55fSTang Haojin 111*7f37d55fSTang Haojin} 112*7f37d55fSTang Haojin 113*7f37d55fSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel { 114*7f37d55fSTang Haojin 115*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 116*7f37d55fSTang Haojin 117*7f37d55fSTang Haojin def rocketModule: ScalaModule = rocketchip 118*7f37d55fSTang Haojin 119*7f37d55fSTang Haojin def utilityModule: ScalaModule = utility 120*7f37d55fSTang Haojin 121*7f37d55fSTang Haojin} 122*7f37d55fSTang Haojin 123*7f37d55fSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel { 124*7f37d55fSTang Haojin 125*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 126*7f37d55fSTang Haojin 127*7f37d55fSTang Haojin def rocketModule: ScalaModule = rocketchip 128*7f37d55fSTang Haojin 129*7f37d55fSTang Haojin def utilityModule: ScalaModule = utility 130*7f37d55fSTang Haojin 131*7f37d55fSTang Haojin def huancunModule: ScalaModule = huancun 132*7f37d55fSTang Haojin 133*7f37d55fSTang Haojin} 134*7f37d55fSTang Haojin 135*7f37d55fSTang Haojinobject difftest extends SbtModule with HasChisel { 136*7f37d55fSTang Haojin 137*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 138*7f37d55fSTang Haojin 139*7f37d55fSTang Haojin} 140*7f37d55fSTang Haojin 141*7f37d55fSTang Haojinobject fudian extends SbtModule with HasChisel { 142*7f37d55fSTang Haojin 143*7f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 144*7f37d55fSTang Haojin 1453c02ee8fSwakafa} 1463c02ee8fSwakafa 14772060888SJiawei Lin// extends this trait to use XiangShan in other projects 148*7f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 14972060888SJiawei Lin 150*7f37d55fSTang Haojin def rocketModule: ScalaModule 15172060888SJiawei Lin 152*7f37d55fSTang Haojin def difftestModule: ScalaModule 153718a511dSLinJiawei 154*7f37d55fSTang Haojin def huancunModule: ScalaModule 155718a511dSLinJiawei 156*7f37d55fSTang Haojin def coupledL2Module: ScalaModule 157*7f37d55fSTang Haojin 158*7f37d55fSTang Haojin def fudianModule: ScalaModule 159*7f37d55fSTang Haojin 160*7f37d55fSTang Haojin def utilityModule: ScalaModule 16172060888SJiawei Lin 162c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 16372060888SJiawei Lin rocketModule, 16472060888SJiawei Lin difftestModule, 16572060888SJiawei Lin huancunModule, 16615ee59e4Swakafa coupledL2Module, 1673c02ee8fSwakafa fudianModule, 168*7f37d55fSTang Haojin utilityModule, 169c5f31b5bSLinJiawei ) 1702905e463SZihao Yu 171*7f37d55fSTang Haojin} 172*7f37d55fSTang Haojin 173*7f37d55fSTang Haojinobject XiangShan extends XiangShanModule with SbtModule with HasChisel { 174*7f37d55fSTang Haojin 175*7f37d55fSTang Haojin override def millSourcePath = millOuterCtx.millSourcePath 176*7f37d55fSTang Haojin 177*7f37d55fSTang Haojin def rocketModule = rocketchip 178*7f37d55fSTang Haojin 179*7f37d55fSTang Haojin def difftestModule = difftest 180*7f37d55fSTang Haojin 181*7f37d55fSTang Haojin def huancunModule = huancun 182*7f37d55fSTang Haojin 183*7f37d55fSTang Haojin def coupledL2Module = coupledL2 184*7f37d55fSTang Haojin 185*7f37d55fSTang Haojin def fudianModule = fudian 186*7f37d55fSTang Haojin 187*7f37d55fSTang Haojin def utilityModule = utility 188*7f37d55fSTang Haojin 189*7f37d55fSTang Haojin override def forkArgs = Seq("-Xmx20G", "-Xss256m") 190*7f37d55fSTang Haojin 191cf9b35a7SYinan Xu object test extends SbtModuleTests with TestModule.ScalaTest { 192*7f37d55fSTang Haojin override def forkArgs = XiangShan.forkArgs 1936f021e01SJiawei Lin 194718a511dSLinJiawei override def ivyDeps = super.ivyDeps() ++ Agg( 195*7f37d55fSTang Haojin defaultVersions("chiseltest"), 1966aea7ec5SLinJiawei ) 197fc85214eSLinJiawei } 198718a511dSLinJiawei 1992905e463SZihao Yu} 200