-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.sc
148 lines (109 loc) · 4.21 KB
/
build.sc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import mill._, scalalib._
import coursier.maven.MavenRepository
import $file.`rocket-chip`.common
import $file.`rocket-chip`.`api-config-chipsalliance`.`build-rules`.mill.build
import $file.`rocket-chip`.hardfloat.build
//millSourcePath默认是./src,可以用override重写
object ivys {
val sv = "2.12.13"
val chisel3 = ivy"edu.berkeley.cs::chisel3:3.5.0"
val chisel3Plugin = ivy"edu.berkeley.cs:::chisel3-plugin:3.5.0"
val chiseltest = ivy"edu.berkeley.cs::chiseltest:0.3.2"
val chiselCirct = ivy"com.sifive::chisel-circt:0.4.0"
val scalatest = ivy"org.scalatest::scalatest:3.2.2"
val macroParadise = ivy"org.scalamacros:::paradise:2.1.1"
}
trait CommonModule extends ScalaModule {
def chiselOpt: Option[ScalaModule] = None
override def scalaVersion = "2.12.13"
override def scalacOptions = Seq("-Xsource:2.11")
override def ivyDeps = if(chiselOpt.isEmpty) Agg(ivys.chisel3) else Agg.empty[Dep]
override def scalacPluginIvyDeps = Agg(ivys.macroParadise, ivys.chisel3Plugin)
}
trait HasXsource211 extends ScalaModule {
override def scalacOptions = T {
super.scalacOptions() ++ Seq(
"-deprecation",
"-unchecked",
"-Xsource:2.11"
)
}
}
trait HasChisel3 extends ScalaModule {
override def repositoriesTask = T.task {
super.repositoriesTask() ++ Seq(
MavenRepository("https://oss.sonatype.org/content/repositories/snapshots")
)
}
override def ivyDeps = Agg(
ivy"edu.berkeley.cs::chisel3:3.5.0-RC1"
)
//override def scalacPluginIvyDeps = Agg(ivy"edu.berkeley.cs:::chisel3-plugin:3.5.0")
}
//SbtModule基本上与普通的 ScalaModule 相同,但被配置为遵循 SBT 项目布局:
/*src
main/scala
test/scala */
//CrossSbtModule 是使用 SBT 项目布局配置的 CrossScalaModule 版本:
//Mill 提供了一个 CrossScalaModule 模板,可以与 Cross 一起跨不同版本的 Scala 交叉构建 Scala 模块。
trait HasChiselTests extends CrossSbtModule {
object test extends Tests {
override def ivyDeps = Agg(ivy"org.scalatest::scalatest:3.0.4", ivy"edu.berkeley.cs::chisel-iotesters:1.2+")
def testFrameworks = Seq("org.scalatest.tools.Framework")
}
}
object rocketchip extends `rocket-chip`.common.CommonRocketChip {
val rcPath = os.pwd / "rocket-chip"
override def scalaVersion = ivys.sv
override def scalacOptions = Seq("-Xsource:2.11")
override def millSourcePath = rcPath
object configRocket extends `rocket-chip`.`api-config-chipsalliance`.`build-rules`.mill.build.config with PublishModule {
override def millSourcePath = rcPath / "api-config-chipsalliance" / "design" / "craft"
override def scalaVersion = T {
rocketchip.scalaVersion()
}
override def pomSettings = T {
rocketchip.pomSettings()
}
override def publishVersion = T {
rocketchip.publishVersion()
}
}
object hardfloatRocket extends `rocket-chip`.hardfloat.build.hardfloat {
override def millSourcePath = rcPath / "hardfloat"
override def scalaVersion = T {
rocketchip.scalaVersion()
}
def chisel3IvyDeps = if(chisel3Module.isEmpty) Agg(
common.getVersion("chisel3")
) else Agg.empty[Dep]
def chisel3PluginIvyDeps = Agg(common.getVersion("chisel3-plugin", cross=true))
}
def hardfloatModule = hardfloatRocket
def configModule = configRocket
}
object huancun extends CommonModule with SbtModule {
override def millSourcePath = os.pwd / "HuanCun"
override def moduleDeps = super.moduleDeps ++ Seq(
rocketchip
)
}
object difftest extends CommonModule with SbtModule {
override def millSourcePath = os.pwd / "difftest"
}
object chiselModule extends CrossSbtModule with CommonModule with HasChisel3 with HasChiselTests with HasXsource211{
def crossScalaVersion = "2.12.13"
override def scalaVersion = "2.12.13"
//override def compileIvyDeps = Agg(ivys.macroParadise)
//override def scalacPluginIvyDeps = Agg(ivys.chisel3Plugin, ivys.macroParadise)
//def chisel3PluginIvyDeps = Agg(ivys.chisel3Plugin, ivys.macroParadise)
def rocketModule = rocketchip
def difftestModule = difftest
def huancunModule = huancun
override def millSourcePath = os.pwd
override def moduleDeps = super.moduleDeps ++ Seq(
rocketModule,
difftestModule,
huancunModule
)
}