summaryrefslogtreecommitdiff
path: root/tools/upbc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tools/upbc.lua')
-rw-r--r--tools/upbc.lua50
1 files changed, 50 insertions, 0 deletions
diff --git a/tools/upbc.lua b/tools/upbc.lua
new file mode 100644
index 0000000..f68d25f
--- /dev/null
+++ b/tools/upbc.lua
@@ -0,0 +1,50 @@
+--[[
+
+ upb - a minimalist implementation of protocol buffers.
+
+ Copyright (c) 2012 Google Inc. See LICENSE for details.
+ Author: Josh Haberman <jhaberman@gmail.com>
+
+ The upb compiler. Unlike the proto2 compiler, this does
+ not output any parsing code or generated classes or anything
+ specific to the protobuf binary format at all. At the moment
+ it only dumps C initializers for upb_defs, so that a .proto
+ file can be represented in a .o file.
+
+--]]
+
+local dump_cinit = require "dump_cinit"
+local upb = require "upb"
+
+local src = arg[1]
+local outbase = arg[2]
+local basename = arg[3]
+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))
+end
+
+-- Open input/output files.
+local f = assert(io.open(src, "r"), "couldn't open input file " .. src)
+local descriptor = f:read("*all")
+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)
+
+local happend = dump_cinit.file_appender(hfile)
+local cappend = dump_cinit.file_appender(cfile)
+
+-- Dump defs
+dump_cinit.dump_defs(symtab, basename, happend, cappend)
+
+hfile:close()
+cfile:close()
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback