mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	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::*;
 |