xref: /openbmc/qemu/plugins/meson.build (revision b8ee011e40e4b83a32ea0e7dca24e1ab089f1e7f)
120fdd01eSPhilippe Mathieu-Daudéif not get_option('plugins')
220fdd01eSPhilippe Mathieu-Daudé  subdir_done()
320fdd01eSPhilippe Mathieu-Daudéendif
420fdd01eSPhilippe Mathieu-Daudé
5*1ef08e34SPierrick Bouvierqemu_plugin_symbols = configure_file(
6*1ef08e34SPierrick Bouvier  input: files('../include/qemu/qemu-plugin.h'),
7*1ef08e34SPierrick Bouvier  output: 'qemu-plugin.symbols',
8*1ef08e34SPierrick Bouvier  capture: true,
9*1ef08e34SPierrick Bouvier  command: [files('../scripts/qemu-plugin-symbols.py'), '@INPUT@'])
10*1ef08e34SPierrick Bouvier
11b906acacSPaolo Bonzini# Modules need more symbols than just those in plugins/qemu-plugins.symbols
12b906acacSPaolo Bonziniif not enable_modules
13d0cda6f4SPaolo Bonzini  if host_os == 'darwin'
14e3af71e9SPaolo Bonzini    configure_file(
15*1ef08e34SPierrick Bouvier      input: qemu_plugin_symbols,
1637650689SPaolo Bonzini      output: 'qemu-plugins-ld64.symbols',
1737650689SPaolo Bonzini      capture: true,
1837650689SPaolo Bonzini      command: ['sed', '-ne', 's/^[[:space:]]*\\(qemu_.*\\);/_\\1/p', '@INPUT@'])
190082475eSPaolo Bonzini    emulator_link_args += ['-Wl,-exported_symbols_list,plugins/qemu-plugins-ld64.symbols']
2037650689SPaolo Bonzini  else
21*1ef08e34SPierrick Bouvier    emulator_link_args += ['-Xlinker', '--dynamic-list=' + qemu_plugin_symbols.full_path()]
22b906acacSPaolo Bonzini  endif
2364ed6f92SPaolo Bonziniendif
2464ed6f92SPaolo Bonzini
25d0cda6f4SPaolo Bonziniif host_os == 'windows'
26330fe3b0SGreg Manning  dlltool = find_program('dlltool', required: true)
27330fe3b0SGreg Manning
28330fe3b0SGreg Manning  # Generate a .lib file for plugins to link against.
29330fe3b0SGreg Manning  # First, create a .def file listing all the symbols a plugin should expect to have
30330fe3b0SGreg Manning  # available in qemu
31330fe3b0SGreg Manning  win32_plugin_def = configure_file(
32*1ef08e34SPierrick Bouvier    input: qemu_plugin_symbols,
33330fe3b0SGreg Manning    output: 'qemu_plugin_api.def',
34330fe3b0SGreg Manning    capture: true,
35330fe3b0SGreg Manning    command: ['sed', '-e', '0,/^/s//EXPORTS/; s/[{};]//g', '@INPUT@'])
36330fe3b0SGreg Manning  # then use dlltool to assemble a delaylib.
37330fe3b0SGreg Manning  win32_qemu_plugin_api_lib = configure_file(
38330fe3b0SGreg Manning    input: win32_plugin_def,
394789f9d3SGreg Manning    output: 'libqemu_plugin_api.a',
40330fe3b0SGreg Manning    command: [dlltool, '--input-def', '@INPUT@',
41330fe3b0SGreg Manning              '--output-delaylib', '@OUTPUT@', '--dllname', 'qemu.exe']
42330fe3b0SGreg Manning  )
43330fe3b0SGreg Manningendif
442c13c574SPaolo Bonzinispecific_ss.add(files(
45f556b4a1SPaolo Bonzini  'loader.c',
46f556b4a1SPaolo Bonzini  'core.c',
47f556b4a1SPaolo Bonzini  'api.c',
480082475eSPaolo Bonzini))
49