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 2478a8cd25Szhanglinjuanimport $file.openLLC.common 252905e463SZihao Yu 26195ef4a5STang Haojinval defaultScalaVersion = "2.13.14" 2772060888SJiawei Lin 28084afb77STang Haojindef defaultVersions(chiselVersion: String) = chiselVersion match { 29084afb77STang Haojin case "chisel" => 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 ) 34084afb77STang Haojin case "chisel3" => Map( 35195ef4a5STang Haojin "chisel" -> ivy"edu.berkeley.cs::chisel3:3.6.1", 36195ef4a5STang Haojin "chisel-plugin" -> ivy"edu.berkeley.cs:::chisel3-plugin:3.6.1", 37084afb77STang Haojin "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:0.6.2" 38084afb77STang Haojin ) 39084afb77STang Haojin} 407f37d55fSTang Haojin 4151e45dbbSTang Haojintrait HasChisel extends SbtModule with Cross.Module[String] { 427f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 437f37d55fSTang Haojin 447f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 457f37d55fSTang Haojin 4651e45dbbSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel")) 477f37d55fSTang Haojin 4851e45dbbSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions(crossValue)("chisel-plugin")) 497f37d55fSTang Haojin 507f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 517f37d55fSTang Haojin 527f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 537f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 547f37d55fSTang Haojin 55*039cdc35SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) ++ Agg(ivy"scala-lang:scala-compiler:2.13.10") 567f37d55fSTang Haojin 577f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 58c21bff99SJiawei Lin} 59c21bff99SJiawei Lin 6051e45dbbSTang Haojinobject rocketchip extends Cross[RocketChip]("chisel", "chisel3") 6172060888SJiawei Lin 627f37d55fSTang Haojintrait RocketChip 637f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.RocketChipModule 6451e45dbbSTang Haojin with HasChisel { 657f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 6672060888SJiawei Lin 677f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" 6872060888SJiawei Lin 697f37d55fSTang Haojin def macrosModule = macros 7072060888SJiawei Lin 7151e45dbbSTang Haojin def hardfloatModule = hardfloat(crossValue) 7272060888SJiawei Lin 737f37d55fSTang Haojin def cdeModule = cde 7472060888SJiawei Lin 75195ef4a5STang Haojin def mainargsIvy = ivy"com.lihaoyi::mainargs:0.7.0" 767f37d55fSTang Haojin 77195ef4a5STang Haojin def json4sJacksonIvy = ivy"org.json4s::json4s-jackson:4.0.7" 787f37d55fSTang Haojin 797f37d55fSTang Haojin object macros extends Macros 807f37d55fSTang Haojin 817f37d55fSTang Haojin trait Macros 827f37d55fSTang Haojin extends millbuild.`rocket-chip`.common.MacrosModule 837f37d55fSTang Haojin with SbtModule { 847f37d55fSTang Haojin 857f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 867f37d55fSTang Haojin 877f37d55fSTang Haojin def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 882905e463SZihao Yu } 892905e463SZihao Yu 9051e45dbbSTang Haojin object hardfloat extends Cross[Hardfloat](crossValue) 912102afb5SLinJiawei 927f37d55fSTang Haojin trait Hardfloat 937f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 942102afb5SLinJiawei 957f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 96718a511dSLinJiawei 977f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 9872060888SJiawei Lin 9972060888SJiawei Lin } 10072060888SJiawei Lin 1017f37d55fSTang Haojin object cde extends CDE 10272060888SJiawei Lin 1037f37d55fSTang Haojin trait CDE extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 104718a511dSLinJiawei 1057f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 1067f37d55fSTang Haojin 1077f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 1087f37d55fSTang Haojin } 109718a511dSLinJiawei} 110718a511dSLinJiawei 11151e45dbbSTang Haojinobject utility extends Cross[Utility]("chisel", "chisel3") 11251e45dbbSTang Haojintrait Utility extends HasChisel { 1133c02ee8fSwakafa 1143c02ee8fSwakafa override def millSourcePath = os.pwd / "utility" 1153c02ee8fSwakafa 1163c02ee8fSwakafa override def moduleDeps = super.moduleDeps ++ Seq( 11751e45dbbSTang Haojin rocketchip(crossValue) 1183c02ee8fSwakafa ) 1197f37d55fSTang Haojin 1207f37d55fSTang Haojin} 1217f37d55fSTang Haojin 1226ce10964SXuan Huobject yunsuan extends Cross[YunSuan]("chisel", "chisel3") 1236ce10964SXuan Hutrait YunSuan extends HasChisel { 1244b0d80d8SXuan Hu 1254b0d80d8SXuan Hu override def millSourcePath = os.pwd / "yunsuan" 1264b0d80d8SXuan Hu 1274b0d80d8SXuan Hu} 1284b0d80d8SXuan Hu 12951e45dbbSTang Haojinobject huancun extends Cross[HuanCun]("chisel", "chisel3") 13051e45dbbSTang Haojintrait HuanCun extends millbuild.huancun.common.HuanCunModule with HasChisel { 1317f37d55fSTang Haojin 1327f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 1337f37d55fSTang Haojin 13451e45dbbSTang Haojin def rocketModule: ScalaModule = rocketchip(crossValue) 1357f37d55fSTang Haojin 13651e45dbbSTang Haojin def utilityModule: ScalaModule = utility(crossValue) 1377f37d55fSTang Haojin 1387f37d55fSTang Haojin} 1397f37d55fSTang Haojin 14051e45dbbSTang Haojinobject coupledL2 extends Cross[CoupledL2]("chisel", "chisel3") 14151e45dbbSTang Haojintrait CoupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 1427f37d55fSTang Haojin 1437f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 1447f37d55fSTang Haojin 14551e45dbbSTang Haojin def rocketModule: ScalaModule = rocketchip(crossValue) 1467f37d55fSTang Haojin 14751e45dbbSTang Haojin def utilityModule: ScalaModule = utility(crossValue) 1487f37d55fSTang Haojin 14951e45dbbSTang Haojin def huancunModule: ScalaModule = huancun(crossValue) 1507f37d55fSTang Haojin 1517f37d55fSTang Haojin} 1527f37d55fSTang Haojin 15378a8cd25Szhanglinjuanobject openLLC extends Cross[OpenLLC]("chisel", "chisel3") 15478a8cd25Szhanglinjuantrait OpenLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel { 15578a8cd25Szhanglinjuan 15678a8cd25Szhanglinjuan override def millSourcePath = os.pwd / "openLLC" 15778a8cd25Szhanglinjuan 15878a8cd25Szhanglinjuan def coupledL2Module: ScalaModule = coupledL2(crossValue) 15978a8cd25Szhanglinjuan 16078a8cd25Szhanglinjuan def rocketModule: ScalaModule = rocketchip(crossValue) 16178a8cd25Szhanglinjuan 16278a8cd25Szhanglinjuan def utilityModule: ScalaModule = utility(crossValue) 16378a8cd25Szhanglinjuan} 16478a8cd25Szhanglinjuan 16551e45dbbSTang Haojinobject difftest extends Cross[Difftest]("chisel", "chisel3") 16651e45dbbSTang Haojintrait Difftest extends HasChisel { 1677f37d55fSTang Haojin 1687f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 1697f37d55fSTang Haojin 1707f37d55fSTang Haojin} 1717f37d55fSTang Haojin 17251e45dbbSTang Haojinobject fudian extends Cross[FuDian]("chisel", "chisel3") 17351e45dbbSTang Haojintrait FuDian extends HasChisel { 1747f37d55fSTang Haojin 1757f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 1767f37d55fSTang Haojin 1773c02ee8fSwakafa} 1783c02ee8fSwakafa 179*039cdc35SXuan Huobject macros extends Macros 180*039cdc35SXuan Hutrait Macros extends ScalaModule { 181*039cdc35SXuan Hu 182*039cdc35SXuan Hu override def millSourcePath = os.pwd / "macros" 183*039cdc35SXuan Hu 184*039cdc35SXuan Hu override def scalaVersion: T[String] = T(defaultScalaVersion) 185*039cdc35SXuan Hu 186*039cdc35SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}") 187*039cdc35SXuan Hu 188*039cdc35SXuan Hu def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 189*039cdc35SXuan Hu} 190*039cdc35SXuan Hu 19172060888SJiawei Lin// extends this trait to use XiangShan in other projects 1927f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 19372060888SJiawei Lin 1947f37d55fSTang Haojin def rocketModule: ScalaModule 19572060888SJiawei Lin 1967f37d55fSTang Haojin def difftestModule: ScalaModule 197718a511dSLinJiawei 1987f37d55fSTang Haojin def huancunModule: ScalaModule 199718a511dSLinJiawei 2007f37d55fSTang Haojin def coupledL2Module: ScalaModule 2017f37d55fSTang Haojin 20278a8cd25Szhanglinjuan def openLLCModule: ScalaModule 20378a8cd25Szhanglinjuan 2047f37d55fSTang Haojin def fudianModule: ScalaModule 2057f37d55fSTang Haojin 2067f37d55fSTang Haojin def utilityModule: ScalaModule 20772060888SJiawei Lin 20883ba63b3SXuan Hu def yunsuanModule: ScalaModule 209718a511dSLinJiawei 210*039cdc35SXuan Hu def macrosModule: ScalaModule 211*039cdc35SXuan Hu 212c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 21372060888SJiawei Lin rocketModule, 21472060888SJiawei Lin difftestModule, 21572060888SJiawei Lin huancunModule, 21615ee59e4Swakafa coupledL2Module, 21778a8cd25Szhanglinjuan openLLCModule, 21830056234SZhangZifei yunsuanModule, 2193c02ee8fSwakafa fudianModule, 2207f37d55fSTang Haojin utilityModule, 221*039cdc35SXuan Hu macrosModule, 222c5f31b5bSLinJiawei ) 2232905e463SZihao Yu 2244b0d80d8SXuan Hu val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2254b0d80d8SXuan Hu val envPATH = sys.env("PATH") + ":" + resourcesPATH 2266f021e01SJiawei Lin 2274b0d80d8SXuan Hu override def forkEnv = Map("PATH" -> envPATH) 2287f37d55fSTang Haojin} 2297f37d55fSTang Haojin 23051e45dbbSTang Haojinobject xiangshan extends Cross[XiangShan]("chisel", "chisel3") 23151e45dbbSTang Haojintrait XiangShan extends XiangShanModule with HasChisel { 2327f37d55fSTang Haojin 23351e45dbbSTang Haojin override def millSourcePath = os.pwd 2347f37d55fSTang Haojin 23551e45dbbSTang Haojin def rocketModule = rocketchip(crossValue) 2367f37d55fSTang Haojin 23751e45dbbSTang Haojin def difftestModule = difftest(crossValue) 2387f37d55fSTang Haojin 23951e45dbbSTang Haojin def huancunModule = huancun(crossValue) 2407f37d55fSTang Haojin 24151e45dbbSTang Haojin def coupledL2Module = coupledL2(crossValue) 2427f37d55fSTang Haojin 24378a8cd25Szhanglinjuan def openLLCModule = openLLC(crossValue) 24478a8cd25Szhanglinjuan 24551e45dbbSTang Haojin def fudianModule = fudian(crossValue) 2467f37d55fSTang Haojin 24751e45dbbSTang Haojin def utilityModule = utility(crossValue) 2487f37d55fSTang Haojin 2496ce10964SXuan Hu def yunsuanModule = yunsuan(crossValue) 25083ba63b3SXuan Hu 251*039cdc35SXuan Hu def macrosModule = macros 252*039cdc35SXuan Hu 2535fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 2547f37d55fSTang Haojin 25551e45dbbSTang Haojin override def sources = T.sources { 2565931ace3STang Haojin super.sources() ++ Seq(PathRef(millSourcePath / "src" / crossValue / "main" / "scala")) 257fc85214eSLinJiawei } 258718a511dSLinJiawei 25983ba63b3SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg( 2606ce10964SXuan Hu defaultVersions(crossValue)("chiseltest"), 26183ba63b3SXuan Hu ) 26283ba63b3SXuan Hu 2632905e463SZihao Yu object test extends SbtModuleTests with TestModule.ScalaTest { 2645fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 26551e45dbbSTang Haojin 26651e45dbbSTang Haojin override def sources = T.sources { 267195ef4a5STang Haojin super.sources() ++ Seq(PathRef(this.millSourcePath / "src" / crossValue / "test" / "scala")) 26851e45dbbSTang Haojin } 2692905e463SZihao Yu 2702905e463SZihao Yu override def ivyDeps = super.ivyDeps() ++ Agg( 27151e45dbbSTang Haojin defaultVersions(crossValue)("chiseltest") 2726aea7ec5SLinJiawei ) 2734364f1d0SHaojin Tang 2744364f1d0SHaojin Tang val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2754364f1d0SHaojin Tang val envPATH = sys.env("PATH") + ":" + resourcesPATH 2764364f1d0SHaojin Tang 2774364f1d0SHaojin Tang override def forkEnv = Map("PATH" -> envPATH) 2782905e463SZihao Yu } 2792905e463SZihao Yu} 280