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>")
// )
// )
// }
|