From c4dec947d54a52c3092bd7855180d42afaae3776 Mon Sep 17 00:00:00 2001 From: mergify[bot] Date: Sat, 13 Aug 2022 00:17:56 +0000 Subject: Add option to treat warnings as errors (backport #2676) (#2677) * Add option to treat warnings as errors (#2676) Add --warnings-as-errors option (cherry picked from commit 498946663726955c380a1e420f5d7b9630000aad) # Conflicts: # core/src/main/scala/chisel3/experimental/hierarchy/Definition.scala # core/src/main/scala/chisel3/internal/Builder.scala # src/main/scala/chisel3/aop/injecting/InjectingAspect.scala # src/main/scala/chisel3/stage/ChiselOptions.scala # src/main/scala/chisel3/stage/package.scala # src/main/scala/chisel3/stage/phases/Elaborate.scala * Resolve backport conflicts Co-authored-by: Zachary Yedidia Co-authored-by: Jack Koenig --- .../scala/chisel3/aop/injecting/InjectingAspect.scala | 7 ++++++- src/main/scala/chisel3/stage/ChiselAnnotations.scala | 18 ++++++++++++++++++ src/main/scala/chisel3/stage/ChiselCli.scala | 1 + src/main/scala/chisel3/stage/ChiselOptions.scala | 3 +++ src/main/scala/chisel3/stage/package.scala | 1 + src/main/scala/chisel3/stage/phases/Elaborate.scala | 7 ++++++- 6 files changed, 35 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala b/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala index 087bdae2..ecce19e1 100644 --- a/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala +++ b/src/main/scala/chisel3/aop/injecting/InjectingAspect.scala @@ -59,7 +59,12 @@ abstract class InjectorAspect[T <: RawModule, M <: RawModule]( RunFirrtlTransformAnnotation(new InjectingTransform) +: modules.map { module => val chiselOptions = view[ChiselOptions](annotationsInAspect) val dynamicContext = - new DynamicContext(annotationsInAspect, chiselOptions.throwOnFirstError, chiselOptions.warnReflectiveNaming) + new DynamicContext( + annotationsInAspect, + chiselOptions.throwOnFirstError, + chiselOptions.warnReflectiveNaming, + chiselOptions.warningsAsErrors + ) // Add existing module names into the namespace. If injection logic instantiates new modules // which would share the same name, they will get uniquified accordingly moduleNames.foreach { n => diff --git a/src/main/scala/chisel3/stage/ChiselAnnotations.scala b/src/main/scala/chisel3/stage/ChiselAnnotations.scala index eda05a7d..f65fabdc 100644 --- a/src/main/scala/chisel3/stage/ChiselAnnotations.scala +++ b/src/main/scala/chisel3/stage/ChiselAnnotations.scala @@ -79,6 +79,24 @@ case object ThrowOnFirstErrorAnnotation } +/** When enabled, warnings will be treated as errors. + */ +case object WarningsAsErrorsAnnotation + extends NoTargetAnnotation + with ChiselOption + with HasShellOptions + with Unserializable { + + val options = Seq( + new ShellOption[Unit]( + longOption = "warnings-as-errors", + toAnnotationSeq = _ => Seq(WarningsAsErrorsAnnotation), + helpText = "Treat warnings as errors" + ) + ) + +} + /** Warn when reflective naming changes names of signals */ case object WarnReflectiveNamingAnnotation extends NoTargetAnnotation diff --git a/src/main/scala/chisel3/stage/ChiselCli.scala b/src/main/scala/chisel3/stage/ChiselCli.scala index 8c5eb79a..60e30152 100644 --- a/src/main/scala/chisel3/stage/ChiselCli.scala +++ b/src/main/scala/chisel3/stage/ChiselCli.scala @@ -10,6 +10,7 @@ trait ChiselCli { this: Shell => NoRunFirrtlCompilerAnnotation, PrintFullStackTraceAnnotation, ThrowOnFirstErrorAnnotation, + WarningsAsErrorsAnnotation, WarnReflectiveNamingAnnotation, ChiselOutputFileAnnotation, ChiselGeneratorAnnotation diff --git a/src/main/scala/chisel3/stage/ChiselOptions.scala b/src/main/scala/chisel3/stage/ChiselOptions.scala index a03f3d7b..42a0ce68 100644 --- a/src/main/scala/chisel3/stage/ChiselOptions.scala +++ b/src/main/scala/chisel3/stage/ChiselOptions.scala @@ -9,6 +9,7 @@ class ChiselOptions private[stage] ( val printFullStackTrace: Boolean = false, val throwOnFirstError: Boolean = false, val warnReflectiveNaming: Boolean = false, + val warningsAsErrors: Boolean = false, val outputFile: Option[String] = None, val chiselCircuit: Option[Circuit] = None) { @@ -17,6 +18,7 @@ class ChiselOptions private[stage] ( printFullStackTrace: Boolean = printFullStackTrace, throwOnFirstError: Boolean = throwOnFirstError, warnReflectiveNaming: Boolean = warnReflectiveNaming, + warningsAsErrors: Boolean = warningsAsErrors, outputFile: Option[String] = outputFile, chiselCircuit: Option[Circuit] = chiselCircuit ): ChiselOptions = { @@ -26,6 +28,7 @@ class ChiselOptions private[stage] ( printFullStackTrace = printFullStackTrace, throwOnFirstError = throwOnFirstError, warnReflectiveNaming = warnReflectiveNaming, + warningsAsErrors = warningsAsErrors, outputFile = outputFile, chiselCircuit = chiselCircuit ) diff --git a/src/main/scala/chisel3/stage/package.scala b/src/main/scala/chisel3/stage/package.scala index 10c8c524..c76dac17 100644 --- a/src/main/scala/chisel3/stage/package.scala +++ b/src/main/scala/chisel3/stage/package.scala @@ -19,6 +19,7 @@ package object stage { 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)) } diff --git a/src/main/scala/chisel3/stage/phases/Elaborate.scala b/src/main/scala/chisel3/stage/phases/Elaborate.scala index ba29e5f2..a3fc4990 100644 --- a/src/main/scala/chisel3/stage/phases/Elaborate.scala +++ b/src/main/scala/chisel3/stage/phases/Elaborate.scala @@ -30,7 +30,12 @@ class Elaborate extends Phase { val chiselOptions = view[ChiselOptions](annotations) try { val context = - new DynamicContext(annotations, chiselOptions.throwOnFirstError, chiselOptions.warnReflectiveNaming) + new DynamicContext( + annotations, + chiselOptions.throwOnFirstError, + chiselOptions.warnReflectiveNaming, + chiselOptions.warningsAsErrors + ) val (circuit, dut) = Builder.build(Module(gen()), context) Seq(ChiselCircuitAnnotation(circuit), DesignAnnotation(dut)) -- cgit v1.2.3