 f351840088
			
		
	
	
		f351840088
		
	
	
	
	
		
			
			offset_of! was stabilized in Rust 1.77.0. Use an alternative implemenation that was found on the Rust forums, and whose author agreed to license as MIT for use in QEMU. The alternative allows only one level of field access, but apart from this can be used just by replacing core::mem::offset_of! with qemu_api::offset_of!. The actual implementation of offset_of! is done in a declarative macro, but for simplicity and to avoid introducing an extra level of indentation, the trigger is a procedural macro #[derive(offsets)]. The procedural macro is perhaps a bit overengineered, but it helps introducing some idioms that will be useful in the future as well. Signed-off-by: Junjie Mao <junjie.mao@hotmail.com> Co-developed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			24 lines
		
	
	
		
			695 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			695 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Copyright 2024, Linaro Limited
 | |
| // Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| use std::path::Path;
 | |
| 
 | |
| use version_check as rustc;
 | |
| 
 | |
| fn main() {
 | |
|     if !Path::new("src/bindings.rs").exists() {
 | |
|         panic!(
 | |
|             "No generated C bindings found! Either build them manually with bindgen or with meson \
 | |
|              (`ninja bindings.rs`) and copy them to src/bindings.rs, or build through meson."
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     // Check for available rustc features
 | |
|     if rustc::is_min_version("1.77.0").unwrap_or(false) {
 | |
|         println!("cargo:rustc-cfg=has_offset_of");
 | |
|     }
 | |
| 
 | |
|     println!("cargo:rerun-if-changed=build.rs");
 | |
| }
 |