summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/aop/AspectLibrary.scala
blob: fb6a2dbcc1a27f0366579662809223bbdc2ecdf1 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// // SPDX-License-Identifier: Apache-2.0

// package chisel3.aop

// import chisel3.RawModule
// import firrtl.options.{OptionsException, RegisteredLibrary, ShellOption}

// /** Enables adding aspects to a design from the commandline, e.g.
//   *  sbt> runMain chisel3.stage.ChiselMain --module <module> --with-aspect <aspect>
//   */
// final class AspectLibrary() extends RegisteredLibrary {
//   val name = "AspectLibrary"

//   import scala.reflect.runtime.universe._

//   private def apply(aspectName: String): Aspect[RawModule] = {
//     try {
//       // If a regular class, instantiate, otherwise try as a singleton object
//       try {
//         val x = Class.forName(aspectName).asInstanceOf[Class[_ <: Aspect[RawModule]]]
//         x.newInstance()
//       } catch {
//         case e: InstantiationException =>
//           val rm = runtimeMirror(getClass.getClassLoader)
//           val x = rm.staticModule(aspectName)
//           try {
//             rm.reflectModule(x).instance.asInstanceOf[Aspect[RawModule]]
//           } catch {
//             case _: Exception => throw e
//           }
//       }
//     } catch {
//       case e: ClassNotFoundException =>
//         throw new OptionsException(s"Unable to locate aspect '$aspectName'! (Did you misspell it?)", e)
//       case e: InstantiationException =>
//         throw new OptionsException(
//           s"Unable to create instance of aspect '$aspectName'! (Does this class take parameters?)",
//           e
//         )
//     }
//   }

//   val options = Seq(
//     new ShellOption[String](
//       longOption = "with-aspect",
//       toAnnotationSeq = {
//         case aspectName: String => Seq(apply(aspectName))
//       },
//       helpText = "The name/class of an aspect to compile with (must be a class/object without arguments!)",
//       helpValueName = Some("<package>.<aspect>")
//     )
//   )
// }