* [PATCH] rust: Prefer link_with over link_whole
@ 2025-02-18 8:37 Zhao Liu
2025-02-18 8:58 ` Paolo Bonzini
0 siblings, 1 reply; 3+ messages in thread
From: Zhao Liu @ 2025-02-18 8:37 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel, qemu-rust, Zhao Liu
The commit fccb744f41c6 ("gdbstub: Try unlinking the unix socket before
binding") causes the compilation of rust-qemu-api-integration to fail,
because rust-qemu-api-integration uses link_whole which meets the
duplicate symbol linker error.
Though it's not the issue of link_whole used by Rust side, there's no
need to use link_whole.
Use link_with, which may also bring some benefits, such as faster
linking or smaller output files.
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
rust/hw/char/pl011/meson.build | 2 +-
rust/hw/timer/hpet/meson.build | 2 +-
rust/qemu-api/meson.build | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/rust/hw/char/pl011/meson.build b/rust/hw/char/pl011/meson.build
index 547cca5a96f7..4ba9089fcf8e 100644
--- a/rust/hw/char/pl011/meson.build
+++ b/rust/hw/char/pl011/meson.build
@@ -18,7 +18,7 @@ _libpl011_rs = static_library(
)
rust_devices_ss.add(when: 'CONFIG_X_PL011_RUST', if_true: [declare_dependency(
- link_whole: [_libpl011_rs],
+ link_with: [_libpl011_rs],
# Putting proc macro crates in `dependencies` is necessary for Meson to find
# them when compiling the root per-target static rust lib.
dependencies: [bilge_impl_dep, qemu_api_macros],
diff --git a/rust/hw/timer/hpet/meson.build b/rust/hw/timer/hpet/meson.build
index c2d7c0532ca4..ce90cc4f021a 100644
--- a/rust/hw/timer/hpet/meson.build
+++ b/rust/hw/timer/hpet/meson.build
@@ -10,7 +10,7 @@ _libhpet_rs = static_library(
)
rust_devices_ss.add(when: 'CONFIG_X_HPET_RUST', if_true: [declare_dependency(
- link_whole: [_libhpet_rs],
+ link_with: [_libhpet_rs],
# Putting proc macro crates in `dependencies` is necessary for Meson to find
# them when compiling the root per-target static rust lib.
dependencies: [qemu_api_macros],
diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build
index 2e9c1078b9b2..e825671b694b 100644
--- a/rust/qemu-api/meson.build
+++ b/rust/qemu-api/meson.build
@@ -63,7 +63,7 @@ test('rust-qemu-api-integration',
rust_args: ['--test'],
install: false,
dependencies: [qemu_api, qemu_api_macros],
- link_whole: [rust_qemu_api_objs, libqemuutil]),
+ link_with: [rust_qemu_api_objs, libqemuutil]),
args: [
'--test', '--test-threads', '1',
'--format', 'pretty',
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: Prefer link_with over link_whole
2025-02-18 8:37 [PATCH] rust: Prefer link_with over link_whole Zhao Liu
@ 2025-02-18 8:58 ` Paolo Bonzini
2025-02-18 17:50 ` Zhao Liu
0 siblings, 1 reply; 3+ messages in thread
From: Paolo Bonzini @ 2025-02-18 8:58 UTC (permalink / raw)
To: Zhao Liu; +Cc: qemu-devel, qemu-rust
On 2/18/25 09:37, Zhao Liu wrote:
> The commit fccb744f41c6 ("gdbstub: Try unlinking the unix socket before
> binding") causes the compilation of rust-qemu-api-integration to fail,
> because rust-qemu-api-integration uses link_whole which meets the
> duplicate symbol linker error.
>
> Though it's not the issue of link_whole used by Rust side, there's no
> need to use link_whole.
>
> Use link_with, which may also bring some benefits, such as faster
> linking or smaller output files.
link_with, if I remember correctly, drops the constructors. Using it in
rust_devices_ss therefore prevents the devices from being registered
with QOM.
The real issue is lack of support for "objects" in Meson for Rust
executables. A patch to fix that is under review, after which it will
be possible to build Rust executables using the same "dependency"
objects as C code.
Paolo
> rust_devices_ss.add(when: 'CONFIG_X_PL011_RUST', if_true: [declare_dependency(
> - link_whole: [_libpl011_rs],
> + link_with: [_libpl011_rs],
> # Putting proc macro crates in `dependencies` is necessary for Meson to find
> # them when compiling the root per-target static rust lib.
> dependencies: [bilge_impl_dep, qemu_api_macros],
> diff --git a/rust/hw/timer/hpet/meson.build b/rust/hw/timer/hpet/meson.build
> index c2d7c0532ca4..ce90cc4f021a 100644
> --- a/rust/hw/timer/hpet/meson.build
> +++ b/rust/hw/timer/hpet/meson.build
> @@ -10,7 +10,7 @@ _libhpet_rs = static_library(
> )
>
> rust_devices_ss.add(when: 'CONFIG_X_HPET_RUST', if_true: [declare_dependency(
> - link_whole: [_libhpet_rs],
> + link_with: [_libhpet_rs],
> # Putting proc macro crates in `dependencies` is necessary for Meson to find
> # them when compiling the root per-target static rust lib.
> dependencies: [qemu_api_macros],
> diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build
> index 2e9c1078b9b2..e825671b694b 100644
> --- a/rust/qemu-api/meson.build
> +++ b/rust/qemu-api/meson.build
> @@ -63,7 +63,7 @@ test('rust-qemu-api-integration',
> rust_args: ['--test'],
> install: false,
> dependencies: [qemu_api, qemu_api_macros],
> - link_whole: [rust_qemu_api_objs, libqemuutil]),
> + link_with: [rust_qemu_api_objs, libqemuutil]),
> args: [
> '--test', '--test-threads', '1',
> '--format', 'pretty',
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] rust: Prefer link_with over link_whole
2025-02-18 8:58 ` Paolo Bonzini
@ 2025-02-18 17:50 ` Zhao Liu
0 siblings, 0 replies; 3+ messages in thread
From: Zhao Liu @ 2025-02-18 17:50 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel, qemu-rust
On Tue, Feb 18, 2025 at 09:58:44AM +0100, Paolo Bonzini wrote:
> Date: Tue, 18 Feb 2025 09:58:44 +0100
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: Re: [PATCH] rust: Prefer link_with over link_whole
>
> On 2/18/25 09:37, Zhao Liu wrote:
> > The commit fccb744f41c6 ("gdbstub: Try unlinking the unix socket before
> > binding") causes the compilation of rust-qemu-api-integration to fail,
> > because rust-qemu-api-integration uses link_whole which meets the
> > duplicate symbol linker error.
> >
> > Though it's not the issue of link_whole used by Rust side, there's no
> > need to use link_whole.
> >
> > Use link_with, which may also bring some benefits, such as faster
> > linking or smaller output files.
>
> link_with, if I remember correctly, drops the constructors. Using it in
> rust_devices_ss therefore prevents the devices from being registered with
> QOM.
Interesting, I test with link_with and HPET QOM type can be registered.
I find this is because `module_init` macro adds `#[used]` for `LOAD_MODULE`,
which prevents linker dropping QOM type.
Without `#[used]`, both link_with and link_whole will optimize
`LOAD_MODULE`... So here `#[used]` is the key to getting everything to work
properly.
> The real issue is lack of support for "objects" in Meson for Rust
> executables. A patch to fix that is under review, after which it will be
> possible to build Rust executables using the same "dependency" objects as C
> code.
HMM, but with link_with, everything seems to compile fine?
Thanks,
Zhao
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-02-18 17:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-18 8:37 [PATCH] rust: Prefer link_with over link_whole Zhao Liu
2025-02-18 8:58 ` Paolo Bonzini
2025-02-18 17:50 ` Zhao Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).