aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/logger/phases
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/logger/phases')
-rw-r--r--src/main/scala/logger/phases/AddDefaults.scala27
-rw-r--r--src/main/scala/logger/phases/Checks.scala42
2 files changed, 69 insertions, 0 deletions
diff --git a/src/main/scala/logger/phases/AddDefaults.scala b/src/main/scala/logger/phases/AddDefaults.scala
new file mode 100644
index 00000000..f6daa811
--- /dev/null
+++ b/src/main/scala/logger/phases/AddDefaults.scala
@@ -0,0 +1,27 @@
+// See LICENSE for license details.
+
+package logger.phases
+
+import firrtl.AnnotationSeq
+import firrtl.options.Phase
+
+import logger.{LoggerOption, LogLevelAnnotation}
+
+/** Add default logger [[Annotation]]s */
+private [logger] object AddDefaults extends Phase {
+
+ /** Add missing default [[Logger]] [[Annotation]]s to an [[AnnotationSeq]]
+ * @param annotations input annotations
+ * @return output annotations with defaults
+ */
+ def transform(annotations: AnnotationSeq): AnnotationSeq = {
+ var ll = true
+ annotations.collect{ case a: LoggerOption => a }.map{
+ case _: LogLevelAnnotation => ll = false
+ case _ =>
+ }
+ annotations ++
+ (if (ll) Seq(LogLevelAnnotation()) else Seq() )
+ }
+
+}
diff --git a/src/main/scala/logger/phases/Checks.scala b/src/main/scala/logger/phases/Checks.scala
new file mode 100644
index 00000000..c706948c
--- /dev/null
+++ b/src/main/scala/logger/phases/Checks.scala
@@ -0,0 +1,42 @@
+// See LICENSE for license details.
+
+package logger.phases
+
+import firrtl.AnnotationSeq
+import firrtl.annotations.Annotation
+import firrtl.options.Phase
+
+import logger.{LogLevelAnnotation, LogFileAnnotation, LoggerException}
+
+import scala.collection.mutable
+
+/** Check that an [[firrtl.AnnotationSeq AnnotationSeq]] has all necessary [[firrtl.annotations.Annotation Annotation]]s
+ * for a [[Logger]] */
+object Checks extends Phase {
+
+ /** Ensure that an [[firrtl.AnnotationSeq AnnotationSeq]] has necessary [[Logger]] [[firrtl.annotations.Annotation
+ * Annotation]]s
+ * @param annotations input annotations
+ * @return input annotations unmodified
+ * @throws logger.LoggerException
+ */
+ def transform(annotations: AnnotationSeq): AnnotationSeq = {
+ val ll, lf = mutable.ListBuffer[Annotation]()
+ annotations.foreach(
+ _ match {
+ case a: LogLevelAnnotation => ll += a
+ case a: LogFileAnnotation => lf += a
+ case _ => })
+ if (ll.size > 1) {
+ val l = ll.map{ case LogLevelAnnotation(x) => x }
+ throw new LoggerException(
+ s"""|At most one log level can be specified, but found '${l.mkString(", ")}' specified via:
+ | - an option or annotation: -ll, --log-level, LogLevelAnnotation""".stripMargin )}
+ if (lf.size > 1) {
+ throw new LoggerException(
+ s"""|At most one log file can be specified, but found ${lf.size} combinations of:
+ | - an options or annotation: -ltf, --log-to-file, --log-file, LogFileAnnotation""".stripMargin )}
+ annotations
+ }
+
+}