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 227f37d55fSTang Haojinimport $file.huancun.common 237f37d55fSTang Haojinimport $file.coupledL2.common 242905e463SZihao Yu 257f37d55fSTang Haojinval defaultScalaVersion = "2.13.10" 2672060888SJiawei Lin 277f37d55fSTang Haojinval defaultVersions = Map( 287f37d55fSTang Haojin "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.0", 297f37d55fSTang Haojin "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0", 307f37d55fSTang Haojin "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2", 31c21bff99SJiawei Lin) 327f37d55fSTang Haojin 337f37d55fSTang Haojintrait HasChisel extends ScalaModule { 347f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 357f37d55fSTang Haojin 367f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 377f37d55fSTang Haojin 387f37d55fSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 397f37d55fSTang Haojin 407f37d55fSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 417f37d55fSTang Haojin 427f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 437f37d55fSTang Haojin 447f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 457f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 467f37d55fSTang Haojin 477f37d55fSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 487f37d55fSTang Haojin 497f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 50c21bff99SJiawei Lin} 51c21bff99SJiawei Lin 527f37d55fSTang Haojinobject rocketchip extends RocketChip 5372060888SJiawei Lin 547f37d55fSTang Haojintrait RocketChip 557f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.RocketChipModule 567f37d55fSTang Haojin with SbtModule with HasChisel { 577f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 5872060888SJiawei Lin 597f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" 6072060888SJiawei Lin 617f37d55fSTang Haojin def macrosModule = macros 6272060888SJiawei Lin 637f37d55fSTang Haojin def hardfloatModule = hardfloat 6472060888SJiawei Lin 657f37d55fSTang Haojin def cdeModule = cde 6672060888SJiawei Lin 677f37d55fSTang Haojin def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.0" 687f37d55fSTang Haojin 697f37d55fSTang Haojin def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.5" 707f37d55fSTang Haojin 717f37d55fSTang Haojin object macros extends Macros 727f37d55fSTang Haojin 737f37d55fSTang Haojin trait Macros 747f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.MacrosModule 757f37d55fSTang Haojin with SbtModule { 767f37d55fSTang Haojin 777f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 787f37d55fSTang Haojin 797f37d55fSTang Haojin def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 802905e463SZihao Yu } 812905e463SZihao Yu 827f37d55fSTang Haojin object hardfloat extends Hardfloat 832102afb5SLinJiawei 847f37d55fSTang Haojin trait Hardfloat 857f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 862102afb5SLinJiawei 877f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 88718a511dSLinJiawei 897f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 9072060888SJiawei Lin 9172060888SJiawei Lin } 9272060888SJiawei Lin 937f37d55fSTang Haojin object cde extends CDE 9472060888SJiawei Lin 957f37d55fSTang Haojin trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 96718a511dSLinJiawei 977f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 987f37d55fSTang Haojin 997f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 1007f37d55fSTang Haojin } 101718a511dSLinJiawei} 102718a511dSLinJiawei 1037f37d55fSTang 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 ) 1107f37d55fSTang Haojin 1117f37d55fSTang Haojin} 1127f37d55fSTang Haojin 113*4b0d80d8SXuan Huobject yunsuan extends XSModule with SbtModule { 114*4b0d80d8SXuan Hu 115*4b0d80d8SXuan Hu override def millSourcePath = os.pwd / "yunsuan" 116*4b0d80d8SXuan Hu 117*4b0d80d8SXuan Hu} 118*4b0d80d8SXuan Hu 1197f37d55fSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with SbtModule with HasChisel { 1207f37d55fSTang Haojin 1217f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 1227f37d55fSTang Haojin 1237f37d55fSTang Haojin def rocketModule: ScalaModule = rocketchip 1247f37d55fSTang Haojin 1257f37d55fSTang Haojin def utilityModule: ScalaModule = utility 1267f37d55fSTang Haojin 1277f37d55fSTang Haojin} 1287f37d55fSTang Haojin 1297f37d55fSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with SbtModule with HasChisel { 1307f37d55fSTang Haojin 1317f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 1327f37d55fSTang Haojin 1337f37d55fSTang Haojin def rocketModule: ScalaModule = rocketchip 1347f37d55fSTang Haojin 1357f37d55fSTang Haojin def utilityModule: ScalaModule = utility 1367f37d55fSTang Haojin 1377f37d55fSTang Haojin def huancunModule: ScalaModule = huancun 1387f37d55fSTang Haojin 1397f37d55fSTang Haojin} 1407f37d55fSTang Haojin 1417f37d55fSTang Haojinobject difftest extends SbtModule with HasChisel { 1427f37d55fSTang Haojin 1437f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 1447f37d55fSTang Haojin 1457f37d55fSTang Haojin} 1467f37d55fSTang Haojin 1477f37d55fSTang Haojinobject fudian extends SbtModule with HasChisel { 1487f37d55fSTang Haojin 1497f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 1507f37d55fSTang Haojin 1513c02ee8fSwakafa} 1523c02ee8fSwakafa 15372060888SJiawei Lin// extends this trait to use XiangShan in other projects 1547f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 15572060888SJiawei Lin 1567f37d55fSTang Haojin def rocketModule: ScalaModule 15772060888SJiawei Lin 1587f37d55fSTang Haojin def difftestModule: ScalaModule 159718a511dSLinJiawei 1607f37d55fSTang Haojin def huancunModule: ScalaModule 161718a511dSLinJiawei 1627f37d55fSTang Haojin def coupledL2Module: ScalaModule 1637f37d55fSTang Haojin 1647f37d55fSTang Haojin def fudianModule: ScalaModule 1657f37d55fSTang Haojin 1667f37d55fSTang Haojin def utilityModule: ScalaModule 16772060888SJiawei Lin 16830056234SZhangZifei def yunsuanModule: PublishModule 169718a511dSLinJiawei 170c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 17172060888SJiawei Lin rocketModule, 17272060888SJiawei Lin difftestModule, 17372060888SJiawei Lin huancunModule, 17415ee59e4Swakafa coupledL2Module, 17530056234SZhangZifei yunsuanModule, 1763c02ee8fSwakafa fudianModule, 1777f37d55fSTang Haojin utilityModule, 178c5f31b5bSLinJiawei ) 1792905e463SZihao Yu 180*4b0d80d8SXuan Hu val resourcesPATH = os.pwd.toString() + "/src/main/resources" 181*4b0d80d8SXuan Hu val envPATH = sys.env("PATH") + ":" + resourcesPATH 1826f021e01SJiawei Lin 183*4b0d80d8SXuan Hu override def forkEnv = Map("PATH" -> envPATH) 184*4b0d80d8SXuan Hu 185*4b0d80d8SXuan Hu override def ivyDeps = super.ivyDeps() ++ Seq(ivys.chiseltest) 1867f37d55fSTang Haojin} 1877f37d55fSTang Haojin 1887f37d55fSTang Haojinobject XiangShan extends XiangShanModule with SbtModule with HasChisel { 1897f37d55fSTang Haojin 1907f37d55fSTang Haojin override def millSourcePath = millOuterCtx.millSourcePath 1917f37d55fSTang Haojin 1927f37d55fSTang Haojin def rocketModule = rocketchip 1937f37d55fSTang Haojin 1947f37d55fSTang Haojin def difftestModule = difftest 1957f37d55fSTang Haojin 1967f37d55fSTang Haojin def huancunModule = huancun 1977f37d55fSTang Haojin 1987f37d55fSTang Haojin def coupledL2Module = coupledL2 1997f37d55fSTang Haojin 2007f37d55fSTang Haojin def fudianModule = fudian 2017f37d55fSTang Haojin 2027f37d55fSTang Haojin def utilityModule = utility 2037f37d55fSTang Haojin 2047f37d55fSTang Haojin override def forkArgs = Seq("-Xmx20G", "-Xss256m") 2057f37d55fSTang Haojin 206cf9b35a7SYinan Xu object test extends SbtModuleTests with TestModule.ScalaTest { 2077f37d55fSTang Haojin override def forkArgs = XiangShan.forkArgs 2086f021e01SJiawei Lin 2097720a376Sfdy override def forkEnv = m.forkEnv 2107720a376Sfdy 211718a511dSLinJiawei override def ivyDeps = super.ivyDeps() ++ Agg( 2127f37d55fSTang Haojin defaultVersions("chiseltest"), 2136aea7ec5SLinJiawei ) 214fc85214eSLinJiawei } 215718a511dSLinJiawei 2162905e463SZihao Yu} 217