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