1c6d43980SLemover/*************************************************************************************** 2*e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC) 3*e3da8badSTang Haojin* Copyright (c) 2020-2024 Institute of Computing Technology, Chinese Academy of Sciences 4f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 5c6d43980SLemover* 6c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 7c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 8c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 9c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 10c6d43980SLemover* 11c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 12c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 13c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 14c6d43980SLemover* 15c6d43980SLemover* See the Mulan PSL v2 for more details. 16c6d43980SLemover***************************************************************************************/ 17c6d43980SLemover 182102afb5SLinJiaweiimport mill._ 19718a511dSLinJiaweiimport scalalib._ 2072060888SJiawei Linimport $file.`rocket-chip`.common 218891a219SYinan Xuimport $file.`rocket-chip`.cde.common 2272060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build 237f37d55fSTang Haojinimport $file.huancun.common 247f37d55fSTang Haojinimport $file.coupledL2.common 2578a8cd25Szhanglinjuanimport $file.openLLC.common 262905e463SZihao Yu 27195ef4a5STang Haojinval defaultScalaVersion = "2.13.14" 2872060888SJiawei Lin 29*e3da8badSTang Haojindef defaultVersions = Map( 30ae0295f4STang Haojin "chisel" -> ivy"org.chipsalliance::chisel:6.5.0", 31ae0295f4STang Haojin "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0", 32195ef4a5STang Haojin "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:6.0.0" 33c21bff99SJiawei Lin) 347f37d55fSTang Haojin 35*e3da8badSTang Haojintrait HasChisel extends SbtModule { 367f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 377f37d55fSTang Haojin 387f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 397f37d55fSTang Haojin 40*e3da8badSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 417f37d55fSTang Haojin 42*e3da8badSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 437f37d55fSTang Haojin 447f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 457f37d55fSTang Haojin 467f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 477f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 487f37d55fSTang Haojin 49*e3da8badSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 507f37d55fSTang Haojin 517f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 52c21bff99SJiawei Lin} 53c21bff99SJiawei Lin 54*e3da8badSTang Haojinobject rocketchip 557f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.RocketChipModule 5651e45dbbSTang Haojin 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 63*e3da8badSTang Haojin def hardfloatModule = hardfloat 6472060888SJiawei Lin 657f37d55fSTang Haojin def cdeModule = cde 6672060888SJiawei Lin 67195ef4a5STang Haojin def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0" 687f37d55fSTang Haojin 69195ef4a5STang Haojin def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7" 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 82*e3da8badSTang Haojin object hardfloat 837f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 842102afb5SLinJiawei 857f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 86718a511dSLinJiawei 877f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 8872060888SJiawei Lin 8972060888SJiawei Lin } 9072060888SJiawei Lin 91*e3da8badSTang Haojin object cde 92*e3da8badSTang Haojin extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 93718a511dSLinJiawei 947f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 957f37d55fSTang Haojin 967f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 977f37d55fSTang Haojin } 98718a511dSLinJiawei} 99718a511dSLinJiawei 100*e3da8badSTang Haojinobject utility extends HasChisel { 1013c02ee8fSwakafa 1023c02ee8fSwakafa override def millSourcePath = os.pwd / "utility" 1033c02ee8fSwakafa 1043c02ee8fSwakafa override def moduleDeps = super.moduleDeps ++ Seq( 105*e3da8badSTang Haojin rocketchip 1063c02ee8fSwakafa ) 1077f37d55fSTang Haojin 1087f37d55fSTang Haojin} 1097f37d55fSTang Haojin 110*e3da8badSTang Haojinobject yunsuan extends HasChisel { 1114b0d80d8SXuan Hu 1124b0d80d8SXuan Hu override def millSourcePath = os.pwd / "yunsuan" 1134b0d80d8SXuan Hu 1144b0d80d8SXuan Hu} 1154b0d80d8SXuan Hu 116*e3da8badSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with HasChisel { 1177f37d55fSTang Haojin 1187f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 1197f37d55fSTang Haojin 120*e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 1217f37d55fSTang Haojin 122*e3da8badSTang Haojin def utilityModule: ScalaModule = utility 1237f37d55fSTang Haojin 1247f37d55fSTang Haojin} 1257f37d55fSTang Haojin 126*e3da8badSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 1277f37d55fSTang Haojin 1287f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 1297f37d55fSTang Haojin 130*e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 1317f37d55fSTang Haojin 132*e3da8badSTang Haojin def utilityModule: ScalaModule = utility 1337f37d55fSTang Haojin 134*e3da8badSTang Haojin def huancunModule: ScalaModule = huancun 1357f37d55fSTang Haojin 1367f37d55fSTang Haojin} 1377f37d55fSTang Haojin 138*e3da8badSTang Haojinobject openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel { 13978a8cd25Szhanglinjuan 14078a8cd25Szhanglinjuan override def millSourcePath = os.pwd / "openLLC" 14178a8cd25Szhanglinjuan 142*e3da8badSTang Haojin def coupledL2Module: ScalaModule = coupledL2 14378a8cd25Szhanglinjuan 144*e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 14578a8cd25Szhanglinjuan 146*e3da8badSTang Haojin def utilityModule: ScalaModule = utility 14778a8cd25Szhanglinjuan} 14878a8cd25Szhanglinjuan 149*e3da8badSTang Haojinobject difftest extends HasChisel { 1507f37d55fSTang Haojin 1517f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 1527f37d55fSTang Haojin 1537f37d55fSTang Haojin} 1547f37d55fSTang Haojin 155*e3da8badSTang Haojinobject fudian extends HasChisel { 1567f37d55fSTang Haojin 1577f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 1587f37d55fSTang Haojin 1593c02ee8fSwakafa} 1603c02ee8fSwakafa 161*e3da8badSTang Haojinobject macros extends ScalaModule { 162039cdc35SXuan Hu 163039cdc35SXuan Hu override def millSourcePath = os.pwd / "macros" 164039cdc35SXuan Hu 165039cdc35SXuan Hu override def scalaVersion: T[String] = T(defaultScalaVersion) 166039cdc35SXuan Hu 167039cdc35SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}") 168039cdc35SXuan Hu 169039cdc35SXuan Hu def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 170039cdc35SXuan Hu} 171039cdc35SXuan Hu 17272060888SJiawei Lin// extends this trait to use XiangShan in other projects 1737f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 17472060888SJiawei Lin 1757f37d55fSTang Haojin def rocketModule: ScalaModule 17672060888SJiawei Lin 1777f37d55fSTang Haojin def difftestModule: ScalaModule 178718a511dSLinJiawei 1797f37d55fSTang Haojin def huancunModule: ScalaModule 180718a511dSLinJiawei 1817f37d55fSTang Haojin def coupledL2Module: ScalaModule 1827f37d55fSTang Haojin 18378a8cd25Szhanglinjuan def openLLCModule: ScalaModule 18478a8cd25Szhanglinjuan 1857f37d55fSTang Haojin def fudianModule: ScalaModule 1867f37d55fSTang Haojin 1877f37d55fSTang Haojin def utilityModule: ScalaModule 18872060888SJiawei Lin 18983ba63b3SXuan Hu def yunsuanModule: ScalaModule 190718a511dSLinJiawei 191039cdc35SXuan Hu def macrosModule: ScalaModule 192039cdc35SXuan Hu 193c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 19472060888SJiawei Lin rocketModule, 19572060888SJiawei Lin difftestModule, 19672060888SJiawei Lin huancunModule, 19715ee59e4Swakafa coupledL2Module, 19878a8cd25Szhanglinjuan openLLCModule, 19930056234SZhangZifei yunsuanModule, 2003c02ee8fSwakafa fudianModule, 2017f37d55fSTang Haojin utilityModule, 202039cdc35SXuan Hu macrosModule, 203c5f31b5bSLinJiawei ) 2042905e463SZihao Yu 2054b0d80d8SXuan Hu val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2064b0d80d8SXuan Hu val envPATH = sys.env("PATH") + ":" + resourcesPATH 2076f021e01SJiawei Lin 2084b0d80d8SXuan Hu override def forkEnv = Map("PATH" -> envPATH) 2097f37d55fSTang Haojin} 2107f37d55fSTang Haojin 211*e3da8badSTang Haojinobject xiangshan extends XiangShanModule with HasChisel { 2127f37d55fSTang Haojin 21351e45dbbSTang Haojin override def millSourcePath = os.pwd 2147f37d55fSTang Haojin 215*e3da8badSTang Haojin def rocketModule = rocketchip 2167f37d55fSTang Haojin 217*e3da8badSTang Haojin def difftestModule = difftest 2187f37d55fSTang Haojin 219*e3da8badSTang Haojin def huancunModule = huancun 2207f37d55fSTang Haojin 221*e3da8badSTang Haojin def coupledL2Module = coupledL2 2227f37d55fSTang Haojin 223*e3da8badSTang Haojin def openLLCModule = openLLC 22478a8cd25Szhanglinjuan 225*e3da8badSTang Haojin def fudianModule = fudian 2267f37d55fSTang Haojin 227*e3da8badSTang Haojin def utilityModule = utility 2287f37d55fSTang Haojin 229*e3da8badSTang Haojin def yunsuanModule = yunsuan 23083ba63b3SXuan Hu 231039cdc35SXuan Hu def macrosModule = macros 232039cdc35SXuan Hu 2335fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 2347f37d55fSTang Haojin 23583ba63b3SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg( 236*e3da8badSTang Haojin defaultVersions("chiseltest"), 23783ba63b3SXuan Hu ) 23883ba63b3SXuan Hu 239*e3da8badSTang Haojin override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 240*e3da8badSTang Haojin 241cf9b35a7SYinan Xu object test extends SbtModuleTests with TestModule.ScalaTest { 2425fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 24351e45dbbSTang Haojin 244718a511dSLinJiawei override def ivyDeps = super.ivyDeps() ++ Agg( 245*e3da8badSTang Haojin defaultVersions("chiseltest") 2466aea7ec5SLinJiawei ) 2474364f1d0SHaojin Tang 248*e3da8badSTang Haojin override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 249*e3da8badSTang Haojin 2504364f1d0SHaojin Tang val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2514364f1d0SHaojin Tang val envPATH = sys.env("PATH") + ":" + resourcesPATH 2524364f1d0SHaojin Tang 2534364f1d0SHaojin Tang override def forkEnv = Map("PATH" -> envPATH) 254fc85214eSLinJiawei } 2552905e463SZihao Yu} 256