11import Tests ._
22
33val chisel6Version = " 6.7.0"
4+ val chisel7Version = " 7.0.0-RC4"
45val chiselTestVersion = " 6.0.0"
56val scalaVersionFromChisel = " 2.13.16"
67
@@ -92,12 +93,17 @@ lazy val chisel6Settings = Seq(
9293 libraryDependencies ++= Seq (" org.chipsalliance" %% " chisel" % chisel6Version),
9394 addCompilerPlugin(" org.chipsalliance" % " chisel-plugin" % chisel6Version cross CrossVersion .full)
9495)
96+ lazy val chisel7Settings = Seq (
97+ libraryDependencies ++= Seq (" org.chipsalliance" %% " chisel" % chisel7Version),
98+ addCompilerPlugin(" org.chipsalliance" % " chisel-plugin" % chisel7Version cross CrossVersion .full)
99+ )
95100lazy val chisel3Settings = Seq (
96101 libraryDependencies ++= Seq (" edu.berkeley.cs" %% " chisel3" % chisel3Version),
97102 addCompilerPlugin(" edu.berkeley.cs" % " chisel3-plugin" % chisel3Version cross CrossVersion .full)
98103)
99104
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 (
101107 libraryDependencies ++= Seq (
102108 " org.apache.commons" % " commons-lang3" % " 3.12.0" ,
103109 " org.apache.commons" % " commons-text" % " 1.9"
@@ -115,11 +121,17 @@ lazy val scalaTestSettings = Seq(
115121
116122// -- Rocket Chip --
117123
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+ }
123135
124136lazy val rocketMacros = (project in rocketChipDir / " macros" )
125137 .settings(commonSettings)
@@ -154,24 +166,55 @@ lazy val testchipip = withInitCheck((project in file("generators/testchipip")),
154166 .settings(commonSettings)
155167
156168lazy val chipyard = {
169+ val useChisel7 = sys.env.contains(" USE_CHISEL7" )
157170 // Base chipyard project with always-on dependencies
158171 // 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 (
161174 testchipip, rocketchip, boom, rocketchip_blocks, rocketchip_inclusive_cache,
162- dsptools, rocket_dsp_utils,
163175 icenet, tracegen,
164176 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 : _* )
167206 .settings(libraryDependencies ++= rocketLibDeps.value)
168207 .settings(
169208 libraryDependencies ++= Seq (
170209 " org.reflections" % " reflections" % " 0.10.2"
171210 )
172211 )
173212 .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 : _* )
175218
176219 // Optional modules discovered via initialized submodules (no env or manifest)
177220 val optionalModules : Seq [(String , ProjectReference )] = Seq (
0 commit comments