#include<"core/stringeater.stanza"> #include<"core/macro-utils.stanza"> #include<"compiler/stz-algorithms.stanza"> #include<"compiler/stz-lexer.stanza"> #include<"compiler/stz-parser.stanza"> #include("firrtl-ir.stanza") #include("ir-utils.stanza") #include("ir-parser.stanza") #include("passes.stanza") #include("primop.stanza") defpackage firrtl-main : import core import verse import firrtl/parser import firrtl/passes import stz/lexer import stz/parser import firrtl/ir-utils defn set-printvars! (p:List) : if contains(p,'t') : PRINT-TYPES = true if contains(p,'k') : PRINT-KINDS = true if contains(p,'w') : PRINT-WIDTHS = true if contains(p,'T') : PRINT-TWIDTHS = true if contains(p,'g') : PRINT-GENDERS = true if contains(p,'c') : PRINT-CIRCUITS = true ;firrtl -i gcd.fir -o gcd.flo -x qabcefghipjklmno -p c defn main () : val args = commandline-arguments() var input = false var output = false var passes = "qabcefghipjklmno" var printvars = "" for (s in args, i in 0 to false) do : if s == "-i" : input = args[i + 1] if s == "-o" : output = args[i + 1] if s == "-x" : passes = args[i + 1] if s == "-p" : printvars = args[i + 1] if input == false : error("No input file provided. Use -i flag") if output == false : error("No output file provided. Use -o flag") val lexed = lex-file(input as String) val c = parse-firrtl(lexed) set-printvars!(to-list(printvars)) run-passes(c,to-list(passes),output as String) main()