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