meson.build 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. util_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. qapi_all_modules = [
  16. 'acpi',
  17. 'audio',
  18. 'authz',
  19. 'block',
  20. 'block-core',
  21. 'block-export',
  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. 'replay',
  42. 'rocker',
  43. 'run-state',
  44. 'sockets',
  45. 'tpm',
  46. 'trace',
  47. 'transaction',
  48. 'ui',
  49. ]
  50. qapi_storage_daemon_modules = [
  51. 'block-core',
  52. 'block-export',
  53. 'char',
  54. 'common',
  55. 'control',
  56. 'crypto',
  57. 'introspect',
  58. 'job',
  59. 'qom',
  60. 'sockets',
  61. 'pragma',
  62. 'transaction',
  63. ]
  64. qapi_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. # First build all sources
  74. qapi_util_outputs = [
  75. 'qapi-builtin-types.c', 'qapi-builtin-visit.c',
  76. 'qapi-builtin-types.h', 'qapi-builtin-visit.h',
  77. ]
  78. qapi_inputs = []
  79. qapi_specific_outputs = []
  80. foreach module : qapi_all_modules
  81. qapi_inputs += [ files(module + '.json') ]
  82. qapi_module_outputs = [
  83. 'qapi-types-@0@.c'.format(module),
  84. 'qapi-types-@0@.h'.format(module),
  85. 'qapi-visit-@0@.c'.format(module),
  86. 'qapi-visit-@0@.h'.format(module),
  87. 'qapi-events-@0@.c'.format(module),
  88. 'qapi-events-@0@.h'.format(module),
  89. 'qapi-commands-@0@.c'.format(module),
  90. 'qapi-commands-@0@.h'.format(module),
  91. ]
  92. if module.endswith('-target')
  93. qapi_specific_outputs += qapi_module_outputs
  94. else
  95. qapi_util_outputs += qapi_module_outputs
  96. endif
  97. endforeach
  98. qapi_files = custom_target('shared QAPI source files',
  99. output: qapi_util_outputs + qapi_specific_outputs + qapi_nonmodule_outputs,
  100. input: [ files('qapi-schema.json') ],
  101. command: [ qapi_gen, '-o', 'qapi', '-b', '@INPUT0@' ],
  102. depend_files: [ qapi_inputs, qapi_gen_depends ])
  103. # Now go through all the outputs and add them to the right sourceset.
  104. # These loops must be synchronized with the output of the above custom target.
  105. i = 0
  106. foreach output : qapi_util_outputs
  107. if output.endswith('.h')
  108. genh += qapi_files[i]
  109. endif
  110. util_ss.add(qapi_files[i])
  111. i = i + 1
  112. endforeach
  113. foreach output : qapi_specific_outputs + qapi_nonmodule_outputs
  114. if output.endswith('.h')
  115. genh += qapi_files[i]
  116. endif
  117. specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: qapi_files[i])
  118. i = i + 1
  119. endforeach