aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/CheckChirrtl.scala3
-rw-r--r--src/main/scala/firrtl/stage/FirrtlAnnotations.scala15
-rw-r--r--src/main/scala/firrtl/stage/FirrtlCli.scala3
-rw-r--r--src/main/scala/firrtl/stage/package.scala1
-rw-r--r--src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala37
5 files changed, 58 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/passes/CheckChirrtl.scala b/src/main/scala/firrtl/passes/CheckChirrtl.scala
index 579dba30..9903f445 100644
--- a/src/main/scala/firrtl/passes/CheckChirrtl.scala
+++ b/src/main/scala/firrtl/passes/CheckChirrtl.scala
@@ -5,9 +5,12 @@ package firrtl.passes
import firrtl.Transform
import firrtl.ir._
import firrtl.options.Dependency
+import firrtl.stage.transforms.CheckScalaVersion
object CheckChirrtl extends Pass with CheckHighFormLike {
+ override def prerequisites = Dependency[CheckScalaVersion] :: Nil
+
override val optionalPrerequisiteOf = firrtl.stage.Forms.ChirrtlForm ++
Seq( Dependency(CInferTypes),
Dependency(CInferMDir),
diff --git a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala
index 91c5609b..d587fd8c 100644
--- a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala
+++ b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala
@@ -222,3 +222,18 @@ case class FirrtlCircuitAnnotation(circuit: Circuit) extends NoTargetAnnotation
override lazy val hashCode: Int = circuit.hashCode
}
+
+/** Suppresses warning about Scala 2.11 deprecation
+ *
+ * - set with `--Wno-scala-version-warning`
+ */
+case object SuppressScalaVersionWarning extends NoTargetAnnotation with FirrtlOption with HasShellOptions {
+ def longOption: String = "Wno-scala-version-warning"
+ val options = Seq(
+ new ShellOption[Unit](
+ longOption = longOption,
+ toAnnotationSeq = { _ => Seq(this) },
+ helpText = "Suppress Scala 2.11 deprecation warning (ignored in Scala 2.12+)"
+ )
+ )
+}
diff --git a/src/main/scala/firrtl/stage/FirrtlCli.scala b/src/main/scala/firrtl/stage/FirrtlCli.scala
index be1100c3..39b89bea 100644
--- a/src/main/scala/firrtl/stage/FirrtlCli.scala
+++ b/src/main/scala/firrtl/stage/FirrtlCli.scala
@@ -19,7 +19,8 @@ trait FirrtlCli { this: Shell =>
RunFirrtlTransformAnnotation,
firrtl.EmitCircuitAnnotation,
firrtl.EmitAllModulesAnnotation,
- NoCircuitDedupAnnotation )
+ NoCircuitDedupAnnotation,
+ SuppressScalaVersionWarning)
.map(_.addOptions(parser))
phases.DriverCompatibility.TopNameAnnotation.addOptions(parser)
diff --git a/src/main/scala/firrtl/stage/package.scala b/src/main/scala/firrtl/stage/package.scala
index e9cf3fb4..123c763a 100644
--- a/src/main/scala/firrtl/stage/package.scala
+++ b/src/main/scala/firrtl/stage/package.scala
@@ -33,6 +33,7 @@ package object stage {
case InfoModeAnnotation(i) => c.copy(infoModeName = i)
case FirrtlCircuitAnnotation(cir) => c.copy(firrtlCircuit = Some(cir))
case a : CompilerAnnotation => logger.warn(s"Use of CompilerAnnotation is deprecated. Ignoring $a") ; c
+ case SuppressScalaVersionWarning => c
}
}
}
diff --git a/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala
new file mode 100644
index 00000000..a7127dba
--- /dev/null
+++ b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala
@@ -0,0 +1,37 @@
+// See LICENSE for license details.
+
+package firrtl.stage.transforms
+
+import firrtl.{BuildInfo, CircuitState, DependencyAPIMigration, Transform}
+import firrtl.stage.SuppressScalaVersionWarning
+import firrtl.options.StageUtils.dramaticWarning
+
+object CheckScalaVersion {
+ def migrationDocumentLink: String = "https://www.chisel-lang.org/chisel3/upgrading-from-scala-2-11.html"
+
+ private def getScalaMajorVersion: Int = {
+ val "2" :: major :: _ :: Nil = BuildInfo.scalaVersion.split("\\.").toList
+ major.toInt
+ }
+
+ final def deprecationMessage(version: String, option: String) =
+ s"""|FIRRTL support for Scala $version is deprecated, please upgrade to Scala 2.12.
+ | Migration guide: $migrationDocumentLink
+ | Suppress warning with '$option'""".stripMargin
+
+}
+
+class CheckScalaVersion extends Transform with DependencyAPIMigration {
+ import CheckScalaVersion._
+
+ override def invalidates(a: Transform) = false
+
+ def execute(state: CircuitState): CircuitState = {
+ def suppress = state.annotations.contains(SuppressScalaVersionWarning)
+ if (getScalaMajorVersion == 11 && !suppress) {
+ val option = s"--${SuppressScalaVersionWarning.longOption}"
+ dramaticWarning(deprecationMessage("2.11", option))
+ }
+ state
+ }
+}