xref: /XiangShan/build.sc (revision 3c02ee8f82edea481fa8336c7f54ffc17fafba91)
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"
3072060888SJiawei Lin  val chiseltest = ivy"edu.berkeley.cs::chiseltest:0.3.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(
117*3c02ee8fSwakafa    rocketchip,
118*3c02ee8fSwakafa    utility
119a1ea7f76SJiawei Lin  )
120718a511dSLinJiawei}
121718a511dSLinJiawei
12272060888SJiawei Linobject difftest extends XSModule with SbtModule {
123a3e87608SWilliam Wang  override def millSourcePath = os.pwd / "difftest"
124a3e87608SWilliam Wang}
125718a511dSLinJiawei
12672060888SJiawei Linobject fudian extends XSModule with SbtModule
127dc597826SJiawei Lin
128*3c02ee8fSwakafaobject utility extends XSModule with SbtModule {
129*3c02ee8fSwakafa
130*3c02ee8fSwakafa  override def millSourcePath = os.pwd / "utility"
131*3c02ee8fSwakafa
132*3c02ee8fSwakafa  override def moduleDeps = super.moduleDeps ++ Seq(
133*3c02ee8fSwakafa    rocketchip
134*3c02ee8fSwakafa  )
135*3c02ee8fSwakafa}
136*3c02ee8fSwakafa
13772060888SJiawei Lin// extends this trait to use XiangShan in other projects
13872060888SJiawei Lintrait CommonXiangShan extends XSModule with SbtModule { m =>
13972060888SJiawei Lin
14072060888SJiawei Lin  // module deps
14172060888SJiawei Lin  def rocketModule: PublishModule
14272060888SJiawei Lin  def difftestModule: PublishModule
14372060888SJiawei Lin  def huancunModule: PublishModule
14472060888SJiawei Lin  def fudianModule: PublishModule
145*3c02ee8fSwakafa  def utilityModule: PublishModule
14672060888SJiawei Lin
14772060888SJiawei Lin  override def millSourcePath = os.pwd
148718a511dSLinJiawei
1498b8e745dSYikeZhou  override def forkArgs = Seq("-Xmx64G", "-Xss256m")
150718a511dSLinJiawei
15172060888SJiawei Lin  override def ivyDeps = super.ivyDeps() ++ Seq(ivys.chiseltest)
15272060888SJiawei Lin
153c5f31b5bSLinJiawei  override def moduleDeps = super.moduleDeps ++ Seq(
15472060888SJiawei Lin    rocketModule,
15572060888SJiawei Lin    difftestModule,
15672060888SJiawei Lin    huancunModule,
157*3c02ee8fSwakafa    fudianModule,
158*3c02ee8fSwakafa    utilityModule
159c5f31b5bSLinJiawei  )
1602905e463SZihao Yu
16172060888SJiawei Lin  object test extends Tests with TestModule.ScalaTest {
1626f021e01SJiawei Lin
16372060888SJiawei Lin    override def forkArgs = m.forkArgs
1646f021e01SJiawei Lin
165718a511dSLinJiawei    override def ivyDeps = super.ivyDeps() ++ Agg(
16672060888SJiawei Lin      ivys.scalatest
1676aea7ec5SLinJiawei    )
168718a511dSLinJiawei
169fc85214eSLinJiawei  }
170718a511dSLinJiawei
1712905e463SZihao Yu}
17272060888SJiawei Lin
17372060888SJiawei Linobject XiangShan extends CommonXiangShan {
17472060888SJiawei Lin  override def rocketModule = rocketchip
17572060888SJiawei Lin  override def difftestModule = difftest
17672060888SJiawei Lin  override def huancunModule = huancun
17772060888SJiawei Lin  override def fudianModule = fudian
178*3c02ee8fSwakafa  override def utilityModule = utility
17972060888SJiawei Lin}
180