[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH RESEND v9 7/9] rust: add crate to expose bindings and interfa
|
From: |
Alex Bennée |
|
Subject: |
Re: [PATCH RESEND v9 7/9] rust: add crate to expose bindings and interfaces |
|
Date: |
Wed, 28 Aug 2024 14:08:23 +0100 |
Manos Pitsidianakis <manos.pitsidianakis@linaro.org> writes:
> Add rust/qemu-api, which exposes rust-bindgen generated FFI bindings and
> provides some declaration macros for symbols visible to the rest of
> QEMU.
As mentioned on IRC I'm hitting a compilation error that bisects to this
commit:
[148/1010] Generating bindings for Rust rustmod-bindgen-rust_wrapper.h
FAILED: bindings.rs
/home/alex/.cargo/bin/bindgen ../../rust/wrapper.h --output
/home/alex/lsrc/qemu.git/builds/rust/bindings.rs --disable-header-comment
--raw-line '// @generated' --ctypes-prefix core::ffi --formatter rustfmt
--generate-block --generate-cstr --impl-debug --merge-extern-blocks
--no-doc-comments --use-core --with-derive-default --allowlist-file
'/home/alex/lsrc/qemu.git/include/.*' --allowlist-file
'/home/alex/lsrc/qemu.git/.*' --allowlist-file
'/home/alex/lsrc/qemu.git/builds/rust/.*' -- -I/home/alex/lsrc/qemu.git/.
-I/home/alex/lsrc/qemu.git/builds/rust/. -I/home/alex/lsrc/qemu.git/include
-I/home/alex/lsrc/qemu.git/builds/rust/include -I/usr/include/capstone
-I/usr/include/p11-kit-1 -I/usr/include/pixman-1 -I/usr/include/libpng16
-I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/spice-1
-DSTRUCT_IOVEC_DEFINED -I/usr/include/libusb-1.0 -I/usr/include/SDL2
-D_REENTRANT -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/libmount
-I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/libmount
-I/usr/include/blkid -I/usr/include/slirp -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -DNCURSES_WIDECHAR=1
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gtk-3.0
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/harfbuzz
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount
-I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo
-I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0
-I/usr/include/x86_64-linux-gnu -I/usr/include/gio-unix-2.0
-I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0
-I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -pthread
-I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/harfbuzz
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount
-I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo
-I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0
-I/usr/include/x86_64-linux-gnu -I/usr/include/gio-unix-2.0
-I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0
-I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -pthread
-I/usr/include/vte-2.91 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount
-I/usr/include/blkid -I/usr/include/pango-1.0 -I/usr/include/harfbuzz
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/fribidi
-I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gtk-3.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu
-I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0
-I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0
-I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -pthread
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
-I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/cacard
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
-I/usr/include/nss -I/usr/include/nspr -I/usr/include/PCSC -pthread
-D_REENTRANT -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT
-I/usr/include/p11-kit-1 -I/usr/include/fuse3 -I/usr/include/x86_64-linux-gnu
-D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -D__USE_LARGEFILE64
-DUSE_POSIX_ACLS=1 -I/usr/include/uuid -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/p11-kit-1
-I/usr/include/p11-kit-1 -I/usr/include/p11-kit-1 -I/usr/include/p11-kit-1
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -std=gnu11
-MD -MQ ../../rust/wrapper.h -MF wrapper.h.d
/usr/include/liburing.h:296:3: error: use of undeclared identifier
'memory_order_release'
/usr/include/liburing.h:1080:11: error: use of undeclared identifier
'memory_order_acquire'
/usr/include/liburing.h:1116:9: error: use of undeclared identifier
'memory_order_acquire'
/usr/include/liburing.h:1125:9: error: use of undeclared identifier
'memory_order_relaxed'
/usr/include/liburing.h:1161:2: error: use of undeclared identifier
'memory_order_relaxed'
/usr/include/liburing.h:1197:19: error: use of undeclared identifier
'memory_order_acquire'
/usr/include/liburing.h:1267:10: error: use of undeclared identifier
'memory_order_relaxed'
/usr/include/liburing.h:1269:10: error: use of undeclared identifier
'memory_order_acquire'
/usr/include/liburing.h:1320:2: error: use of undeclared identifier
'memory_order_release'
panicked at
/home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bindgen-cli-0.69.4/main.rs:52:36:
Unable to generate bindings: ClangDiagnostic("/usr/include/liburing.h:296:3:
error: use of undeclared identifier
'memory_order_release'\n/usr/include/liburing.h:1080:11: error: use of
undeclared identifier 'memory_order_acquire'\n/usr/include/liburing.h:1116:9:
error: use of undeclared identifier
'memory_order_acquire'\n/usr/include/liburing.h:1125:9: error: use of
undeclared identifier 'memory_order_relaxed'\n/usr/include/liburing.h:1161:2:
error: use of undeclared identifier
'memory_order_relaxed'\n/usr/include/liburing.h:1197:19: error: use of
undeclared identifier 'memory_order_acquire'\n/usr/include/liburing.h:1267:10:
error: use of undeclared identifier
'memory_order_relaxed'\n/usr/include/liburing.h:1269:10: error: use of
undeclared identifier 'memory_order_acquire'\n/usr/include/liburing.h:1320:2:
error: use of undeclared identifier 'memory_order_release'\n")
And I wasn't able to force the newer clang with:
env CLANG_PATH=/usr/bin/clang-15 ../../configure '--disable-docs'
--target-list=aarch64-softmmu --enable-rust
So if clang is required for bindgen we at least need:
- to probe for clang (separately from --cc)
- allow the user to override the default
- pass the clang we want to use somehow to bindgen
Briefly looking at the bindgen code I see:
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
let mut dst =
File::create(Path::new(&out_dir).join("host-target.txt")).unwrap();
dst.write_all(env::var("TARGET").unwrap().as_bytes())
.unwrap();
// On behalf of clang_sys, rebuild ourselves if important configuration
// variables change, to ensure that bindings get rebuilt if the
// underlying libclang changes.
println!("cargo:rerun-if-env-changed=LLVM_CONFIG_PATH");
println!("cargo:rerun-if-env-changed=LIBCLANG_PATH");
println!("cargo:rerun-if-env-changed=LIBCLANG_STATIC_PATH");
println!("cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS");
println!(
"cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_{}",
std::env::var("TARGET").unwrap()
);
println!(
"cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_{}",
std::env::var("TARGET").unwrap().replace('-', "_")
);
}
So I wonder if this depends on what libclang versions can be found when
cargo builds it? Although if it does it must do so dynamically:
$ ldd /home/alex/.cargo/bin/bindgen
linux-vdso.so.1 (0x00007f7cb43d8000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007f7cb438c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7cb42ad000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7cb3a1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7cb43da000)
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
- [PATCH RESEND v9 1/9] Require meson version 1.5.0, (continued)
- [PATCH RESEND v9 1/9] Require meson version 1.5.0, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 4/9] rust: add bindgen step as a meson dependency, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 5/9] .gitattributes: add Rust diff and merge attributes, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 6/9] meson.build: add HAVE_GLIB_WITH_ALIGNED_ALLOC flag, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 2/9] build-sys: Add rust feature option, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 8/9] rust: add utility procedural macro crate, Manos Pitsidianakis, 2024/08/28
- [PATCH RESEND v9 7/9] rust: add crate to expose bindings and interfaces, Manos Pitsidianakis, 2024/08/28
[PATCH RESEND v9 9/9] rust: add PL011 device model, Manos Pitsidianakis, 2024/08/28
Re: [PATCH RESEND v9 0/9] Add Rust build support, ARM PL011 device impl, Alex Bennée, 2024/08/28