def make_source(self, groups, code_opts, gen_opts):
modules = self.make_modules(groups, code_opts)<EOL>var_decls = modules.var_decls<EOL>relocs = AttrsGetter(modules.relocs)<EOL>x86, x64 = relocs.get_attrs('<STR_LIT>', '<STR_LIT>')<EOL>if code_opts.windll:<EOL><INDENT>structs, x86_reloc, x64_reloc = make_windll(<EOL>modules.structs<EOL>)<EOL>x86 += x86_reloc<EOL>x64 += x64_reloc<EOL><DEDENT>else:<EOL><INDENT>structs = '<STR_LIT>'.join(modules.structs)<EOL><DEDENT>c_relocs = reloc_both(relocs.strings + x86, x64)<EOL>data = var_decls.strip()<EOL>c_header = make_c_header(<EOL>gen_opts.filename, '<STR_LIT>',<EOL>modules.typedefs + structs + data<EOL>)<EOL>c_source = make_init(<EOL>modules.hashes + c_relocs + modules.libprocs,<EOL>callable(code_opts.hash_func)<EOL>)<EOL>return [c_header, c_source]<EOL>
Build the final source code for all modules.