qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] rust/wrapper.h: define memory_order enum
@ 2024-10-27 13:57 Manos Pitsidianakis
  2024-10-29  9:04 ` Paolo Bonzini
  0 siblings, 1 reply; 2+ messages in thread
From: Manos Pitsidianakis @ 2024-10-27 13:57 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Daniel P. Berrangé, Gustavo Romero,
	Junjie Mao, Marc-André Lureau, Paolo Bonzini, Peter Maydell,
	Philippe Mathieu-Daudé, Pierrick Bouvier, Richard Henderson,
	Thomas Huth

Add stub definition of memory_order enum in wrapper.h.

Creating Rust bindings from C code is done by passing the wrapper.h
header to `bindgen`. This fails when library dependencies that use
compiler headers are enabled, and the libclang that bindgen detects does
not match the expected clang version. So far this has only been observed
with the memory_order enum symbols from stdatomic.h. If we add the enum
definition to wrapper.h ourselves, the error does not happen.

Before this commit, if the mismatch happened the following error could
come up:

  /usr/include/liburing/barrier.h:72:10: error: use of undeclared identifier 'memory_order_release'
  /usr/include/liburing/barrier.h:75:9: error: use of undeclared identifier 'memory_order_acquire'
  /usr/include/liburing/barrier.h:75:9: error: use of undeclared identifier 'memory_order_acquire'
  /usr/include/liburing/barrier.h:68:9: error: use of undeclared identifier 'memory_order_relaxed'
  /usr/include/liburing/barrier.h:65:17: error: use of undeclared identifier 'memory_order_relaxed'
  /usr/include/liburing/barrier.h:75:9: error: use of undeclared identifier 'memory_order_acquire'
  /usr/include/liburing/barrier.h:75:9: error: use of undeclared identifier 'memory_order_acquire'
  /usr/include/liburing/barrier.h:72:10: error: use of undeclared identifier 'memory_order_release'
  panicked at [..]/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bindgen-cli-0.70.1/main.rs:45:36:
  Unable to generate bindings

To fix this (on my system) I would have to export CLANG_PATH and
LIBCLANG_PATH:

  export CLANG_PATH=/bin/clang-17
  export LIBCLANG_PATH=/usr/lib/llvm-17/lib

With these changes applied, bindgen is successful with both the
environment variables set and unset.

Since we're not using those symbols in the bindings (they are only used
by dependencies) this does not affect the generated bindings in any way.

Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
---
Changes in v2:
- Restored warning print in `configure` script (thanks Paolo and Junjie)
- Link to v1: https://lore.kernel.org/r/20241015-rust-wrapper-stdatomic-v1-1-f22c0bd31140@linaro.org
---
 rust/wrapper.h | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/rust/wrapper.h b/rust/wrapper.h
index 77e40213efb686d23f6b768b78602e4337623280..285d0eb6ad01e227a82f13e17c79390b4c34d37e 100644
--- a/rust/wrapper.h
+++ b/rust/wrapper.h
@@ -30,6 +30,23 @@
  * in order to generate C FFI compatible Rust bindings.
  */
 
+#ifndef __CLANG_STDATOMIC_H
+#define __CLANG_STDATOMIC_H
+/*
+ * Fix potential missing stdatomic.h error in case bindgen does not insert the
+ * correct libclang header paths on its own. We do not use stdatomic.h symbols
+ * in QEMU code, so it's fine to declare dummy types instead.
+ */
+typedef enum memory_order {
+  memory_order_relaxed,
+  memory_order_consume,
+  memory_order_acquire,
+  memory_order_release,
+  memory_order_acq_rel,
+  memory_order_seq_cst,
+} memory_order;
+#endif /* __CLANG_STDATOMIC_H */
+
 #include "qemu/osdep.h"
 #include "qemu/module.h"
 #include "qemu-io.h"

---
base-commit: cea8ac78545a83e1f01c94d89d6f5a3f6b5c05d2
change-id: 20241015-rust-wrapper-stdatomic-18d58292c243

--
γαῖα πυρί μιχθήτω



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] rust/wrapper.h: define memory_order enum
  2024-10-27 13:57 [PATCH v2] rust/wrapper.h: define memory_order enum Manos Pitsidianakis
@ 2024-10-29  9:04 ` Paolo Bonzini
  0 siblings, 0 replies; 2+ messages in thread
From: Paolo Bonzini @ 2024-10-29  9:04 UTC (permalink / raw)
  To: Manos Pitsidianakis
  Cc: qemu-devel, Alex Bennée, Daniel P . Berrangé,
	Gustavo Romero, Junjie Mao, Marc-André Lureau, Peter Maydell,
	Philippe Mathieu-Daudé, Pierrick Bouvier, Richard Henderson,
	Thomas Huth

Queued, thanks.

Paolo



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-10-29  9:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-27 13:57 [PATCH v2] rust/wrapper.h: define memory_order enum Manos Pitsidianakis
2024-10-29  9:04 ` Paolo Bonzini

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).