mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
743766565d
Currently, for `const`s that bindgen doesn't recognise, we define a helper constant with const <TYPE> BINDINGS_<NAME> = <NAME>; in `bindings_helper.h` and then we put pub const <NAME>: <TYPE> = BINDINGS_<NAME>; in `bindings/lib.rs`. This is fine since we currently only have 3 constants that are defined this way, but is going to be more annoying when more constants are added since every new constant needs to be defined in two places. This patch changes the way we define constant helpers to const <TYPE> RUST_CONST_HELPER_<NAME> = <NAME>; and then use `sed` to postprocess Rust code generated by bindgen to remove the distinct prefix, so users of the `bindings` crate can refer to the name directly. Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com> Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com> Signed-off-by: Gary Guo <gary@garyguo.net> Reviewed-by: Alice Ryhl <aliceryhl@google.com> Link: https://lore.kernel.org/r/20231104145700.2495176-1-gary@garyguo.net [ Reworded for typos. ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
50 lines
1.4 KiB
Rust
50 lines
1.4 KiB
Rust
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
//! Bindings.
|
|
//!
|
|
//! Imports the generated bindings by `bindgen`.
|
|
//!
|
|
//! This crate may not be directly used. If you need a kernel C API that is
|
|
//! not ported or wrapped in the `kernel` crate, then do so first instead of
|
|
//! using this crate.
|
|
|
|
#![no_std]
|
|
// See <https://github.com/rust-lang/rust-bindgen/issues/1651>.
|
|
#![cfg_attr(test, allow(deref_nullptr))]
|
|
#![cfg_attr(test, allow(unaligned_references))]
|
|
#![cfg_attr(test, allow(unsafe_op_in_unsafe_fn))]
|
|
#![allow(
|
|
clippy::all,
|
|
missing_docs,
|
|
non_camel_case_types,
|
|
non_upper_case_globals,
|
|
non_snake_case,
|
|
improper_ctypes,
|
|
unreachable_pub,
|
|
unsafe_op_in_unsafe_fn
|
|
)]
|
|
|
|
mod bindings_raw {
|
|
// Use glob import here to expose all helpers.
|
|
// Symbols defined within the module will take precedence to the glob import.
|
|
pub use super::bindings_helper::*;
|
|
include!(concat!(
|
|
env!("OBJTREE"),
|
|
"/rust/bindings/bindings_generated.rs"
|
|
));
|
|
}
|
|
|
|
// When both a directly exposed symbol and a helper exists for the same function,
|
|
// the directly exposed symbol is preferred and the helper becomes dead code, so
|
|
// ignore the warning here.
|
|
#[allow(dead_code)]
|
|
mod bindings_helper {
|
|
// Import the generated bindings for types.
|
|
use super::bindings_raw::*;
|
|
include!(concat!(
|
|
env!("OBJTREE"),
|
|
"/rust/bindings/bindings_helpers_generated.rs"
|
|
));
|
|
}
|
|
|
|
pub use bindings_raw::*;
|