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