aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/firrtl/stage/phases/tests/DriverCompatibilitySpec.scala2
-rw-r--r--src/test/scala/firrtl/testutils/FirrtlSpec.scala6
-rw-r--r--src/test/scala/firrtlTests/execution/VerilogExecution.scala3
-rw-r--r--src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala61
-rw-r--r--src/test/scala/firrtlTests/transforms/LegalizeReductions.scala2
5 files changed, 67 insertions, 7 deletions
diff --git a/src/test/scala/firrtl/stage/phases/tests/DriverCompatibilitySpec.scala b/src/test/scala/firrtl/stage/phases/tests/DriverCompatibilitySpec.scala
index 64654175..007608ca 100644
--- a/src/test/scala/firrtl/stage/phases/tests/DriverCompatibilitySpec.scala
+++ b/src/test/scala/firrtl/stage/phases/tests/DriverCompatibilitySpec.scala
@@ -125,7 +125,7 @@ class DriverCompatibilitySpec extends AnyFlatSpec with Matchers with PrivateMeth
new PhaseFixture(new AddImplicitFirrtlFile) {
val annotations = Seq( TopNameAnnotation("foo") )
val expected = annotations.toSet +
- FirrtlFileAnnotation(new File("foo.fir").getCanonicalPath)
+ FirrtlFileAnnotation(new File("foo.fir").getPath())
phase.transform(annotations).toSet should be (expected)
}
diff --git a/src/test/scala/firrtl/testutils/FirrtlSpec.scala b/src/test/scala/firrtl/testutils/FirrtlSpec.scala
index 75739147..dfc20352 100644
--- a/src/test/scala/firrtl/testutils/FirrtlSpec.scala
+++ b/src/test/scala/firrtl/testutils/FirrtlSpec.scala
@@ -104,13 +104,13 @@ trait FirrtlRunners extends BackendCompilationUtilities {
val customName = s"${prefix}_custom"
val customAnnos = getBaseAnnos(customName) ++: toAnnos((new GetNamespace) +: customTransforms) ++: customAnnotations
- val customResult = (new firrtl.stage.FirrtlStage).run(customAnnos)
+ val customResult = (new firrtl.stage.FirrtlStage).execute(Array.empty, customAnnos)
val nsAnno = customResult.collectFirst { case m: ModuleNamespaceAnnotation => m }.get
val refSuggestedName = s"${prefix}_ref"
val refAnnos = getBaseAnnos(refSuggestedName) ++: Seq(RunFirrtlTransformAnnotation(new RenameModules), nsAnno)
- val refResult = (new firrtl.stage.FirrtlStage).run(refAnnos)
+ val refResult = (new firrtl.stage.FirrtlStage).execute(Array.empty, refAnnos)
val refName = refResult.collectFirst({ case stage.FirrtlCircuitAnnotation(c) => c.main }).getOrElse(refSuggestedName)
assert(BackendCompilationUtilities.yosysExpectSuccess(customName, refName, testDir, timesteps))
@@ -145,7 +145,7 @@ trait FirrtlRunners extends BackendCompilationUtilities {
annotations ++:
(customTransforms ++ extraCheckTransforms).map(RunFirrtlTransformAnnotation(_))
- (new firrtl.stage.FirrtlStage).run(annos)
+ (new firrtl.stage.FirrtlStage).execute(Array.empty, annos)
testDir
}
diff --git a/src/test/scala/firrtlTests/execution/VerilogExecution.scala b/src/test/scala/firrtlTests/execution/VerilogExecution.scala
index bf3d1461..89f27609 100644
--- a/src/test/scala/firrtlTests/execution/VerilogExecution.scala
+++ b/src/test/scala/firrtlTests/execution/VerilogExecution.scala
@@ -21,7 +21,8 @@ trait VerilogExecution extends TestExecution {
// Run FIRRTL, emit Verilog file
val cAnno = FirrtlCircuitAnnotation(c)
val tdAnno = TargetDirAnnotation(testDir.getAbsolutePath)
- (new FirrtlStage).run(AnnotationSeq(Seq(cAnno, tdAnno) ++ customAnnotations))
+
+ (new FirrtlStage).execute(Array.empty, AnnotationSeq(Seq(cAnno, tdAnno)) ++ customAnnotations)
// Copy harness resource to test directory
val harness = new File(testDir, s"top.cpp")
diff --git a/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala b/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
index e71eaedf..0a3cce67 100644
--- a/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
+++ b/src/test/scala/firrtlTests/options/phases/WriteOutputAnnotationsSpec.scala
@@ -7,7 +7,16 @@ import java.io.File
import firrtl.AnnotationSeq
import firrtl.annotations.{DeletedAnnotation, NoTargetAnnotation}
-import firrtl.options.{InputAnnotationFileAnnotation, OutputAnnotationFileAnnotation, Phase, WriteDeletedAnnotation}
+import firrtl.options.{
+ CustomFileEmission,
+ InputAnnotationFileAnnotation,
+ OutputAnnotationFileAnnotation,
+ Phase,
+ PhaseException,
+ StageOptions,
+ TargetDirAnnotation,
+ WriteDeletedAnnotation}
+import firrtl.options.Viewer.view
import firrtl.options.phases.{GetIncludes, WriteOutputAnnotations}
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
@@ -100,9 +109,59 @@ class WriteOutputAnnotationsSpec extends AnyFlatSpec with Matchers with firrtl.t
out.toSeq should be (annotations)
}
+ it should "write CustomFileEmission annotations" in new Fixture {
+ val file = new File("write-CustomFileEmission-annotations.anno.json")
+ val annotations = Seq( TargetDirAnnotation(dir),
+ OutputAnnotationFileAnnotation(file.toString),
+ WriteOutputAnnotationsSpec.Custom("hello!") )
+ val serializedFileName = view[StageOptions](annotations).getBuildFileName("Custom", Some(".Emission"))
+ val expected = annotations.map {
+ case _: WriteOutputAnnotationsSpec.Custom => WriteOutputAnnotationsSpec.Replacement(serializedFileName)
+ case a => a
+ }
+
+ val out = phase.transform(annotations)
+
+ info("annotations are unmodified")
+ out.toSeq should be (annotations)
+
+ fileContainsAnnotations(new File(dir, file.toString), expected)
+
+ info(s"file '$serializedFileName' exists")
+ new File(serializedFileName) should (exist)
+ }
+
+ it should "error if multiple annotations try to write to the same file" in new Fixture {
+ val file = new File("write-CustomFileEmission-annotations-error.anno.json")
+ val annotations = Seq( TargetDirAnnotation(dir),
+ OutputAnnotationFileAnnotation(file.toString),
+ WriteOutputAnnotationsSpec.Custom("foo"),
+ WriteOutputAnnotationsSpec.Custom("bar") )
+ intercept[PhaseException] {
+ phase.transform(annotations)
+ }.getMessage should startWith ("Multiple CustomFileEmission annotations")
+ }
+
}
private object WriteOutputAnnotationsSpec {
+
case object FooAnnotation extends NoTargetAnnotation
+
case class BarAnnotation(x: Int) extends NoTargetAnnotation
+
+ case class Custom(value: String) extends NoTargetAnnotation with CustomFileEmission {
+
+ override protected def baseFileName(a: AnnotationSeq): String = "Custom"
+
+ override protected def suffix: Option[String] = Some(".Emission")
+
+ override def getBytes: Iterable[Byte] = value.getBytes
+
+ override def replacements(file: File): AnnotationSeq = Seq(Replacement(file.toString))
+
+ }
+
+ case class Replacement(file: String) extends NoTargetAnnotation
+
}
diff --git a/src/test/scala/firrtlTests/transforms/LegalizeReductions.scala b/src/test/scala/firrtlTests/transforms/LegalizeReductions.scala
index 664701c3..5368c54c 100644
--- a/src/test/scala/firrtlTests/transforms/LegalizeReductions.scala
+++ b/src/test/scala/firrtlTests/transforms/LegalizeReductions.scala
@@ -65,7 +65,7 @@ circuit $name :
TargetDirAnnotation(testDir.toString) ::
CompilerAnnotation(new MinimumVerilogCompiler) ::
Nil
- val resultAnnos = (new FirrtlStage).run(annos)
+ val resultAnnos = (new FirrtlStage).transform(annos)
val outputFilename = resultAnnos.collectFirst { case OutputFileAnnotation(f) => f }
outputFilename.toRight(s"Output file not found!")
// Copy Verilator harness