diff options
| author | Chick Markley | 2017-02-01 20:43:21 -0800 |
|---|---|---|
| committer | GitHub | 2017-02-01 20:43:21 -0800 |
| commit | 32af1d4fafc64ddb669b313e627b2e3a308dc1ab (patch) | |
| tree | 8a9f512a4657337ad233ff90935a94f5c90670ed /src/main/scala | |
| parent | a017bf38f72e1d7dd1bd59e7cd7beb77a50e4259 (diff) | |
Fix anno in backend (#428)
* fixed up impementation of deleteDirectoryHierarchy
Added a few more tests
* Round 2 of moving verilog to target dir
Only create .f file if some files have been moved
Some small style fixes in Driver
Restored lost functionality to add -f argument in verilogToCpp
Fixed loadAnnotations to add targetDir regardless of annotations arriving from file or through options
Diffstat (limited to 'src/main/scala')
| -rw-r--r-- | src/main/scala/firrtl/Driver.scala | 63 | ||||
| -rw-r--r-- | src/main/scala/firrtl/transforms/BlackBoxSourceHelper.scala | 8 | ||||
| -rw-r--r-- | src/main/scala/firrtl/util/BackendCompilationUtilities.scala | 28 |
3 files changed, 62 insertions, 37 deletions
diff --git a/src/main/scala/firrtl/Driver.scala b/src/main/scala/firrtl/Driver.scala index 238906c8..fb897936 100644 --- a/src/main/scala/firrtl/Driver.scala +++ b/src/main/scala/firrtl/Driver.scala @@ -67,6 +67,7 @@ object Driver { * * @param message error message */ + //scalastyle:off regex def dramaticError(message: String): Unit = { println(Console.RED + "-"*78) println(s"Error: $message") @@ -86,29 +87,28 @@ object Driver { The annotation file if needed is found via s"$targetDirName/$topName.anno" or s"$annotationFileNameOverride.anno" */ - val firrtlConfig = optionsManager.firrtlOptions + def firrtlConfig = optionsManager.firrtlOptions + if(firrtlConfig.annotations.isEmpty) { val annotationFileName = firrtlConfig.getAnnotationFileName(optionsManager) val annotationFile = new File(annotationFileName) if (annotationFile.exists) { val annotationsYaml = io.Source.fromFile(annotationFile).getLines().mkString("\n").parseYaml - val annotationArray = { - val annos = annotationsYaml.convertTo[Array[Annotation]] - - if (annos.nonEmpty) { - annos ++ List(Annotation( - CircuitName("All"), - classOf[BlackBoxSourceHelper], - BlackBoxTargetDir(optionsManager.targetDirName).serialize - )) - } - else { - annos - } - } + val annotationArray = annotationsYaml.convertTo[Array[Annotation]] optionsManager.firrtlOptions = firrtlConfig.copy(annotations = firrtlConfig.annotations ++ annotationArray) } } + + if(firrtlConfig.annotations.nonEmpty) { + val targetDirAnno = List(Annotation( + CircuitName("All"), + classOf[BlackBoxSourceHelper], + BlackBoxTargetDir(optionsManager.targetDirName).serialize + )) + + optionsManager.firrtlOptions = optionsManager.firrtlOptions.copy( + annotations = firrtlConfig.annotations ++ targetDirAnno) + } } /** @@ -119,7 +119,7 @@ object Driver { * for downstream tools as desired */ def execute(optionsManager: ExecutionOptionsManager with HasFirrtlOptions): FirrtlExecutionResult = { - val firrtlConfig = optionsManager.firrtlOptions + def firrtlConfig = optionsManager.firrtlOptions Logger.setOptions(optionsManager) @@ -229,19 +229,32 @@ object FileUtils { * * @param directoryPathName a directory hierarchy to delete */ - def deleteDirectoryHierarchy(directoryPathName: String): Unit = { - if(directoryPathName.isEmpty || directoryPathName.startsWith("/")) { - // don't delete absolute path + def deleteDirectoryHierarchy(directoryPathName: String): Boolean = { + deleteDirectoryHierarchy(new File(directoryPathName)) + } + /** + * recursively delete all directories in a relative path + * DO NOT DELETE absolute paths + * + * @param file: a directory hierarchy to delete + */ + def deleteDirectoryHierarchy(file: File, atTop: Boolean = true): Boolean = { + if(file.getPath.split("/").last.isEmpty || + file.getAbsolutePath == "/" || + file.getPath.startsWith("/")) { + Driver.dramaticError(s"delete directory ${file.getPath} will not delete absolute paths") + false } else { - val directory = new java.io.File(directoryPathName) - if(directory.isDirectory) { - directory.delete() - val directories = directoryPathName.split("/+").reverse.tail - if (directories.nonEmpty) { - deleteDirectoryHierarchy(directories.reverse.mkString("/")) + val result = { + if(file.isDirectory) { + file.listFiles().forall( f => deleteDirectoryHierarchy(f)) && file.delete() + } + else { + file.delete() } } + result } } } diff --git a/src/main/scala/firrtl/transforms/BlackBoxSourceHelper.scala b/src/main/scala/firrtl/transforms/BlackBoxSourceHelper.scala index 914ca859..15878dc2 100644 --- a/src/main/scala/firrtl/transforms/BlackBoxSourceHelper.scala +++ b/src/main/scala/firrtl/transforms/BlackBoxSourceHelper.scala @@ -116,9 +116,11 @@ class BlackBoxSourceHelper extends firrtl.Transform { } state } - val writer = new PrintWriter(new File(targetDir, BlackBoxSourceHelper.FileListName)) - writer.write(fileList.map { fileName => s"-v $fileName" }.mkString("\n")) - writer.close() + if(fileList.nonEmpty) { + val writer = new PrintWriter(new File(targetDir, BlackBoxSourceHelper.FileListName)) + writer.write(fileList.map { fileName => s"-v $fileName" }.mkString("\n")) + writer.close() + } resultState } diff --git a/src/main/scala/firrtl/util/BackendCompilationUtilities.scala b/src/main/scala/firrtl/util/BackendCompilationUtilities.scala index 8c07192b..8f4ab73d 100644 --- a/src/main/scala/firrtl/util/BackendCompilationUtilities.scala +++ b/src/main/scala/firrtl/util/BackendCompilationUtilities.scala @@ -2,16 +2,12 @@ package firrtl.util -import scala.sys.process._ import java.io._ import java.nio.file.Files import java.text.SimpleDateFormat import java.util.Calendar -import firrtl._ -import firrtl.{Driver, ExecutionOptionsManager} - -import scala.sys.process.{ProcessBuilder, ProcessLogger} +import scala.sys.process.{ProcessBuilder, ProcessLogger, _} trait BackendCompilationUtilities { /** Parent directory for tests */ @@ -93,8 +89,22 @@ trait BackendCompilationUtilities { cppHarness: File ): ProcessBuilder = { val topModule = dutFile - val command = Seq("verilator", - "--cc", s"$dutFile.v") ++ + + val blackBoxVerilogList = { + val list_file = new File(dir, firrtl.transforms.BlackBoxSourceHelper.FileListName) + if(list_file.exists()) { + Seq("-f", list_file.getAbsolutePath) + } + else { + Seq.empty[String] + } + } + + val command = Seq( + "verilator", + "--cc", s"$dutFile.v" + ) ++ + blackBoxVerilogList ++ vSources.flatMap(file => Seq("-v", file.getAbsolutePath)) ++ Seq("--assert", "-Wno-fatal", @@ -115,7 +125,7 @@ trait BackendCompilationUtilities { } def cppToExe(prefix: String, dir: File): ProcessBuilder = - Seq("make", "-C", dir.toString, "-j", "-f", s"V${prefix}.mk", s"V${prefix}") + Seq("make", "-C", dir.toString, "-j", "-f", s"V$prefix.mk", s"V$prefix") def executeExpectingFailure( prefix: String, @@ -123,7 +133,7 @@ trait BackendCompilationUtilities { assertionMsg: String = ""): Boolean = { var triggered = false val assertionMessageSupplied = assertionMsg != "" - val e = Process(s"./V${prefix}", dir) ! + val e = Process(s"./V$prefix", dir) ! ProcessLogger(line => { triggered = triggered || (assertionMessageSupplied && line.contains(assertionMsg)) System.out.println(line) // scalastyle:ignore regex |
