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