#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 defn main () : val args = commandline-arguments() val pathname = args[1] val lexed = lex-file(pathname) val c = parse-firrtl(lexed) val dir = "." ;; could have dir arg val name = last(split(pathname,'/')) val basename = split(name,'.')[0] val outname = string-join([dir "/" basename ".flo"]) if length(args) >= 4 : set-printvars!(to-list(args[3])) if length(args) >= 3 : run-passes(c,to-list(args[2]), outname) else : run-passes(c,to-list("qabcefghipjklmno"), outname) main()