On 13/8/24 22:23, Alex Bennée wrote:
> From: Philippe Mathieu-Daudé <philmd@linaro.org>
>
> Since commit 0082475e26 the plugin symbol list is unconditionally
> added to the linker flags, leading to a build failure:
>
> Undefined symbols for architecture arm64:
> "_qemu_plugin_entry_code", referenced from:
> <initial-undefines>
> ...
> ld: symbol(s) not found for architecture arm64
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> ninja: build stopped: subcommand failed.
>
> Fix by restricting the whole meson file to the --enable-plugins
> configure argument.
>
> Fixes: 0082475e26 ("meson: merge plugin_ldflags into emulator_link_args")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2476
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Acked-by: Richard Henderson <richard.henderson@linaro.org>
> Message-Id: <20240813112457.92560-1-philmd@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> plugins/meson.build | 50 +++++++++++++++++++++++----------------------
> 1 file changed, 26 insertions(+), 24 deletions(-)
>
> diff --git a/plugins/meson.build b/plugins/meson.build
> index 18a0303bff..1cc039d29b 100644
> --- a/plugins/meson.build
> +++ b/plugins/meson.build
> @@ -1,3 +1,7 @@
> +if not get_option('plugins')
> + subdir_done()
> +endif
> +
> # Modules need more symbols than just those in plugins/qemu-plugins.symbols
> if not enable_modules
> if host_os == 'darwin'
> @@ -12,29 +16,27 @@ if not enable_modules
> endif
> endif
>
> -if get_option('plugins')
> - if host_os == 'windows'
> - dlltool = find_program('dlltool', required: true)
> +if host_os == 'windows'
> + dlltool = find_program('dlltool', required: true)
>
> - # Generate a .lib file for plugins to link against.
> - # First, create a .def file listing all the symbols a plugin should expect to have
> - # available in qemu
> - win32_plugin_def = configure_file(
> - input: files('qemu-plugins.symbols'),
> - output: 'qemu_plugin_api.def',
> - capture: true,
> - command: ['sed', '-e', '0,/^/s//EXPORTS/; s/[{};]//g', '@INPUT@'])
> - # then use dlltool to assemble a delaylib.
> - win32_qemu_plugin_api_lib = configure_file(
> - input: win32_plugin_def,
> - output: 'libqemu_plugin_api.a',
> - command: [dlltool, '--input-def', '@INPUT@',
> - '--output-delaylib', '@OUTPUT@', '--dllname', 'qemu.exe']
> - )
> - endif
> - specific_ss.add(files(
> - 'loader.c',
> - 'core.c',
> - 'api.c',
> - ))
> + # Generate a .lib file for plugins to link against.
> + # First, create a .def file listing all the symbols a plugin should expect to have
> + # available in qemu
> + win32_plugin_def = configure_file(
> + input: files('qemu-plugins.symbols'),
> + output: 'qemu_plugin_api.def',
> + capture: true,
> + command: ['sed', '-e', '0,/^/s//EXPORTS/; s/[{};]//g', '@INPUT@'])
> + # then use dlltool to assemble a delaylib.
> + win32_qemu_plugin_api_lib = configure_file(
> + input: win32_plugin_def,
> + output: 'libqemu_plugin_api.a',
> + command: [dlltool, '--input-def', '@INPUT@',
> + '--output-delaylib', '@OUTPUT@', '--dllname', 'qemu.exe']
> + )
> endif
> +specific_ss.add(files(
> + 'loader.c',
> + 'core.c',
> + 'api.c',
> +))