summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/stage/package.scala
blob: c76dac17c8219cfdd79a794d734f1fa2fcd45c6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// SPDX-License-Identifier: Apache-2.0

package chisel3

import firrtl._
import firrtl.options.OptionsView

import chisel3.internal.firrtl.{Circuit => ChiselCircuit}
import chisel3.stage.CircuitSerializationAnnotation.FirrtlFileFormat

package object stage {

  implicit object ChiselOptionsView extends OptionsView[ChiselOptions] {

    def view(options: AnnotationSeq): ChiselOptions = options.collect { case a: ChiselOption => a }
      .foldLeft(new ChiselOptions()) { (c, x) =>
        x match {
          case NoRunFirrtlCompilerAnnotation  => c.copy(runFirrtlCompiler = false)
          case PrintFullStackTraceAnnotation  => c.copy(printFullStackTrace = true)
          case ThrowOnFirstErrorAnnotation    => c.copy(throwOnFirstError = true)
          case WarnReflectiveNamingAnnotation => c.copy(warnReflectiveNaming = true)
          case WarningsAsErrorsAnnotation     => c.copy(warningsAsErrors = true)
          case ChiselOutputFileAnnotation(f)  => c.copy(outputFile = Some(f))
          case ChiselCircuitAnnotation(a)     => c.copy(chiselCircuit = Some(a))
        }
      }

  }
}