aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/proto
diff options
context:
space:
mode:
authorJared Barocsi2021-09-08 13:30:47 -0700
committerGitHub2021-09-08 13:30:47 -0700
commit0c1ca581efe7fbad99ffc713a3802b5f2ffb68b6 (patch)
treee1c397fa446c373c754b93ea20c7b860c0136639 /src/main/scala/firrtl/proto
parented391031dc2008f562e0f5ac53828941c677afc7 (diff)
Multi protobuf module emission and consumption (#2344)
* Add compiler option (`-p`) to emit individual module protobufs * Implement multi module combination when reading directory of protobufs Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'src/main/scala/firrtl/proto')
-rw-r--r--src/main/scala/firrtl/proto/FromProto.scala25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/proto/FromProto.scala b/src/main/scala/firrtl/proto/FromProto.scala
index ed641eb2..91b3f872 100644
--- a/src/main/scala/firrtl/proto/FromProto.scala
+++ b/src/main/scala/firrtl/proto/FromProto.scala
@@ -9,6 +9,11 @@ import collection.JavaConverters._
import FirrtlProtos._
import com.google.protobuf.CodedInputStream
import Firrtl.Statement.{Formal, ReadUnderWrite}
+import firrtl.ir.DefModule
+import Utils.combine
+import java.io.FileNotFoundException
+import firrtl.options.OptionsException
+import java.nio.file.NotDirectoryException
object FromProto {
@@ -33,6 +38,26 @@ object FromProto {
proto.FromProto.convert(pb)
}
+ /** Deserialize all the ProtoBuf representations of [[ir.Circuit]] in @dir
+ *
+ * @param dir directory containing ProtoBuf representation(s)
+ * @return Deserialized FIRRTL Circuit
+ * @throws java.io.FileNotFoundException if dir does not exist
+ * @throws java.nio.file.NotDirectoryException if dir exists but is not a directory
+ */
+ def fromDirectory(dir: String): ir.Circuit = {
+ val d = new File(dir)
+ if (!d.exists) {
+ throw new FileNotFoundException(s"Specified directory '$d' does not exist!")
+ }
+ if (!d.isDirectory) {
+ throw new NotDirectoryException(s"'$d' is not a directory!")
+ }
+
+ val fileList = d.listFiles.filter(_.isFile).toList
+ combine(fileList.map(f => fromInputStream(new FileInputStream(f))))
+ }
+
// Convert from ProtoBuf message repeated Statements to FIRRRTL Block
private def compressStmts(stmts: scala.collection.Seq[ir.Statement]): ir.Statement = stmts match {
case scala.collection.Seq() => ir.EmptyStmt