xref: /XiangShan/build.sc (revision 15ee59e46c33fe60e4408711f9ea0a6078d50510)
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
2372060888SJiawei Linimport $file.`rocket-chip`.`api-config-chipsalliance`.`build-rules`.mill.build
2472060888SJiawei Linimport $file.`rocket-chip`.hardfloat.build
252905e463SZihao Yu
2672060888SJiawei Linobject ivys {
2772060888SJiawei Lin  val sv = "2.12.13"
289658ce50SLinJiawei  val chisel3 = ivy"edu.berkeley.cs::chisel3:3.5.0"
299658ce50SLinJiawei  val chisel3Plugin = ivy"edu.berkeley.cs:::chisel3-plugin:3.5.0"
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
7072060888SJiawei Lin  override 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
7672060888SJiawei Lin  object configRocket extends `rocket-chip`.`api-config-chipsalliance`.`build-rules`.mill.build.config with PublishModule {
7772060888SJiawei Lin    override def millSourcePath = rcPath / "api-config-chipsalliance" / "design" / "craft"
7872060888SJiawei Lin
7972060888SJiawei Lin    override 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(
10072060888SJiawei Lin      common.getVersion("chisel3")
10172060888SJiawei Lin    ) else Agg.empty[Dep]
1027861bfd6SJiawei Lin
1037861bfd6SJiawei Lin    def chisel3PluginIvyDeps = Agg(common.getVersion("chisel3-plugin", cross=true))
10472060888SJiawei Lin  }
10572060888SJiawei Lin
10672060888SJiawei Lin  def hardfloatModule = hardfloatRocket
10772060888SJiawei Lin
10872060888SJiawei Lin  def configModule = configRocket
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
122*15ee59e4Swakafaobject coupledL2 extends XSModule with SbtModule {
123*15ee59e4Swakafa
124*15ee59e4Swakafa  override def millSourcePath = os.pwd / "coupledL2"
125*15ee59e4Swakafa
126*15ee59e4Swakafa  override def moduleDeps = super.moduleDeps ++ Seq(
127*15ee59e4Swakafa    rocketchip,
128*15ee59e4Swakafa    huancun,
129*15ee59e4Swakafa    utility
130*15ee59e4Swakafa  )
131*15ee59e4Swakafa}
132*15ee59e4Swakafa
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
155*15ee59e4Swakafa  def coupledL2Module: PublishModule
15672060888SJiawei Lin  def fudianModule: PublishModule
1573c02ee8fSwakafa  def utilityModule: PublishModule
15872060888SJiawei Lin
15972060888SJiawei Lin  override def millSourcePath = os.pwd
160718a511dSLinJiawei
1618b8e745dSYikeZhou  override def forkArgs = Seq("-Xmx64G", "-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,
169*15ee59e4Swakafa    coupledL2Module,
1703c02ee8fSwakafa    fudianModule,
1713c02ee8fSwakafa    utilityModule
172c5f31b5bSLinJiawei  )
1732905e463SZihao Yu
17472060888SJiawei Lin  object test extends Tests 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
190*15ee59e4Swakafa  override def coupledL2Module = coupledL2
19172060888SJiawei Lin  override def fudianModule = fudian
1923c02ee8fSwakafa  override def utilityModule = utility
19372060888SJiawei Lin}
194