aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChick Markley2017-09-19 09:36:56 -0700
committerGitHub2017-09-19 09:36:56 -0700
commita4c072d5afd56cbc1d8292c865e9f8331d6e6f0f (patch)
treef2cf57a46b7e5dcddf2636f06e7073499b04c053 /src
parentc5627f355767d4c4f5232fee81a61b7e8510672f (diff)
Create way of collecting program arguments in Driver (#659)
Adds programArgs to commonOptions programArgs is all arguments on command line with out leading -/+ or are not bound to a flag. Create simple test
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/ExecutionOptionsManager.scala8
-rw-r--r--src/test/scala/firrtlTests/DriverSpec.scala24
2 files changed, 31 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/ExecutionOptionsManager.scala b/src/main/scala/firrtl/ExecutionOptionsManager.scala
index e0bd1975..4ffc7915 100644
--- a/src/main/scala/firrtl/ExecutionOptionsManager.scala
+++ b/src/main/scala/firrtl/ExecutionOptionsManager.scala
@@ -34,7 +34,9 @@ case class CommonOptions(
globalLogLevel: LogLevel.Value = LogLevel.None,
logToFile: Boolean = false,
logClassNames: Boolean = false,
- classLogLevels: Map[String, LogLevel.Value] = Map.empty) extends ComposableOptions {
+ classLogLevels: Map[String, LogLevel.Value] = Map.empty,
+ programArgs: Seq[String] = Seq.empty
+) extends ComposableOptions {
def getLogFileName(optionsManager: ExecutionOptionsManager): String = {
if(topName.isEmpty) {
@@ -126,6 +128,10 @@ trait HasCommonOptions {
.text(s"shows class names and log level in logging output, useful for target --class-log-level")
parser.help("help").text("prints this usage text")
+
+ parser.arg[String]("<arg>...").unbounded().optional().action( (x, c) =>
+ commonOptions = commonOptions.copy(programArgs = commonOptions.programArgs :+ x) ).text("optional unbounded args")
+
}
/** Firrtl output configuration specified by [[FirrtlExecutionOptions]]
diff --git a/src/test/scala/firrtlTests/DriverSpec.scala b/src/test/scala/firrtlTests/DriverSpec.scala
index e3164f89..190b2b42 100644
--- a/src/test/scala/firrtlTests/DriverSpec.scala
+++ b/src/test/scala/firrtlTests/DriverSpec.scala
@@ -11,6 +11,7 @@ import firrtl.transforms.BlackBoxSourceHelper
import firrtl._
import firrtl.util.BackendCompilationUtilities
+//noinspection ScalaStyle
class DriverSpec extends FreeSpec with Matchers with BackendCompilationUtilities {
"CommonOptions are some simple options available across the chisel3 ecosystem" - {
"CommonOption provide an scopt implementation of an OptionParser" - {
@@ -53,6 +54,29 @@ class DriverSpec extends FreeSpec with Matchers with BackendCompilationUtilities
FileUtils.deleteDirectoryHierarchy("a") should be (true)
}
}
+ "options include by default a list of strings that are returned in commonOptions.programArgs" in {
+ val optionsManager = new ExecutionOptionsManager("test")
+
+ optionsManager.parse(Array("--top-name", "dog", "fox", "tardigrade", "stomatopod")) should be (true)
+ println(s"programArgs ${optionsManager.commonOptions.programArgs}")
+ optionsManager.commonOptions.programArgs.length should be (3)
+ optionsManager.commonOptions.programArgs should be ("fox" :: "tardigrade" :: "stomatopod" :: Nil)
+
+ optionsManager.commonOptions = CommonOptions()
+ optionsManager.parse(
+ Array("dog", "stomatopod")) should be (true)
+ println(s"programArgs ${optionsManager.commonOptions.programArgs}")
+ optionsManager.commonOptions.programArgs.length should be (2)
+ optionsManager.commonOptions.programArgs should be ("dog" :: "stomatopod" :: Nil)
+
+ optionsManager.commonOptions = CommonOptions()
+ optionsManager.parse(
+ Array("fox", "--top-name", "dog", "tardigrade", "stomatopod")) should be (true)
+ println(s"programArgs ${optionsManager.commonOptions.programArgs}")
+ optionsManager.commonOptions.programArgs.length should be (3)
+ optionsManager.commonOptions.programArgs should be ("fox" :: "tardigrade" :: "stomatopod" :: Nil)
+
+ }
}
"FirrtlOptions holds option information for the firrtl compiler" - {
"It includes a CommonOptions" in {