aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/firrtl/transforms/MustDedup.scala25
1 files changed, 11 insertions, 14 deletions
diff --git a/src/main/scala/firrtl/transforms/MustDedup.scala b/src/main/scala/firrtl/transforms/MustDedup.scala
index 0d2dd569..417e46ac 100644
--- a/src/main/scala/firrtl/transforms/MustDedup.scala
+++ b/src/main/scala/firrtl/transforms/MustDedup.scala
@@ -7,12 +7,10 @@ import firrtl.annotations._
import firrtl.annotations.TargetToken.OfModule
import firrtl.analyses.InstanceKeyGraph
import firrtl.analyses.InstanceKeyGraph.InstanceKey
-import firrtl.options.Dependency
+import firrtl.options.{Dependency, TargetDirAnnotation}
import firrtl.stage.Forms
import firrtl.graph.DiGraph
-import java.io.{File, FileWriter}
-
/** Marks modules as "must deduplicate" */
case class MustDeduplicateAnnotation(modules: Seq[IsModule]) extends Annotation {
@@ -217,27 +215,26 @@ class MustDeduplicateTransform extends Transform with DependencyAPIMigration {
}
// Write reports and modules to disk
- val dirName = state.annotations.collectFirst { case MustDeduplicateReportDirectory(dir) => dir }
- .getOrElse("dedup_failures")
- val dir = new File(dirName)
+ val dirName = state.annotations.collectFirst { case MustDeduplicateReportDirectory(dir) => dir }.getOrElse {
+ val targetDirName = state.annotations.collectFirst { case TargetDirAnnotation(dir) => dir }.getOrElse(".")
+ s"$targetDirName/dedup_failures"
+ }
+ val dir = FileUtils.getPath(dirName)
logger.error(s"Writing error report(s) to ${dir}...")
FileUtils.makeDirectory(dir.toString)
for ((report, idx) <- reports.zipWithIndex) {
- val f = new File(dir, s"report_$idx.rpt")
+ val f = dir / s"report_$idx.rpt"
logger.error(s"Writing $f...")
- val fw = new FileWriter(f)
- fw.write(report)
- fw.close()
+ os.write(f, report)
}
- val modsDir = new File(dir, "modules")
+ val modsDir = dir / "modules"
FileUtils.makeDirectory(modsDir.toString)
logger.error(s"Writing relevant modules to $modsDir...")
val relevantModule = dedupFailures.flatMap(_.relevantMods.map(_.value)).toSet
for (mod <- state.circuit.modules if relevantModule(mod.name)) {
- val fw = new FileWriter(new File(modsDir, s"${mod.name}.fir"))
- fw.write(mod.serialize)
- fw.close()
+ val f = modsDir / s"${mod.name}.fir"
+ os.write(f, mod.serialize)
}
val msg = s"Modules marked 'must deduplicate' failed to deduplicate! See error reports in $dirName"