diff options
| author | Jack Koenig | 2017-03-23 14:56:26 -0700 |
|---|---|---|
| committer | GitHub | 2017-03-23 14:56:26 -0700 |
| commit | 4cffd184397905eeb79e2df0913b4ded97dc8558 (patch) | |
| tree | 9b29a87132724aa02b445ff50977a1252b69e473 /src/main | |
| parent | 945d78448dc932290f89c271916fe8946aacb9c2 (diff) | |
Add TargetDirAnnotation to give transforms access (#503)
Also add GlobalCircuitAnnotation for creating similar annotations
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/firrtl/Driver.scala | 7 | ||||
| -rw-r--r-- | src/main/scala/firrtl/ExecutionOptionsManager.scala | 3 | ||||
| -rw-r--r-- | src/main/scala/firrtl/annotations/Annotation.scala | 17 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/Driver.scala b/src/main/scala/firrtl/Driver.scala index 0fe2119d..94cfface 100644 --- a/src/main/scala/firrtl/Driver.scala +++ b/src/main/scala/firrtl/Driver.scala @@ -164,8 +164,13 @@ object Driver { // Output Annotations val outputAnnos = firrtlConfig.getEmitterAnnos(optionsManager) + // Should these and outputAnnos be moved to loadAnnotations? + val globalAnnos = Seq(TargetDirAnnotation(optionsManager.targetDirName)) + val finalState = firrtlConfig.compiler.compile( - CircuitState(parsedInput, ChirrtlForm, Some(AnnotationMap(firrtlConfig.annotations ++ outputAnnos))), + CircuitState(parsedInput, + ChirrtlForm, + Some(AnnotationMap(firrtlConfig.annotations ++ outputAnnos ++ globalAnnos))), firrtlConfig.customTransforms ) diff --git a/src/main/scala/firrtl/ExecutionOptionsManager.scala b/src/main/scala/firrtl/ExecutionOptionsManager.scala index 7bba50a5..2e95ee0c 100644 --- a/src/main/scala/firrtl/ExecutionOptionsManager.scala +++ b/src/main/scala/firrtl/ExecutionOptionsManager.scala @@ -46,6 +46,9 @@ case class CommonOptions( } } +/** [[annotations.GlobalCircuitAnnotation]] that contains the [[CommonOptions]] target directory */ +object TargetDirAnnotation extends GlobalCircuitAnnotation + trait HasCommonOptions { self: ExecutionOptionsManager => var commonOptions = CommonOptions() diff --git a/src/main/scala/firrtl/annotations/Annotation.scala b/src/main/scala/firrtl/annotations/Annotation.scala index cbc9bf1c..f96724c6 100644 --- a/src/main/scala/firrtl/annotations/Annotation.scala +++ b/src/main/scala/firrtl/annotations/Annotation.scala @@ -41,3 +41,20 @@ object DeletedAnnotation { case _ => None } } + +/** Parent class to create global annotations + * + * These annotations are Circuit-level and available to every transform + */ +abstract class GlobalCircuitAnnotation { + private lazy val marker = this.getClass.getName + def apply(value: String): Annotation = + Annotation(CircuitTopName, classOf[Transform], s"$marker:$value") + def unapply(a: Annotation): Option[String] = a match { + // Assumes transform is already filtered appropriately + case Annotation(CircuitTopName, _, str) if str.startsWith(marker) => + Some(str.stripPrefix(s"$marker:")) + case _ => None + } +} + |
