rust: add trace crate

The trace crate is a minimal container for dependencies of tracepoints
(so that they do not have to be imported in all the crates that use
tracepoints); it also contains a macro called "include_trace!" that is
able to find the right include file from the trace/ directory.

[Write commit message, add #[allow()]. - Paolo]

Signed-off-by: Tanish Desai <tanishdesai37@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <20250929154938.594389-10-pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Tanish Desai 2025-09-29 17:49:31 +02:00 committed by Stefan Hajnoczi
parent e2e182bef7
commit 54140102d2
7 changed files with 83 additions and 2 deletions

35
rust/trace/src/lib.rs Normal file
View file

@ -0,0 +1,35 @@
// SPDX-License-Identifier: GPL-2.0-or-later
//! This crate provides macros that aid in using QEMU's tracepoint
//! functionality.
#[macro_export]
/// Define the trace-points from the named directory (which should have slashes
/// replaced by underscore characters) as functions in a module called `trace`.
///
/// ```ignore
/// ::trace::include_trace!("hw_char");
/// // ...
/// trace::trace_pl011_read_fifo_rx_full();
/// ```
macro_rules! include_trace {
($name:literal) => {
#[allow(
clippy::ptr_as_ptr,
clippy::cast_lossless,
clippy::used_underscore_binding
)]
mod trace {
#[cfg(not(MESON))]
include!(concat!(
env!("MESON_BUILD_ROOT"),
"/trace/trace-",
$name,
".rs"
));
#[cfg(MESON)]
include!(concat!("@MESON_BUILD_ROOT@/trace/trace-", $name, ".rs"));
}
};
}