From ef8f06f23b9ee6cf86de2450752dfd0fcd32da80 Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Mon, 22 Apr 2019 21:20:08 -0400 Subject: Add ShellOption, DeletedWrapper Abstracts away option writing such that users no longer have to understand scopt semantics. This adds a ShellOption class and a HasShellOptions trait for something which provides one or more ShellOptions. This refactors the FIRRTL codebase to use this style of option specification. Adds and uses DeletedWrapper to automatically generate DeletedAnnotations. Signed-off-by: Schuyler Eldridge --- src/main/scala/firrtl/transforms/CheckCombLoops.scala | 12 ++++++------ src/main/scala/firrtl/transforms/DeadCodeElimination.scala | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/main/scala/firrtl/transforms') diff --git a/src/main/scala/firrtl/transforms/CheckCombLoops.scala b/src/main/scala/firrtl/transforms/CheckCombLoops.scala index 0a9ec0e3..17e1569b 100644 --- a/src/main/scala/firrtl/transforms/CheckCombLoops.scala +++ b/src/main/scala/firrtl/transforms/CheckCombLoops.scala @@ -17,7 +17,7 @@ import firrtl.annotations._ import firrtl.Utils.throwInternalError import firrtl.graph.{MutableDiGraph,DiGraph} import firrtl.analyses.InstanceGraph -import firrtl.options.RegisteredTransform +import firrtl.options.{RegisteredTransform, ShellOption} import scopt.OptionParser object CheckCombLoops { @@ -69,11 +69,11 @@ class CheckCombLoops extends Transform with RegisteredTransform { import CheckCombLoops._ - def addOptions(parser: OptionParser[AnnotationSeq]): Unit = parser - .opt[Unit]("no-check-comb-loops") - .action( (x, c) => c :+ DontCheckCombLoopsAnnotation ) - .maxOccurs(1) - .text("Do NOT check for combinational loops (not recommended)") + val options = Seq( + new ShellOption[Unit]( + longOption = "no-check-comb-loops", + toAnnotationSeq = (_: Unit) => Seq(DontCheckCombLoopsAnnotation), + helpText = "Disable combinational loop checking" ) ) /* * A case class that represents a net in the circuit. This is diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala index deb7299d..0c357267 100644 --- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala +++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala @@ -11,7 +11,7 @@ import firrtl.Mappers._ import firrtl.WrappedExpression._ import firrtl.Utils.{throwInternalError, toWrappedExpression, kind} import firrtl.MemoizedHash._ -import firrtl.options.RegisteredTransform +import firrtl.options.{RegisteredTransform, ShellOption} import scopt.OptionParser import collection.mutable @@ -36,11 +36,11 @@ class DeadCodeElimination extends Transform with ResolvedAnnotationPaths with Re def inputForm = LowForm def outputForm = LowForm - def addOptions(parser: OptionParser[AnnotationSeq]): Unit = parser - .opt[Unit]("no-dce") - .action( (x, c) => c :+ NoDCEAnnotation ) - .maxOccurs(1) - .text("Do NOT run dead code elimination") + val options = Seq( + new ShellOption[Unit]( + longOption = "no-dce", + toAnnotationSeq = (_: Unit) => Seq(NoDCEAnnotation), + helpText = "Disable dead code elimination" ) ) /** Based on LogicNode ins CheckCombLoops, currently kind of faking it */ private type LogicNode = MemoizedHash[WrappedExpression] -- cgit v1.2.3