1
1
import Tests ._
2
2
3
3
val chisel6Version = " 6.7.0"
4
+ val chisel7Version = " 7.0.0-RC4"
4
5
val chiselTestVersion = " 6.0.0"
5
6
val scalaVersionFromChisel = " 2.13.16"
6
7
@@ -92,12 +93,17 @@ lazy val chisel6Settings = Seq(
92
93
libraryDependencies ++= Seq (" org.chipsalliance" %% " chisel" % chisel6Version),
93
94
addCompilerPlugin(" org.chipsalliance" % " chisel-plugin" % chisel6Version cross CrossVersion .full)
94
95
)
96
+ lazy val chisel7Settings = Seq (
97
+ libraryDependencies ++= Seq (" org.chipsalliance" %% " chisel" % chisel7Version),
98
+ addCompilerPlugin(" org.chipsalliance" % " chisel-plugin" % chisel7Version cross CrossVersion .full)
99
+ )
95
100
lazy val chisel3Settings = Seq (
96
101
libraryDependencies ++= Seq (" edu.berkeley.cs" %% " chisel3" % chisel3Version),
97
102
addCompilerPlugin(" edu.berkeley.cs" % " chisel3-plugin" % chisel3Version cross CrossVersion .full)
98
103
)
99
104
100
- lazy val chiselSettings = chisel6Settings ++ Seq (
105
+ // Select Chisel 7 when USE_CHISEL7 is set in the environment; default to Chisel 6.
106
+ lazy val chiselSettings = (if (sys.env.contains(" USE_CHISEL7" )) chisel7Settings else chisel6Settings) ++ Seq (
101
107
libraryDependencies ++= Seq (
102
108
" org.apache.commons" % " commons-lang3" % " 3.12.0" ,
103
109
" org.apache.commons" % " commons-text" % " 1.9"
@@ -115,11 +121,17 @@ lazy val scalaTestSettings = Seq(
115
121
116
122
// -- Rocket Chip --
117
123
118
- lazy val hardfloat = freshProject(" hardfloat" , file(" generators/hardfloat/hardfloat" ))
119
- .settings(chiselSettings)
120
- .settings(commonSettings)
121
- .dependsOn(midas_target_utils)
122
- .settings(scalaTestSettings)
124
+ lazy val hardfloat = {
125
+ val useChisel7 = sys.env.contains(" USE_CHISEL7" )
126
+ var hf = freshProject(" hardfloat" , file(" generators/hardfloat/hardfloat" ))
127
+ .settings(chiselSettings)
128
+ .settings(commonSettings)
129
+ .settings(scalaTestSettings)
130
+ if (! useChisel7) {
131
+ hf = hf.dependsOn(midas_target_utils)
132
+ }
133
+ hf
134
+ }
123
135
124
136
lazy val rocketMacros = (project in rocketChipDir / " macros" )
125
137
.settings(commonSettings)
@@ -154,24 +166,55 @@ lazy val testchipip = withInitCheck((project in file("generators/testchipip")),
154
166
.settings(commonSettings)
155
167
156
168
lazy val chipyard = {
169
+ val useChisel7 = sys.env.contains(" USE_CHISEL7" )
157
170
// Base chipyard project with always-on dependencies
158
171
// Use explicit Project(...) so the project id remains 'chipyard'
159
- var cy = Project (id = " chipyard " , base = file( " generators/chipyard " ))
160
- .dependsOn (
172
+ val baseProjects : Seq [ ProjectReference ] =
173
+ Seq (
161
174
testchipip, rocketchip, boom, rocketchip_blocks, rocketchip_inclusive_cache,
162
- dsptools, rocket_dsp_utils,
163
175
icenet, tracegen,
164
176
constellation, barf, shuttle, rerocc,
165
- firrtl2_bridge
166
- )
177
+ ).map(sbt.Project .projectToRef) ++
178
+ (if (useChisel7) Seq () else Seq (sbt.Project .projectToRef(firrtl2_bridge))) ++
179
+ (if (useChisel7) Seq () else Seq (sbt.Project .projectToRef(dsptools), sbt.Project .projectToRef(rocket_dsp_utils)))
180
+
181
+ val baseDeps : Seq [sbt.ClasspathDep [sbt.ProjectReference ]] =
182
+ baseProjects.map(pr => sbt.ClasspathDependency (pr, None ))
183
+
184
+ // Optional settings to exclude specific sources under Chisel 7
185
+ val dspExcludeSettings : Seq [Def .Setting [_]] = if (useChisel7) Seq (
186
+ Compile / unmanagedSources := {
187
+ val files = (Compile / unmanagedSources).value
188
+ val root = (ThisBuild / baseDirectory).value
189
+ val excludeList = Seq (
190
+ // Directories or files relative to repo root
191
+ " generators/chipyard/src/main/scala/example/dsptools" ,
192
+ " generators/chipyard/src/main/scala/config/MMIOAcceleratorConfigs.scala" ,
193
+ " generators/chipyard/src/main/scala/config/TutorialConfigs.scala" ,
194
+ " generators/chipyard/src/main/scala/upf"
195
+ ).map(p => (root / p).getCanonicalFile)
196
+ val (excludeDirs, excludeFiles) = excludeList.partition(_.isDirectory)
197
+ files.filterNot { f =>
198
+ val cf = f.getCanonicalFile
199
+ excludeFiles.contains(cf) || excludeDirs.exists(d => cf.toPath.startsWith(d.toPath))
200
+ }
201
+ }
202
+ ) else Seq .empty
203
+
204
+ var cy = Project (id = " chipyard" , base = file(" generators/chipyard" ))
205
+ .dependsOn(baseDeps : _* )
167
206
.settings(libraryDependencies ++= rocketLibDeps.value)
168
207
.settings(
169
208
libraryDependencies ++= Seq (
170
209
" org.reflections" % " reflections" % " 0.10.2"
171
210
)
172
211
)
173
212
.settings(commonSettings)
174
- .settings(Compile / unmanagedSourceDirectories += file(" tools/stage/src/main/scala" ))
213
+ .settings(Compile / unmanagedSourceDirectories += {
214
+ if (useChisel7) file(" tools/stage-chisel7/src/main/scala" )
215
+ else file(" tools/stage/src/main/scala" )
216
+ })
217
+ .settings(dspExcludeSettings : _* )
175
218
176
219
// Optional modules discovered via initialized submodules (no env or manifest)
177
220
val optionalModules : Seq [(String , ProjectReference )] = Seq (
0 commit comments