qemu/qga/meson.build
<<
>>
Prefs
   1qga_qapi_outputs = [
   2  'qga-qapi-commands.c',
   3  'qga-qapi-commands.h',
   4  'qga-qapi-emit-events.c',
   5  'qga-qapi-emit-events.h',
   6  'qga-qapi-events.c',
   7  'qga-qapi-events.h',
   8  'qga-qapi-init-commands.c',
   9  'qga-qapi-init-commands.h',
  10  'qga-qapi-introspect.c',
  11  'qga-qapi-introspect.h',
  12  'qga-qapi-types.c',
  13  'qga-qapi-types.h',
  14  'qga-qapi-visit.c',
  15  'qga-qapi-visit.h',
  16]
  17
  18qga_qapi_files = custom_target('QGA QAPI files',
  19                               output: qga_qapi_outputs,
  20                               input: 'qapi-schema.json',
  21                               command: [ qapi_gen, '-o', 'qga', '-p', 'qga-', '@INPUT0@' ],
  22                               depend_files: qapi_gen_depends)
  23
  24qga_ss = ss.source_set()
  25qga_ss.add(qga_qapi_files.to_list())
  26qga_ss.add(files(
  27  'commands.c',
  28  'guest-agent-command-state.c',
  29  'main.c',
  30))
  31qga_ss.add(when: 'CONFIG_POSIX', if_true: files(
  32  'channel-posix.c',
  33  'commands-posix.c',
  34  'commands-posix-ssh.c',
  35))
  36qga_ss.add(when: 'CONFIG_WIN32', if_true: files(
  37  'channel-win32.c',
  38  'commands-win32.c',
  39  'service-win32.c',
  40  'vss-win32.c'
  41))
  42
  43qga_ss = qga_ss.apply(config_host, strict: false)
  44
  45qga = executable('qemu-ga', qga_ss.sources(),
  46                 link_args: config_host['LIBS_QGA'].split(),
  47                 dependencies: [qemuutil, libudev],
  48                 install: true)
  49all_qga = [qga]
  50
  51if targetos == 'windows'
  52  if 'CONFIG_QGA_VSS' in config_host
  53    subdir('vss-win32')
  54  else
  55    gen_tlb = []
  56  endif
  57
  58  qemu_ga_msi_arch = {
  59    'x86': ['-D', 'Arch=32'],
  60    'x86_64': ['-a', 'x64', '-D', 'Arch=64']
  61  }
  62  wixl = not_found
  63  if cpu in qemu_ga_msi_arch
  64    wixl = find_program('wixl', required: get_option('guest_agent_msi'))
  65  elif get_option('guest_agent_msi').enabled()
  66    error('CPU not supported for building guest agent installation package')
  67  endif
  68
  69  if wixl.found()
  70    deps = [gen_tlb, qga]
  71    qemu_ga_msi_vss = []
  72    if 'CONFIG_QGA_VSS' in config_host
  73      qemu_ga_msi_vss = ['-D', 'InstallVss']
  74      deps += qga_vss
  75    endif
  76    qga_msi = custom_target('QGA MSI',
  77                            input: files('installer/qemu-ga.wxs'),
  78                            output: 'qemu-ga-@0@.msi'.format(config_host['ARCH']),
  79                            depends: deps,
  80                            command: [
  81                              find_program('env'),
  82                              'QEMU_GA_VERSION=' + config_host['QEMU_GA_VERSION'],
  83                              'QEMU_GA_MANUFACTURER=' + config_host['QEMU_GA_MANUFACTURER'],
  84                              'QEMU_GA_DISTRO=' + config_host['QEMU_GA_DISTRO'],
  85                              'BUILD_DIR=' + meson.build_root(),
  86                              wixl, '-o', '@OUTPUT0@', '@INPUT0@',
  87                              qemu_ga_msi_arch[cpu],
  88                              qemu_ga_msi_vss,
  89                              '-D', 'Mingw_dlls=' + config_host['QEMU_GA_MSI_MINGW_DLL_PATH'],
  90                            ])
  91    all_qga += [qga_msi]
  92    alias_target('msi', qga_msi)
  93  endif
  94else
  95  if get_option('guest_agent_msi').enabled()
  96    error('MSI guest agent package is available only for MinGW Windows cross-compilation')
  97  endif
  98  install_subdir('run', install_dir: get_option('localstatedir'))
  99endif
 100
 101alias_target('qemu-ga', all_qga)
 102
 103test_env = environment()
 104test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
 105test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
 106
 107# disable qga-ssh-test for now. glib's G_TEST_OPTION_ISOLATE_DIRS triggers
 108# the leak detector in build-oss-fuzz Gitlab CI test. we should re-enable
 109# this when an alternative is implemented or when the underlying glib
 110# issue is identified/fix
 111#if 'CONFIG_POSIX' in config_host
 112if false
 113  srcs = [files('commands-posix-ssh.c')]
 114  i = 0
 115  foreach output: qga_qapi_outputs
 116    if output.startswith('qga-qapi-types') or output.startswith('qga-qapi-visit')
 117      srcs += qga_qapi_files[i]
 118    endif
 119    i = i + 1
 120  endforeach
 121  qga_ssh_test = executable('qga-ssh-test', srcs,
 122                            dependencies: [qemuutil],
 123                            c_args: ['-DQGA_BUILD_UNIT_TEST'])
 124
 125  test('qga-ssh-test',
 126       qga_ssh_test,
 127       env: test_env,
 128       suite: ['unit', 'qga'])
 129endif
 130