master
py 65 lines 2.22 KB
Raw
1 # This work is licensed under the terms of the GNU GPL, version 2 or later.
2 # See the COPYING file in the top-level directory.
3
4 from abc import ABC, abstractmethod
5
6 from .commands import gen_commands
7 from .events import gen_events
8 from .features import gen_features
9 from .introspect import gen_introspect
10 from .schema import QAPISchema
11 from .types import gen_types
12 from .visit import gen_visit
13
14
15 class QAPIBackend(ABC):
16 # pylint: disable=too-few-public-methods
17
18 @abstractmethod
19 def generate(self,
20 schema: QAPISchema,
21 output_dir: str,
22 prefix: str,
23 unmask: bool,
24 builtins: bool,
25 gen_tracing: bool) -> None:
26 """
27 Generate code for the given schema into the target directory.
28
29 :param schema: The primary QAPI schema object.
30 :param output_dir: The output directory to store generated code.
31 :param prefix: Optional C-code prefix for symbol names.
32 :param unmask: Expose non-ABI names through introspection?
33 :param builtins: Generate code for built-in types?
34
35 :raise QAPIError: On failures.
36 """
37
38
39 class QAPICBackend(QAPIBackend):
40 # pylint: disable=too-few-public-methods
41
42 def generate(self,
43 schema: QAPISchema,
44 output_dir: str,
45 prefix: str,
46 unmask: bool,
47 builtins: bool,
48 gen_tracing: bool) -> None:
49 """
50 Generate C code for the given schema into the target directory.
51
52 :param schema_file: The primary QAPI schema file.
53 :param output_dir: The output directory to store generated code.
54 :param prefix: Optional C-code prefix for symbol names.
55 :param unmask: Expose non-ABI names through introspection?
56 :param builtins: Generate code for built-in types?
57
58 :raise QAPIError: On failures.
59 """
60 gen_types(schema, output_dir, prefix, builtins)
61 gen_features(schema, output_dir, prefix)
62 gen_visit(schema, output_dir, prefix, builtins)
63 gen_commands(schema, output_dir, prefix, gen_tracing)
64 gen_events(schema, output_dir, prefix)
65 gen_introspect(schema, output_dir, prefix, unmask)