Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
    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"
 */
Exemple #5
0
    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);
Exemple #6
0
        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);
Exemple #7
0
    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"
 */
Exemple #8
0
    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]
Exemple #9
0
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')