diff --git a/newbinding/Makefile b/newbinding/Makefile index d07bc8f..61227e5 100644 --- a/newbinding/Makefile +++ b/newbinding/Makefile @@ -1,9 +1,9 @@ PYTHON = python PYMODS = raw_ostream SmallVector Type DerivedTypes StringRef -PYMODS += Value User Constant -PYMODS += LLVMContext AssemblyAnnotationWriter Module +PYMODS += LLVMContext AssemblyAnnotationWriter Module +PYMODS += Value User Constant all: _api.so _capsule.so diff --git a/newbinding/gen.py b/newbinding/gen.py index d73b29a..cee71f1 100644 --- a/newbinding/gen.py +++ b/newbinding/gen.py @@ -56,6 +56,7 @@ class Context(object): self.functions = {} self.classes = {} self.definitions = [] + self._pending_symbols = [] def generate_cpp(self, println): for i in self.includes: @@ -168,12 +169,15 @@ _init_extra_wrapper() def add_module(self, module): allsyms = [(k, v) for k, v in vars(module).items() if isinstance(v, Binding)] - symtab = sorted(allsyms, key=lambda x: x[1].rank) - # generate includes - for k, v in symtab: + for k, v in allsyms: self.includes |= v.include + self._pending_symbols.extend(allsyms) + + def materialize(self): + symtab = sorted(self._pending_symbols, key=lambda x: x[1].rank) + # compile everything for k, v in symtab: buf = StringIO() @@ -237,6 +241,7 @@ if __name__ == '__main__': for mod in modules: context.add_module(mod) + context.materialize() with open('%s.cpp' % outputfilename, 'w') as outfile: println = wrap_println(outfile)