xref: /XiangShan/build.sc (revision 8891a219bbc84f568e1d134854d8d5ed86d6d560)
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
17718a511dSLinJiaweiimport os.Path
182102afb5SLinJiaweiimport mill._
19718a511dSLinJiaweiimport scalalib._
2072060888SJiawei Linimport publish._
21c21bff99SJiawei Linimport coursier.maven.MavenRepository
2272060888SJiawei Linimport $file.`rocket-chip`.common
23*8891a219SYinan Xuimport $file.`rocket-chip`.cde.common
2472060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build
252905e463SZihao Yu
2672060888SJiawei Linobject ivys {
2772060888SJiawei Lin  val sv = "2.12.13"
28fcd941feSYinan Xu  val chisel3 = ivy"edu.berkeley.cs::chisel3:3.5.4"
29fcd941feSYinan Xu  val chisel3Plugin = ivy"edu.berkeley.cs:::chisel3-plugin:3.5.4"
3051981c77SbugGenerator  val chiseltest = ivy"edu.berkeley.cs::chiseltest:0.5.2"
31714ba5a1SLinJiawei  val chiselCirct = ivy"com.sifive::chisel-circt:0.6.0"
3272060888SJiawei Lin  val scalatest = ivy"org.scalatest::scalatest:3.2.2"
3372060888SJiawei Lin  val macroParadise = ivy"org.scalamacros:::paradise:2.1.1"
3472060888SJiawei Lin}
3572060888SJiawei Lin
3672060888SJiawei Lintrait XSModule extends ScalaModule with PublishModule {
3772060888SJiawei Lin
3872060888SJiawei Lin  // override this to use chisel from source
3972060888SJiawei Lin  def chiselOpt: Option[PublishModule] = None
4072060888SJiawei Lin
4172060888SJiawei Lin  override def scalaVersion = ivys.sv
4272060888SJiawei Lin
4372060888SJiawei Lin  override def compileIvyDeps = Agg(ivys.macroParadise)
4472060888SJiawei Lin
4572060888SJiawei Lin  override def scalacPluginIvyDeps = Agg(ivys.macroParadise, ivys.chisel3Plugin)
460332e41aSlinjiawei
472102afb5SLinJiawei  override def scalacOptions = Seq("-Xsource:2.11")
480332e41aSlinjiawei
49cc358710SLinJiawei  override def ivyDeps = (if(chiselOpt.isEmpty) Agg(ivys.chisel3) else Agg.empty[Dep]) ++ Agg(ivys.chiselCirct)
500332e41aSlinjiawei
5172060888SJiawei Lin  override def moduleDeps = Seq() ++ chiselOpt
520332e41aSlinjiawei
5372060888SJiawei Lin  def publishVersion = "0.0.1"
54c21bff99SJiawei Lin
5572060888SJiawei Lin  // TODO: fix this
5672060888SJiawei Lin  def pomSettings = PomSettings(
5772060888SJiawei Lin    description = "XiangShan",
5872060888SJiawei Lin    organization = "",
5972060888SJiawei Lin    url = "https://github.com/OpenXiangShan/XiangShan",
6072060888SJiawei Lin    licenses = Seq(License.`Apache-2.0`),
6172060888SJiawei Lin    versionControl = VersionControl.github("OpenXiangShan", "XiangShan"),
6272060888SJiawei Lin    developers = Seq.empty
63c21bff99SJiawei Lin  )
64c21bff99SJiawei Lin}
65c21bff99SJiawei Lin
6672060888SJiawei Linobject rocketchip extends `rocket-chip`.common.CommonRocketChip {
6772060888SJiawei Lin
6872060888SJiawei Lin  val rcPath = os.pwd / "rocket-chip"
6972060888SJiawei Lin
70*8891a219SYinan Xu  def scalaVersion = ivys.sv
7172060888SJiawei Lin
7272060888SJiawei Lin  override def scalacOptions = Seq("-Xsource:2.11")
7372060888SJiawei Lin
7472060888SJiawei Lin  override def millSourcePath = rcPath
7572060888SJiawei Lin
76*8891a219SYinan Xu  object cdeRocket extends `rocket-chip`.cde.common.CDEModule with PublishModule {
77*8891a219SYinan Xu    override def millSourcePath = rcPath / "cde" / "cde"
7872060888SJiawei Lin
79*8891a219SYinan Xu    def scalaVersion = T {
8072060888SJiawei Lin      rocketchip.scalaVersion()
812905e463SZihao Yu    }
822905e463SZihao Yu
8372060888SJiawei Lin    override def pomSettings = T {
8472060888SJiawei Lin      rocketchip.pomSettings()
852102afb5SLinJiawei    }
862102afb5SLinJiawei
8772060888SJiawei Lin    override def publishVersion = T {
8872060888SJiawei Lin      rocketchip.publishVersion()
8972060888SJiawei Lin    }
902102afb5SLinJiawei  }
912102afb5SLinJiawei
9272060888SJiawei Lin  object hardfloatRocket extends `rocket-chip`.hardfloat.build.hardfloat {
9372060888SJiawei Lin    override def millSourcePath = rcPath / "hardfloat"
94718a511dSLinJiawei
9572060888SJiawei Lin    override def scalaVersion = T {
9672060888SJiawei Lin      rocketchip.scalaVersion()
9772060888SJiawei Lin    }
98718a511dSLinJiawei
9972060888SJiawei Lin    def chisel3IvyDeps = if(chisel3Module.isEmpty) Agg(
100*8891a219SYinan Xu      `rocket-chip`.common.getVersion("chisel3")
10172060888SJiawei Lin    ) else Agg.empty[Dep]
1027861bfd6SJiawei Lin
103*8891a219SYinan Xu    def chisel3PluginIvyDeps = Agg(`rocket-chip`.common.getVersion("chisel3-plugin", cross=true))
10472060888SJiawei Lin  }
10572060888SJiawei Lin
10672060888SJiawei Lin  def hardfloatModule = hardfloatRocket
10772060888SJiawei Lin
108*8891a219SYinan Xu  def cdeModule = cdeRocket
10972060888SJiawei Lin
11072060888SJiawei Lin}
11172060888SJiawei Lin
11272060888SJiawei Linobject huancun extends XSModule with SbtModule {
11372060888SJiawei Lin
11472060888SJiawei Lin  override def millSourcePath = os.pwd / "huancun"
115718a511dSLinJiawei
116718a511dSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
1173c02ee8fSwakafa    rocketchip,
1183c02ee8fSwakafa    utility
119a1ea7f76SJiawei Lin  )
120718a511dSLinJiawei}
121718a511dSLinJiawei
12215ee59e4Swakafaobject coupledL2 extends XSModule with SbtModule {
12315ee59e4Swakafa
12415ee59e4Swakafa  override def millSourcePath = os.pwd / "coupledL2"
12515ee59e4Swakafa
12615ee59e4Swakafa  override def moduleDeps = super.moduleDeps ++ Seq(
12715ee59e4Swakafa    rocketchip,
12815ee59e4Swakafa    huancun,
12915ee59e4Swakafa    utility
13015ee59e4Swakafa  )
13115ee59e4Swakafa}
13215ee59e4Swakafa
13372060888SJiawei Linobject difftest extends XSModule with SbtModule {
134a3e87608SWilliam Wang  override def millSourcePath = os.pwd / "difftest"
135a3e87608SWilliam Wang}
136718a511dSLinJiawei
13772060888SJiawei Linobject fudian extends XSModule with SbtModule
138dc597826SJiawei Lin
1393c02ee8fSwakafaobject utility extends XSModule with SbtModule {
1403c02ee8fSwakafa
1413c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
1423c02ee8fSwakafa
1433c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
1443c02ee8fSwakafa    rocketchip
1453c02ee8fSwakafa  )
1463c02ee8fSwakafa}
1473c02ee8fSwakafa
14872060888SJiawei Lin// extends this trait to use XiangShan in other projects
14972060888SJiawei Lintrait CommonXiangShan extends XSModule with SbtModule { m =>
15072060888SJiawei Lin
15172060888SJiawei Lin  // module deps
15272060888SJiawei Lin  def rocketModule: PublishModule
15372060888SJiawei Lin  def difftestModule: PublishModule
15472060888SJiawei Lin  def huancunModule: PublishModule
15515ee59e4Swakafa  def coupledL2Module: PublishModule
15672060888SJiawei Lin  def fudianModule: PublishModule
1573c02ee8fSwakafa  def utilityModule: PublishModule
15872060888SJiawei Lin
15972060888SJiawei Lin  override def millSourcePath = os.pwd
160718a511dSLinJiawei
161b44ec379SYinan Xu  override def forkArgs = Seq("-Xmx20G", "-Xss256m")
162718a511dSLinJiawei
16372060888SJiawei Lin  override def ivyDeps = super.ivyDeps() ++ Seq(ivys.chiseltest)
16472060888SJiawei Lin
165c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
16672060888SJiawei Lin    rocketModule,
16772060888SJiawei Lin    difftestModule,
16872060888SJiawei Lin    huancunModule,
16915ee59e4Swakafa    coupledL2Module,
1703c02ee8fSwakafa    fudianModule,
1713c02ee8fSwakafa    utilityModule
172c5f31b5bSLinJiawei  )
1732905e463SZihao Yu
174cf9b35a7SYinan Xu  object test extends SbtModuleTests with TestModule.ScalaTest {
1756f021e01SJiawei Lin
17672060888SJiawei Lin    override def forkArgs = m.forkArgs
1776f021e01SJiawei Lin
178718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
17972060888SJiawei Lin      ivys.scalatest
1806aea7ec5SLinJiawei    )
181718a511dSLinJiawei
182fc85214eSLinJiawei  }
183718a511dSLinJiawei
1842905e463SZihao Yu}
18572060888SJiawei Lin
18672060888SJiawei Linobject XiangShan extends CommonXiangShan {
18772060888SJiawei Lin  override def rocketModule = rocketchip
18872060888SJiawei Lin  override def difftestModule = difftest
18972060888SJiawei Lin  override def huancunModule = huancun
19015ee59e4Swakafa  override def coupledL2Module = coupledL2
19172060888SJiawei Lin  override def fudianModule = fudian
1923c02ee8fSwakafa  override def utilityModule = utility
19372060888SJiawei Lin}
194