1util_ss.add(files( 2 'opts-visitor.c', 3 'qapi-clone-visitor.c', 4 'qapi-dealloc-visitor.c', 5 'qapi-util.c', 6 'qapi-visit-core.c', 7 'qobject-input-visitor.c', 8 'qobject-output-visitor.c', 9 'string-input-visitor.c', 10 'string-output-visitor.c', 11)) 12if have_system or have_tools 13 util_ss.add(files( 14 'qmp-dispatch.c', 15 'qmp-event.c', 16 'qmp-registry.c', 17 )) 18endif 19 20qapi_all_modules = [ 21 'authz', 22 'block', 23 'block-core', 24 'block-export', 25 'char', 26 'common', 27 'compat', 28 'control', 29 'crypto', 30 'dump', 31 'error', 32 'introspect', 33 'job', 34 'machine', 35 'machine-target', 36 'migration', 37 'misc', 38 'misc-target', 39 'net', 40 'pragma', 41 'qom', 42 'replay', 43 'run-state', 44 'sockets', 45 'trace', 46 'transaction', 47 'yank', 48] 49if have_system 50 qapi_all_modules += [ 51 'acpi', 52 'audio', 53 'qdev', 54 'pci', 55 'rdma', 56 'rocker', 57 'tpm', 58 ] 59endif 60if have_system or have_tools 61 qapi_all_modules += [ 62 'ui', 63 ] 64endif 65 66qapi_storage_daemon_modules = [ 67 'block-core', 68 'block-export', 69 'char', 70 'common', 71 'control', 72 'crypto', 73 'introspect', 74 'job', 75 'qom', 76 'sockets', 77 'pragma', 78 'transaction', 79] 80 81qapi_nonmodule_outputs = [ 82 'qapi-introspect.c', 'qapi-introspect.h', 83 'qapi-types.c', 'qapi-types.h', 84 'qapi-visit.h', 'qapi-visit.c', 85 'qapi-commands.h', 'qapi-commands.c', 86 'qapi-init-commands.h', 'qapi-init-commands.c', 87 'qapi-events.h', 'qapi-events.c', 88 'qapi-emit-events.c', 'qapi-emit-events.h', 89] 90 91# First build all sources 92qapi_util_outputs = [ 93 'qapi-builtin-types.c', 'qapi-builtin-visit.c', 94 'qapi-builtin-types.h', 'qapi-builtin-visit.h', 95] 96 97qapi_inputs = [] 98qapi_specific_outputs = [] 99foreach module : qapi_all_modules 100 qapi_inputs += [ files(module + '.json') ] 101 qapi_module_outputs = [ 102 'qapi-types-@0@.c'.format(module), 103 'qapi-types-@0@.h'.format(module), 104 'qapi-visit-@0@.c'.format(module), 105 'qapi-visit-@0@.h'.format(module), 106 ] 107 if have_system or have_tools 108 qapi_module_outputs += [ 109 'qapi-events-@0@.c'.format(module), 110 'qapi-events-@0@.h'.format(module), 111 'qapi-commands-@0@.c'.format(module), 112 'qapi-commands-@0@.h'.format(module), 113 ] 114 endif 115 if module.endswith('-target') 116 qapi_specific_outputs += qapi_module_outputs 117 else 118 qapi_util_outputs += qapi_module_outputs 119 endif 120endforeach 121 122qapi_files = custom_target('shared QAPI source files', 123 output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs, 124 input: [ files('qapi-schema.json') ], 125 command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ], 126 depend_files: [ qapi_inputs, qapi_gen_depends ]) 127 128# Now go through all the outputs and add them to the right sourceset. 129# These loops must be synchronized with the output of the above custom target. 130 131i = 0 132foreach output : qapi_util_outputs 133 if output.endswith('.h') 134 genh += qapi_files[i] 135 endif 136 util_ss.add(qapi_files[i]) 137 i = i + 1 138endforeach 139 140foreach output : qapi_specific_outputs + qapi_nonmodule_outputs 141 if output.endswith('.h') 142 genh += qapi_files[i] 143 endif 144 specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: qapi_files[i]) 145 i = i + 1 146endforeach 147