util_ss.add(files( 'opts-visitor.c', 'qapi-clone-visitor.c', 'qapi-dealloc-visitor.c', 'qapi-util.c', 'qapi-visit-core.c', 'qobject-input-visitor.c', 'qobject-output-visitor.c', 'string-input-visitor.c', 'string-output-visitor.c', 'hmp-output-visitor.c', )) if have_system or have_tools util_ss.add(files( 'qmp-dispatch.c', 'qmp-event.c', 'qmp-registry.c', )) endif qapi_all_modules = [ 'authz', 'block', 'block-core', 'block-export', 'char', 'common', 'compat', 'control', 'crypto', 'dump', 'error', 'introspect', 'job', 'machine', 'machine-target', 'migration', 'misc', 'misc-target', 'net', 'pragma', 'qom', 'replay', 'run-state', 'sockets', 'trace', 'transaction', 'yank', ] if have_system qapi_all_modules += [ 'acpi', 'audio', 'qdev', 'pci', 'rdma', 'rocker', 'tpm', ] endif if have_system or have_tools qapi_all_modules += [ 'ui', ] endif qapi_storage_daemon_modules = [ 'block-core', 'block-export', 'char', 'common', 'control', 'crypto', 'introspect', 'job', 'qom', 'sockets', 'pragma', 'transaction', ] qapi_nonmodule_outputs = [ 'qapi-introspect.c', 'qapi-introspect.h', 'qapi-types.c', 'qapi-types.h', 'qapi-visit.h', 'qapi-visit.c', 'qapi-commands.h', 'qapi-commands.c', 'qapi-init-commands.h', 'qapi-init-commands.c', 'qapi-events.h', 'qapi-events.c', 'qapi-emit-events.c', 'qapi-emit-events.h', ] # First build all sources qapi_util_outputs = [ 'qapi-builtin-types.c', 'qapi-builtin-visit.c', 'qapi-builtin-types.h', 'qapi-builtin-visit.h', ] qapi_inputs = [] qapi_specific_outputs = [] foreach module : qapi_all_modules qapi_inputs += [ files(module + '.json') ] qapi_module_outputs = [ 'qapi-types-@0@.c'.format(module), 'qapi-types-@0@.h'.format(module), 'qapi-visit-@0@.c'.format(module), 'qapi-visit-@0@.h'.format(module), ] if have_system or have_tools qapi_module_outputs += [ 'qapi-events-@0@.c'.format(module), 'qapi-events-@0@.h'.format(module), 'qapi-commands-@0@.c'.format(module), 'qapi-commands-@0@.h'.format(module), ] endif if module.endswith('-target') qapi_specific_outputs += qapi_module_outputs else qapi_util_outputs += qapi_module_outputs endif endforeach qapi_files = custom_target('shared QAPI source files', output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs, input: [ files('qapi-schema.json') ], command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ], depend_files: [ qapi_inputs, qapi_gen_depends ]) # Now go through all the outputs and add them to the right sourceset. # These loops must be synchronized with the output of the above custom target. i = 0 foreach output : qapi_util_outputs if output.endswith('.h') genh += qapi_files[i] endif util_ss.add(qapi_files[i]) i = i + 1 endforeach foreach output : qapi_specific_outputs + qapi_nonmodule_outputs if output.endswith('.h') genh += qapi_files[i] endif specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: qapi_files[i]) i = i + 1 endforeach