[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 01/14] qapi: add 'if' to top-level expression
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v7 01/14] qapi: add 'if' to top-level expressions |
Date: |
Tue, 03 Jul 2018 18:21:34 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Marc-André Lureau <address@hidden> writes:
> Accept 'if' key in top-level elements, accepted as string or list of
> string type. The following patches will modify the test visitor to
> check the value is correctly saved, and generate #if/#endif code (as a
> single #if/endif line or a series for a list).
>
> Example of 'if' key:
> { 'struct': 'TestIfStruct', 'data': { 'foo': 'int' },
> 'if': 'defined(TEST_IF_STRUCT)' }
>
> The generated code is for now *unconditional*. Later patches generate
> the conditionals.
>
> A following patch for qapi-code-gen.txt will provide more complete
> documentation for 'if' usage.
Dropping this paragraph as per review of v6.
> Signed-off-by: Marc-André Lureau <address@hidden>
> Reviewed-by: Markus Armbruster <address@hidden>
[...]
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index 94a7e8f4d0..beca020575 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -744,6 +744,28 @@ Example: Red Hat, Inc. controls redhat.com, and may
> therefore add a
> downstream command __com.redhat_drive-mirror.
>
>
> +=== Configuring the schema ===
> +
> +Top-level QAPI expressions. The value must be a string or a list of
> +string. The corresponding generated code will then guard the inclusion
> +of that member in the larger struct or function with #if IFCOND
> +(or several #if lines for a list), where IFCOND is the value of the
> +'if' key.
> +
> +'struct', 'enum', 'union', 'alternate', 'command' and 'event'
> +top-level QAPI expressions can take an 'if' keyword like:
> +
> +{ 'struct': 'IfStruct', 'data': { 'foo': 'int' },
> + 'if': 'defined(IFCOND)' }
> +
> +Please note that you are responsible to ensure that the C code will
> +compile with an arbitrary combination of conditions, since the
> +generators are unable to check it at this point.
> +
> +The presence of 'if' keys in the schema is reflected through to the
> +introspection output depending on the build configuration.
> +
> +
> == Client JSON Protocol introspection ==
>
> Clients of a Client JSON Protocol commonly need to figure out what
Replacing this hunk by
+=== Configuring the schema ===
+
+The 'struct', 'enum', 'union', 'alternate', 'command' and 'event'
+top-level expressions can take an 'if' key. Its value must be a string
+or a list of strings. A string is shorthand for a list containing just
+that string. The code generated for the top-level expression will then
+be guarded by #if COND for each COND in the list.
+
+Example: a conditional struct
+
+ { 'struct': 'IfStruct', 'data': { 'foo': 'int' },
+ 'if': ['defined(CONFIG_FOO)', 'defined(HAVE_BAR)'] }
+
+gets its generated code guarded like this:
+
+ #if defined(CONFIG_FOO)
+ #if defined(HAVE_BAR)
+ ... generated code ...
+ #endif /* defined(HAVE_BAR) */
+ #endif /* defined(CONFIG_FOO) */
+
+Please note that you are responsible to ensure that the C code will
+compile with an arbitrary combination of conditions, since the
+generators are unable to check it at this point.
+
+The presence of 'if' keys in the schema is reflected through to the
+introspection output depending on the build configuration.
+
+
as per review of v6.
[...]
- [Qemu-devel] [PATCH v7 00/14] qapi: add #if pre-processor conditions to generated code (part 1), Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 01/14] qapi: add 'if' to top-level expressions, Marc-André Lureau, 2018/07/03
- Re: [Qemu-devel] [PATCH v7 01/14] qapi: add 'if' to top-level expressions,
Markus Armbruster <=
- [Qemu-devel] [PATCH v7 02/14] qapi: pass 'if' condition into QAPISchemaEntity objects, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 05/14] qapi: mcgen() shouldn't indent # lines, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 03/14] qapi: leave the ifcond attribute undefined until check(), Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 04/14] qapi: add 'ifcond' to visitor methods, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 07/14] qapi-introspect: modify to_qlit() to append ', ' on level > 0, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 11/14] qapi-types: add #if conditions to types & visitors, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 10/14] qapi/events: add #if conditions to events, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 08/14] qapi-introspect: add preprocessor conditions to generated QLit, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 09/14] qapi/commands: add #if conditions to commands, Marc-André Lureau, 2018/07/03