diff options
| author | Jared Barocsi | 2021-09-08 13:30:47 -0700 |
|---|---|---|
| committer | GitHub | 2021-09-08 13:30:47 -0700 |
| commit | 0c1ca581efe7fbad99ffc713a3802b5f2ffb68b6 (patch) | |
| tree | e1c397fa446c373c754b93ea20c7b860c0136639 /src/main/scala/firrtl/proto | |
| parent | ed391031dc2008f562e0f5ac53828941c677afc7 (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.scala | 25 |
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 |
