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