diff options
Diffstat (limited to 'tools/upbc.lua')
-rw-r--r-- | tools/upbc.lua | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/tools/upbc.lua b/tools/upbc.lua index a248318..5db5fba 100644 --- a/tools/upbc.lua +++ b/tools/upbc.lua @@ -12,40 +12,47 @@ local dump_cinit = require "dump_cinit" local upb = require "upb" local src = arg[1] -local outbase = arg[2] -local basename = arg[3] -if not (src and outbase and basename) then - print("Usage: upbc <binary descriptor> <output filename base> <symbol prefix>") +if not src then + print("Usage: upbc <binary descriptor>") return 1 end -local hfilename = outbase .. ".upb.h" -local cfilename = outbase .. ".upb.c" - -if os.getenv("UPBC_VERBOSE") then - print("upbc:") - print(string.format(" source file=%s", src)) - print(string.format(" output file base=%s", outbase)) - print(string.format(" hfilename=%s", hfilename)) - print(string.format(" cfilename=%s", cfilename)) +function strip_proto(filename) + return string.gsub(filename, '%.proto$','') end -- Open input/output files. local f = assert(io.open(src, "r"), "couldn't open input file " .. src) local descriptor = f:read("*all") +local files = upb.load_descriptor(descriptor) local symtab = upb.SymbolTable() -symtab:load_descriptor(descriptor) -os.execute(string.format("mkdir -p `dirname %s`", outbase)) -local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename) -local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename) +for _, file in ipairs(files) do + symtab:add_file(file) + local outbase = strip_proto(file:name()) + + local hfilename = outbase .. ".upbdefs.h" + local cfilename = outbase .. ".upbdefs.c" + + if os.getenv("UPBC_VERBOSE") then + print("upbc:") + print(string.format(" source file=%s", src)) + print(string.format(" output file base=%s", outbase)) + print(string.format(" hfilename=%s", hfilename)) + print(string.format(" cfilename=%s", cfilename)) + end -local happend = dump_cinit.file_appender(hfile) -local cappend = dump_cinit.file_appender(cfile) + os.execute(string.format("mkdir -p `dirname %s`", outbase)) + local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename) + local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename) --- Dump defs -dump_cinit.dump_defs(symtab, basename, happend, cappend) + local happend = dump_cinit.file_appender(hfile) + local cappend = dump_cinit.file_appender(cfile) -hfile:close() -cfile:close() + -- Dump defs + dump_cinit.dump_defs(file, happend, cappend) + + hfile:close() + cfile:close() +end |