def generate_c_stubs(out_dir, idl_files): for idl_file in idl_files: try: defs = idl.parse(idl_file) except idl.ParseError as e: sys.exit(f"failed to parse {idl_file}:" + str(e)) types = defs["types"] for interface in defs["interfaces"]: stub = generate_c_file(types, interface) write_file(os.path.join(out_dir, f"resea/{interface['name']}.h"), stub)
def main(): argparser = argparse.ArgumentParser() argparser.add_argument('-o', required=True) argparser.add_argument('idl_files', nargs='*') args = argparser.parse_args() services = [] for service_name in args.idl_files: services.append(idl.parse(service_name)) code = generate_server(services) with open(os.path.join(args.o, "main.c"), 'w') as f: f.write(code)
def generate_rust_stubs(out_dir, idl_files): mod_rs = "" for idl_file in idl_files: try: defs = idl.parse(idl_file) except idl.ParseError as e: sys.exit(f"failed to parse {idl_file}:" + str(e)) types = defs["types"] for interface in defs["interfaces"]: stub = generate_rust_file(types, interface) mod_rs += f"pub mod {interface['name']};\n" write_file(os.path.join(out_dir, f"{interface['name']}.rs"), stub) write_file(os.path.join(out_dir, f"mod.rs"), mod_rs)
s += "return libxl__enum_from_string(%s_string_table,\n" % ty.typename s += " %s, (int *)%s);\n" % (str, e) if s != "": s = indent + s return s.replace("\n", "\n%s" % indent).rstrip(indent) if __name__ == '__main__': if len(sys.argv) != 6: print >> sys.stderr, "Usage: gentypes.py <idl> <header> <header-private> <header-json> <implementation>" sys.exit(1) (_, idlname, header, header_private, header_json, impl) = sys.argv (builtins, types) = idl.parse(idlname) print "outputting libxl type definitions to %s" % header f = open(header, "w") header_define = header.upper().replace('.', '_') f.write("""#ifndef %s #define %s /* * DO NOT EDIT. * * This file is autogenerated by * "%s" */
else: raise Exception("Cannot randomly init %s" % ty.typename) if s != "": s = indent + s return s.replace("\n", "\n%s" % indent).rstrip(indent) if __name__ == '__main__': if len(sys.argv) < 3: print >> sys.stderr, "Usage: gentest.py <idl> <implementation>" sys.exit(1) random.seed(os.getenv('LIBXL_TESTIDL_SEED')) (builtins, types) = idl.parse(sys.argv[1]) impl = sys.argv[2] f = open(impl, "w") f.write(""" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "libxl.h" #include "libxl_utils.h" static char *rand_str(void) { int i, sz = rand() % 32; char *s = malloc(sz+1);
raise Exception("Gen for handcoded %s" % ty.typename) else: raise Exception("Cannot randomly init %s" % ty.typename) if s != "": s = indent + s return s.replace("\n", "\n%s" % indent).rstrip(indent) if __name__ == '__main__': if len(sys.argv) < 3: print >>sys.stderr, "Usage: gentest.py <idl> <implementation>" sys.exit(1) random.seed(os.getenv('LIBXL_TESTIDL_SEED')) (builtins,types) = idl.parse(sys.argv[1]) impl = sys.argv[2] f = open(impl, "w") f.write(""" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "libxl.h" #include "libxl_utils.h" static char *rand_str(void) { int i, sz = rand() % 32; char *s = malloc(sz+1);
s += "return libxl__enum_from_string(%s_string_table,\n" % ty.typename s += " %s, (int *)%s);\n" % (str, e) if s != "": s = indent + s return s.replace("\n", "\n%s" % indent).rstrip(indent) if __name__ == '__main__': if len(sys.argv) != 5: print >>sys.stderr, "Usage: gentypes.py <idl> <header> <header-json> <implementation>" sys.exit(1) (_, idlname, header, header_json, impl) = sys.argv (builtins,types) = idl.parse(idlname) print "outputting libxl type definitions to %s" % header f = open(header, "w") header_define = header.upper().replace('.','_') f.write("""#ifndef %s #define %s /* * DO NOT EDIT. * * This file is autogenerated by * "%s" */
return s def autogen_header(open_comment, close_comment): s = open_comment + " AUTO-GENERATED FILE DO NOT EDIT " + close_comment + "\n" s += open_comment + " autogenerated by \n" s += reduce(lambda x,y: x + " ", range(len(open_comment + " ")), "") s += "%s" % " ".join(sys.argv) s += "\n " + close_comment + "\n\n" return s if __name__ == '__main__': if len(sys.argv) < 4: print >>sys.stderr, "Usage: genwrap.py <idl> <mli> <ml> <c-inc>" sys.exit(1) (_,types) = idl.parse(sys.argv[1]) # Do not generate these yet. blacklist = [ "cpupoolinfo", "domain_create_info", "domain_build_info", "vcpuinfo", "event", ] for t in blacklist: if t not in [ty.rawname for ty in types]: print "unknown type %s in blacklist" % t types = [ty for ty in types if not ty.rawname in blacklist]
def autogen_header(open_comment, close_comment): s = open_comment + " AUTO-GENERATED FILE DO NOT EDIT " + close_comment + "\n" s += open_comment + " autogenerated by \n" s += reduce(lambda x, y: x + " ", range(len(open_comment + " ")), "") s += "%s" % " ".join(sys.argv) s += "\n " + close_comment + "\n\n" return s if __name__ == '__main__': if len(sys.argv) < 4: print >> sys.stderr, "Usage: genwrap.py <idl> <mli> <ml> <c-inc>" sys.exit(1) (_, types) = idl.parse(sys.argv[1]) # Do not generate these yet. blacklist = [ "cpupoolinfo", "vcpuinfo", ] for t in blacklist: if t not in [ty.rawname for ty in types]: print "unknown type %s in blacklist" % t types = [ty for ty in types if not ty.rawname in blacklist] _ml = sys.argv[3] ml = open(_ml, 'w')