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 27*51e45dbbSTang Haojindef defaultVersions(chiselVersion: String) = Map( 28*51e45dbbSTang Haojin "chisel" -> (chiselVersion match { 29*51e45dbbSTang Haojin case "chisel" => ivy"org.chipsalliance::chisel:6.0.0-M3" 30*51e45dbbSTang Haojin case "chisel3" => ivy"edu.berkeley.cs::chisel3:3.6.0" 31*51e45dbbSTang Haojin }), 32*51e45dbbSTang Haojin "chisel-plugin" -> (chiselVersion match { 33*51e45dbbSTang Haojin case "chisel" => ivy"org.chipsalliance:::chisel-plugin:6.0.0-M3" 34*51e45dbbSTang Haojin case "chisel3" => ivy"edu.berkeley.cs:::chisel3-plugin:3.6.0" 35*51e45dbbSTang Haojin }), 36*51e45dbbSTang Haojin "chiseltest" -> (chiselVersion match { 37*51e45dbbSTang Haojin case "chisel" => ivy"edu.berkeley.cs::chiseltest:5.0.2" 38*51e45dbbSTang Haojin case "chisel3" => ivy"edu.berkeley.cs::chiseltest:0.6.2" 39*51e45dbbSTang Haojin }) 40c21bff99SJiawei Lin) 417f37d55fSTang Haojin 42*51e45dbbSTang Haojintrait HasChisel extends SbtModule with Cross.Module[String] { 437f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 447f37d55fSTang Haojin 457f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 467f37d55fSTang Haojin 47*51e45dbbSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel")) 487f37d55fSTang Haojin 49*51e45dbbSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel-plugin")) 507f37d55fSTang Haojin 517f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 527f37d55fSTang Haojin 537f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 547f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 557f37d55fSTang Haojin 567f37d55fSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 577f37d55fSTang Haojin 587f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 59c21bff99SJiawei Lin} 60c21bff99SJiawei Lin 61*51e45dbbSTang Haojinobject rocketchip extends Cross[RocketChip]("chisel", "chisel3") 6272060888SJiawei Lin 637f37d55fSTang Haojintrait RocketChip 647f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.RocketChipModule 65*51e45dbbSTang Haojin with HasChisel { 667f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 6772060888SJiawei Lin 687f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" 6972060888SJiawei Lin 707f37d55fSTang Haojin def macrosModule = macros 7172060888SJiawei Lin 72*51e45dbbSTang Haojin def hardfloatModule = hardfloat(crossValue) 7372060888SJiawei Lin 747f37d55fSTang Haojin def cdeModule = cde 7572060888SJiawei Lin 76*51e45dbbSTang Haojin def mainargsIvy = ivy"com.lihaoyi::mainargs:0.5.4" 777f37d55fSTang Haojin 78*51e45dbbSTang Haojin def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.6" 797f37d55fSTang Haojin 807f37d55fSTang Haojin object macros extends Macros 817f37d55fSTang Haojin 827f37d55fSTang Haojin trait Macros 837f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.MacrosModule 847f37d55fSTang Haojin with SbtModule { 857f37d55fSTang Haojin 867f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 877f37d55fSTang Haojin 887f37d55fSTang Haojin def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 892905e463SZihao Yu } 902905e463SZihao Yu 91*51e45dbbSTang Haojin object hardfloat extends Cross[Hardfloat](crossValue) 922102afb5SLinJiawei 937f37d55fSTang Haojin trait Hardfloat 947f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 952102afb5SLinJiawei 967f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 97718a511dSLinJiawei 987f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 9972060888SJiawei Lin 10072060888SJiawei Lin } 10172060888SJiawei Lin 1027f37d55fSTang Haojin object cde extends CDE 10372060888SJiawei Lin 1047f37d55fSTang Haojin trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 105718a511dSLinJiawei 1067f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 1077f37d55fSTang Haojin 1087f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 1097f37d55fSTang Haojin } 110718a511dSLinJiawei} 111718a511dSLinJiawei 112*51e45dbbSTang Haojinobject utility extends Cross[Utility]("chisel", "chisel3") 113*51e45dbbSTang Haojintrait Utility extends HasChisel { 1143c02ee8fSwakafa 1153c02ee8fSwakafa override def millSourcePath = os.pwd / "utility" 1163c02ee8fSwakafa 1173c02ee8fSwakafa override def moduleDeps = super.moduleDeps ++ Seq( 118*51e45dbbSTang Haojin rocketchip(crossValue) 1193c02ee8fSwakafa ) 1207f37d55fSTang Haojin 1217f37d55fSTang Haojin} 1227f37d55fSTang Haojin 123*51e45dbbSTang Haojinobject huancun extends Cross[HuanCun]("chisel", "chisel3") 124*51e45dbbSTang Haojintrait HuanCun extends millbuild.huancun.common.HuanCunModule with HasChisel { 1257f37d55fSTang Haojin 1267f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 1277f37d55fSTang Haojin 128*51e45dbbSTang Haojin def rocketModule: ScalaModule = rocketchip(crossValue) 1297f37d55fSTang Haojin 130*51e45dbbSTang Haojin def utilityModule: ScalaModule = utility(crossValue) 1317f37d55fSTang Haojin 1327f37d55fSTang Haojin} 1337f37d55fSTang Haojin 134*51e45dbbSTang Haojinobject coupledL2 extends Cross[CoupledL2]("chisel", "chisel3") 135*51e45dbbSTang Haojintrait CoupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 1367f37d55fSTang Haojin 1377f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 1387f37d55fSTang Haojin 139*51e45dbbSTang Haojin def rocketModule: ScalaModule = rocketchip(crossValue) 1407f37d55fSTang Haojin 141*51e45dbbSTang Haojin def utilityModule: ScalaModule = utility(crossValue) 1427f37d55fSTang Haojin 143*51e45dbbSTang Haojin def huancunModule: ScalaModule = huancun(crossValue) 1447f37d55fSTang Haojin 1457f37d55fSTang Haojin} 1467f37d55fSTang Haojin 147*51e45dbbSTang Haojinobject difftest extends Cross[Difftest]("chisel", "chisel3") 148*51e45dbbSTang Haojintrait Difftest extends HasChisel { 1497f37d55fSTang Haojin 1507f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 1517f37d55fSTang Haojin 1527f37d55fSTang Haojin} 1537f37d55fSTang Haojin 154*51e45dbbSTang Haojinobject fudian extends Cross[FuDian]("chisel", "chisel3") 155*51e45dbbSTang Haojintrait FuDian extends HasChisel { 1567f37d55fSTang Haojin 1577f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 1587f37d55fSTang Haojin 1593c02ee8fSwakafa} 1603c02ee8fSwakafa 16172060888SJiawei Lin// extends this trait to use XiangShan in other projects 1627f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 16372060888SJiawei Lin 1647f37d55fSTang Haojin def rocketModule: ScalaModule 16572060888SJiawei Lin 1667f37d55fSTang Haojin def difftestModule: ScalaModule 167718a511dSLinJiawei 1687f37d55fSTang Haojin def huancunModule: ScalaModule 169718a511dSLinJiawei 1707f37d55fSTang Haojin def coupledL2Module: ScalaModule 1717f37d55fSTang Haojin 1727f37d55fSTang Haojin def fudianModule: ScalaModule 1737f37d55fSTang Haojin 1747f37d55fSTang Haojin def utilityModule: ScalaModule 17572060888SJiawei Lin 176c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 17772060888SJiawei Lin rocketModule, 17872060888SJiawei Lin difftestModule, 17972060888SJiawei Lin huancunModule, 18015ee59e4Swakafa coupledL2Module, 1813c02ee8fSwakafa fudianModule, 1827f37d55fSTang Haojin utilityModule, 183c5f31b5bSLinJiawei ) 1842905e463SZihao Yu 1857f37d55fSTang Haojin} 1867f37d55fSTang Haojin 187*51e45dbbSTang Haojinobject xiangshan extends Cross[XiangShan]("chisel", "chisel3") 188*51e45dbbSTang Haojintrait XiangShan extends XiangShanModule with HasChisel { 1897f37d55fSTang Haojin 190*51e45dbbSTang Haojin override def millSourcePath = os.pwd 1917f37d55fSTang Haojin 192*51e45dbbSTang Haojin def rocketModule = rocketchip(crossValue) 1937f37d55fSTang Haojin 194*51e45dbbSTang Haojin def difftestModule = difftest(crossValue) 1957f37d55fSTang Haojin 196*51e45dbbSTang Haojin def huancunModule = huancun(crossValue) 1977f37d55fSTang Haojin 198*51e45dbbSTang Haojin def coupledL2Module = coupledL2(crossValue) 1997f37d55fSTang Haojin 200*51e45dbbSTang Haojin def fudianModule = fudian(crossValue) 2017f37d55fSTang Haojin 202*51e45dbbSTang Haojin def utilityModule = utility(crossValue) 2037f37d55fSTang Haojin 2047f37d55fSTang Haojin override def forkArgs = Seq("-Xmx20G", "-Xss256m") 2057f37d55fSTang Haojin 206*51e45dbbSTang Haojin override def sources = T.sources { 207*51e45dbbSTang Haojin super.sources() ++ Seq(PathRef(millSourcePath / s"src-${crossValue}" / "main" / "scala")) 208fc85214eSLinJiawei } 209718a511dSLinJiawei 210*51e45dbbSTang Haojin object test extends SbtModuleTests with TestModule.ScalaTest { 211*51e45dbbSTang Haojin override def forkArgs = Seq("-Xmx20G", "-Xss256m") 212*51e45dbbSTang Haojin 213*51e45dbbSTang Haojin override def sources = T.sources { 214*51e45dbbSTang Haojin super.sources() ++ Seq(PathRef(millSourcePath / s"src-${crossValue}" / "test" / "scala")) 215*51e45dbbSTang Haojin } 216*51e45dbbSTang Haojin 217*51e45dbbSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg( 218*51e45dbbSTang Haojin defaultVersions(crossValue)("chiseltest") 219*51e45dbbSTang Haojin ) 220*51e45dbbSTang Haojin } 2212905e463SZihao Yu} 222