From a4c072d5afd56cbc1d8292c865e9f8331d6e6f0f Mon Sep 17 00:00:00 2001 From: Chick Markley Date: Tue, 19 Sep 2017 09:36:56 -0700 Subject: 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--- .../scala/firrtl/ExecutionOptionsManager.scala | 8 +++++++- src/test/scala/firrtlTests/DriverSpec.scala | 24 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'src') 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]("...").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 { -- cgit v1.2.3