1c6d43980SLemover/*************************************************************************************** 2e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC) 3e3da8badSTang 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 27ce34d21eSJiuyue Ma/* for publishVersion */ 28ce34d21eSJiuyue Maimport $ivy.`de.tototec::de.tobiasroeser.mill.vcs.version::0.4.0` 29ce34d21eSJiuyue Maimport de.tobiasroeser.mill.vcs.version.VcsVersion 30ce34d21eSJiuyue Maimport java.time.LocalDateTime 31ce34d21eSJiuyue Maimport java.time.format.DateTimeFormatter 32*26f0fb0dSJiuyue Maimport java.util.Locale 33ce34d21eSJiuyue Maimport scala.util.matching.Regex 34ce34d21eSJiuyue Ma 35195ef4a5STang Haojinval defaultScalaVersion = "2.13.14" 3672060888SJiawei Lin 37e3da8badSTang Haojindef defaultVersions = Map( 38ae0295f4STang Haojin "chisel" -> ivy"org.chipsalliance::chisel:6.5.0", 39ae0295f4STang Haojin "chisel-plugin" -> ivy"org.chipsalliance:::chisel-plugin:6.5.0", 40195ef4a5STang Haojin "chiseltest" -> ivy"edu.berkeley.cs::chiseltest:6.0.0" 41c21bff99SJiawei Lin) 427f37d55fSTang Haojin 43e3da8badSTang Haojintrait HasChisel extends SbtModule { 447f37d55fSTang Haojin def chiselModule: Option[ScalaModule] = None 457f37d55fSTang Haojin 467f37d55fSTang Haojin def chiselPluginJar: T[Option[PathRef]] = None 477f37d55fSTang Haojin 48e3da8badSTang Haojin def chiselIvy: Option[Dep] = Some(defaultVersions("chisel")) 497f37d55fSTang Haojin 50e3da8badSTang Haojin def chiselPluginIvy: Option[Dep] = Some(defaultVersions("chisel-plugin")) 517f37d55fSTang Haojin 527f37d55fSTang Haojin override def scalaVersion = defaultScalaVersion 537f37d55fSTang Haojin 547f37d55fSTang Haojin override def scalacOptions = super.scalacOptions() ++ 557f37d55fSTang Haojin Agg("-language:reflectiveCalls", "-Ymacro-annotations", "-Ytasty-reader") 567f37d55fSTang Haojin 57e3da8badSTang Haojin override def ivyDeps = super.ivyDeps() ++ Agg(chiselIvy.get) 587f37d55fSTang Haojin 597f37d55fSTang Haojin override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ Agg(chiselPluginIvy.get) 60c21bff99SJiawei Lin} 61c21bff99SJiawei Lin 62e3da8badSTang Haojinobject 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 71e3da8badSTang Haojin def hardfloatModule = hardfloat 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 90e3da8badSTang Haojin object hardfloat 917f37d55fSTang Haojin extends millbuild.`rocket-chip`.hardfloat.common.HardfloatModule with HasChisel { 922102afb5SLinJiawei 937f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 94718a511dSLinJiawei 957f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "hardfloat" / "hardfloat" 9672060888SJiawei Lin 9772060888SJiawei Lin } 9872060888SJiawei Lin 99e3da8badSTang Haojin object cde 100e3da8badSTang Haojin extends millbuild.`rocket-chip`.cde.common.CDEModule with ScalaModule { 101718a511dSLinJiawei 1027f37d55fSTang Haojin def scalaVersion: T[String] = T(defaultScalaVersion) 1037f37d55fSTang Haojin 1047f37d55fSTang Haojin override def millSourcePath = os.pwd / "rocket-chip" / "cde" / "cde" 1057f37d55fSTang Haojin } 106718a511dSLinJiawei} 107718a511dSLinJiawei 108e3da8badSTang Haojinobject utility extends HasChisel { 1093c02ee8fSwakafa 1103c02ee8fSwakafa override def millSourcePath = os.pwd / "utility" 1113c02ee8fSwakafa 1123c02ee8fSwakafa override def moduleDeps = super.moduleDeps ++ Seq( 113e3da8badSTang Haojin rocketchip 1143c02ee8fSwakafa ) 1157f37d55fSTang Haojin 1167f37d55fSTang Haojin} 1177f37d55fSTang Haojin 118e3da8badSTang Haojinobject yunsuan extends HasChisel { 1194b0d80d8SXuan Hu 1204b0d80d8SXuan Hu override def millSourcePath = os.pwd / "yunsuan" 1214b0d80d8SXuan Hu 1224b0d80d8SXuan Hu} 1234b0d80d8SXuan Hu 124e3da8badSTang Haojinobject huancun extends millbuild.huancun.common.HuanCunModule with HasChisel { 1257f37d55fSTang Haojin 1267f37d55fSTang Haojin override def millSourcePath = os.pwd / "huancun" 1277f37d55fSTang Haojin 128e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 1297f37d55fSTang Haojin 130e3da8badSTang Haojin def utilityModule: ScalaModule = utility 1317f37d55fSTang Haojin 1327f37d55fSTang Haojin} 1337f37d55fSTang Haojin 134e3da8badSTang Haojinobject coupledL2 extends millbuild.coupledL2.common.CoupledL2Module with HasChisel { 1357f37d55fSTang Haojin 1367f37d55fSTang Haojin override def millSourcePath = os.pwd / "coupledL2" 1377f37d55fSTang Haojin 138e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 1397f37d55fSTang Haojin 140e3da8badSTang Haojin def utilityModule: ScalaModule = utility 1417f37d55fSTang Haojin 142e3da8badSTang Haojin def huancunModule: ScalaModule = huancun 1437f37d55fSTang Haojin 1447f37d55fSTang Haojin} 1457f37d55fSTang Haojin 146e3da8badSTang Haojinobject openLLC extends millbuild.openLLC.common.OpenLLCModule with HasChisel { 14778a8cd25Szhanglinjuan 14878a8cd25Szhanglinjuan override def millSourcePath = os.pwd / "openLLC" 14978a8cd25Szhanglinjuan 150e3da8badSTang Haojin def coupledL2Module: ScalaModule = coupledL2 15178a8cd25Szhanglinjuan 152e3da8badSTang Haojin def rocketModule: ScalaModule = rocketchip 15378a8cd25Szhanglinjuan 154e3da8badSTang Haojin def utilityModule: ScalaModule = utility 15578a8cd25Szhanglinjuan} 15678a8cd25Szhanglinjuan 157e3da8badSTang Haojinobject difftest extends HasChisel { 1587f37d55fSTang Haojin 1597f37d55fSTang Haojin override def millSourcePath = os.pwd / "difftest" 1607f37d55fSTang Haojin 1617f37d55fSTang Haojin} 1627f37d55fSTang Haojin 163e3da8badSTang Haojinobject fudian extends HasChisel { 1647f37d55fSTang Haojin 1657f37d55fSTang Haojin override def millSourcePath = os.pwd / "fudian" 1667f37d55fSTang Haojin 1673c02ee8fSwakafa} 1683c02ee8fSwakafa 169e3da8badSTang Haojinobject macros extends ScalaModule { 170039cdc35SXuan Hu 171039cdc35SXuan Hu override def millSourcePath = os.pwd / "macros" 172039cdc35SXuan Hu 173039cdc35SXuan Hu override def scalaVersion: T[String] = T(defaultScalaVersion) 174039cdc35SXuan Hu 175039cdc35SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg(ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}") 176039cdc35SXuan Hu 177039cdc35SXuan Hu def scalaReflectIvy = ivy"org.scala-lang:scala-reflect:${defaultScalaVersion}" 178039cdc35SXuan Hu} 179039cdc35SXuan Hu 18072060888SJiawei Lin// extends this trait to use XiangShan in other projects 1817f37d55fSTang Haojintrait XiangShanModule extends ScalaModule { 18272060888SJiawei Lin 1837f37d55fSTang Haojin def rocketModule: ScalaModule 18472060888SJiawei Lin 1857f37d55fSTang Haojin def difftestModule: ScalaModule 186718a511dSLinJiawei 1877f37d55fSTang Haojin def huancunModule: ScalaModule 188718a511dSLinJiawei 1897f37d55fSTang Haojin def coupledL2Module: ScalaModule 1907f37d55fSTang Haojin 19178a8cd25Szhanglinjuan def openLLCModule: ScalaModule 19278a8cd25Szhanglinjuan 1937f37d55fSTang Haojin def fudianModule: ScalaModule 1947f37d55fSTang Haojin 1957f37d55fSTang Haojin def utilityModule: ScalaModule 19672060888SJiawei Lin 19783ba63b3SXuan Hu def yunsuanModule: ScalaModule 198718a511dSLinJiawei 199039cdc35SXuan Hu def macrosModule: ScalaModule 200039cdc35SXuan Hu 201c5f31b5bSLinJiawei override def moduleDeps = super.moduleDeps ++ Seq( 20272060888SJiawei Lin rocketModule, 20372060888SJiawei Lin difftestModule, 20472060888SJiawei Lin huancunModule, 20515ee59e4Swakafa coupledL2Module, 20678a8cd25Szhanglinjuan openLLCModule, 20730056234SZhangZifei yunsuanModule, 2083c02ee8fSwakafa fudianModule, 2097f37d55fSTang Haojin utilityModule, 210039cdc35SXuan Hu macrosModule, 211c5f31b5bSLinJiawei ) 2122905e463SZihao Yu 2134b0d80d8SXuan Hu val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2144b0d80d8SXuan Hu val envPATH = sys.env("PATH") + ":" + resourcesPATH 2156f021e01SJiawei Lin 2164b0d80d8SXuan Hu override def forkEnv = Map("PATH" -> envPATH) 2177f37d55fSTang Haojin} 2187f37d55fSTang Haojin 219e3da8badSTang Haojinobject xiangshan extends XiangShanModule with HasChisel { 2207f37d55fSTang Haojin 22151e45dbbSTang Haojin override def millSourcePath = os.pwd 2227f37d55fSTang Haojin 223e3da8badSTang Haojin def rocketModule = rocketchip 2247f37d55fSTang Haojin 225e3da8badSTang Haojin def difftestModule = difftest 2267f37d55fSTang Haojin 227e3da8badSTang Haojin def huancunModule = huancun 2287f37d55fSTang Haojin 229e3da8badSTang Haojin def coupledL2Module = coupledL2 2307f37d55fSTang Haojin 231e3da8badSTang Haojin def openLLCModule = openLLC 23278a8cd25Szhanglinjuan 233e3da8badSTang Haojin def fudianModule = fudian 2347f37d55fSTang Haojin 235e3da8badSTang Haojin def utilityModule = utility 2367f37d55fSTang Haojin 237e3da8badSTang Haojin def yunsuanModule = yunsuan 23883ba63b3SXuan Hu 239039cdc35SXuan Hu def macrosModule = macros 240039cdc35SXuan Hu 2415fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 2427f37d55fSTang Haojin 24383ba63b3SXuan Hu override def ivyDeps = super.ivyDeps() ++ Agg( 244e3da8badSTang Haojin defaultVersions("chiseltest"), 24583ba63b3SXuan Hu ) 24683ba63b3SXuan Hu 247e3da8badSTang Haojin override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 248e3da8badSTang Haojin 249ce34d21eSJiuyue Ma def publishVersion: T[String] = VcsVersion.vcsState().format( 250ce34d21eSJiuyue Ma revHashDigits = 8, 251ce34d21eSJiuyue Ma dirtyHashDigits = 0, 252ce34d21eSJiuyue Ma commitCountPad = -1, 253ce34d21eSJiuyue Ma countSep = "", 254ce34d21eSJiuyue Ma tagModifier = (tag: String) => "[Rr]elease.*".r.findFirstMatchIn(tag) match { 255ce34d21eSJiuyue Ma case Some(_) => "Kunminghu-Release-" + LocalDateTime.now().format( 256*26f0fb0dSJiuyue Ma DateTimeFormatter.ofPattern("MMM-dd-yyyy").withLocale(new Locale("en"))) 257ce34d21eSJiuyue Ma case None => "Kunminghu-dev" 258ce34d21eSJiuyue Ma }, 259ce34d21eSJiuyue Ma /* add "username, buildhost, buildtime" for non-release version */ 260ce34d21eSJiuyue Ma untaggedSuffix = " (%s@%s) # %s".format( 261ce34d21eSJiuyue Ma System.getProperty("user.name"), 262ce34d21eSJiuyue Ma java.net.InetAddress.getLocalHost().getHostName(), 263*26f0fb0dSJiuyue Ma LocalDateTime.now().format(DateTimeFormatter.ofPattern("MMM dd hh:mm:ss yyyy").withLocale(new Locale("en")))), 264ce34d21eSJiuyue Ma ) 265ce34d21eSJiuyue Ma 266ce34d21eSJiuyue Ma override def resources = T.sources { 267ce34d21eSJiuyue Ma os.write(T.dest / "publishVersion", publishVersion()) 268ce34d21eSJiuyue Ma super.resources() ++ Seq(PathRef(T.dest)) 269ce34d21eSJiuyue Ma } 270ce34d21eSJiuyue Ma 271cf9b35a7SYinan Xu object test extends SbtModuleTests with TestModule.ScalaTest { 2725fca38ffSXuan Hu override def forkArgs = Seq("-Xmx40G", "-Xss256m") 27351e45dbbSTang Haojin 274718a511dSLinJiawei override def ivyDeps = super.ivyDeps() ++ Agg( 275e3da8badSTang Haojin defaultVersions("chiseltest") 2766aea7ec5SLinJiawei ) 2774364f1d0SHaojin Tang 278e3da8badSTang Haojin override def scalacOptions = super.scalacOptions() ++ Agg("-deprecation", "-feature") 279e3da8badSTang Haojin 2804364f1d0SHaojin Tang val resourcesPATH = os.pwd.toString() + "/src/main/resources" 2814364f1d0SHaojin Tang val envPATH = sys.env("PATH") + ":" + resourcesPATH 2824364f1d0SHaojin Tang 2834364f1d0SHaojin Tang override def forkEnv = Map("PATH" -> envPATH) 284fc85214eSLinJiawei } 2852905e463SZihao Yu} 286