@@ -14,6 +14,12 @@ import mill.scalalib.scalafmt._
1414
1515object v extends Module {
1616
17+ // Add support for later Scala 2.13 by bumping this.
18+ val scala213MinorVersion: Int = 18
19+
20+ // Bump Scala 3 version by bumping this.
21+ val scala3MinorVersion: String = "3.4"
22+
1723 val javaVersion = {
1824 val rawVersion = sys.props("java.specification.version")
1925 // Older versions of Java started with 1., e.g. 1.8 == 8
@@ -32,20 +38,26 @@ object v extends Module {
3238 // Only publish plugin for 2.13.11+ when using Java > 11, but still
3339 // publish all versions when Java version <= 11.
3440 val pluginScalaCrossVersions = {
35- val latest213 = 18
3641 val java21Min213 = 11
3742 val minVersion = if (javaVersion > 11) java21Min213 else 0
38- val versions = minVersion to latest213
43+ val versions = minVersion to scala213MinorVersion
3944 val versionSeq = versions.map(v => s"2.13.$v").toSeq
40- versionSeq ++ Seq ("3.3.4 ")
45+ versionSeq :+ scalaCrossToVersion ("3")
4146 }
4247
43- val scalaCrossVersions = Seq(
44- "2.13.18",
45- "3.3.4"
46- )
48+ val scalaCrossVersions = Seq("2.13", "3")
49+
50+ def scalaCrossToVersion(major: String): String = major match {
51+ case "2.13" => s"2.13.$scala213MinorVersion"
52+ case "3" => s"3.$scala3MinorVersion"
53+ }
54+
55+ def scalaVersionToCross(version: String): String =
56+ if (version.startsWith("2.13")) "2.13"
57+ else if (version.startsWith("3.")) "3"
58+ else throw new Exception(s"Unsupported version $version")
4759
48- def isScala3(ver: String): Boolean = ver.startsWith("3. ")
60+ def isScala3(ver: String): Boolean = ver.startsWith("3")
4961
5062 def buildUnits(): Seq[ScalaModule] = {
5163 scalaCrossVersions.flatMap { ver =>
@@ -65,7 +77,10 @@ object v extends Module {
6577 }
6678 }
6779
68- val scalaVersion = scalaCrossVersions.head
80+ def defaultCrossVersion = scalaCrossVersions.head
81+
82+ def defaultScalaVersion = scalaCrossToVersion(defaultCrossVersion)
83+
6984 val jmhVersion = "1.37"
7085 val osLib = mvn"com.lihaoyi::os-lib:0.10.7" // 0.11 requires Java 11
7186 val upickle = mvn"com.lihaoyi::upickle:3.3.1" // upickle 4.0 requires Scala 3.4 (we target Scala 3.3 LTS)
@@ -181,6 +196,15 @@ def latestStableVersion() = Task.Command {
181196 docs.latestStableVersion()
182197}
183198
199+ /** Our base trait that helps with our simplified cross versioning (2.13 instead of 2.13.18)
200+ *
201+ * Keep this lean, it's mixed in to firrtl and svsim as well.
202+ */
203+ trait ChiselCrossModule extends CrossSbtModule {
204+ protected def _scalaVersion = v.scalaCrossToVersion(crossScalaVersion)
205+ def scalaVersion = _scalaVersion
206+ }
207+
184208trait HasScala2MacroAnno extends CrossModuleBase {
185209 override def scalacOptions = Task {
186210 if (!v.isScala3(crossScalaVersion)) {
@@ -189,9 +213,10 @@ trait HasScala2MacroAnno extends CrossModuleBase {
189213 }
190214}
191215
192- trait HasScalaPlugin extends CrossModuleBase {
216+ trait HasScalaPlugin extends ChiselCrossModule {
193217 import build_.plugin.Plugin
194- def pluginModule: Plugin
218+
219+ def pluginModule: Plugin = plugin.cross(_scalaVersion)
195220
196221 override def scalacOptions = Task {
197222 super.scalacOptions() ++ Seq(s"-Xplugin:${pluginModule.jar().path}")
@@ -271,10 +296,10 @@ object circt extends Module {
271296object chisel extends Cross[Chisel](v.scalaCrossVersions)
272297
273298trait Chisel extends CrossSbtModule with HasScala2MacroAnno with HasScalaPlugin with ScalafmtModule {
299+
274300 override def moduleDir = super.moduleDir / os.up
275301 def svsimModule = svsim.cross(crossScalaVersion)
276302 def coreModule = core.cross(crossScalaVersion)
277- def pluginModule = plugin.cross()
278303
279304 override def scalacOptions = Task {
280305 if (v.isScala3(crossScalaVersion)) {
0 commit comments