Open
Description
use std::error::Error;
fn f(target: &str) -> Result<(), Box<dyn Error>> {
let bindings = bindgen::Builder::default()
.clang_arg(format!("--target={target}"))
.header_contents("embed.h", "static inline int hack() { return 0; }")
.override_abi(bindgen::Abi::CUnwind, "hack")
.wrap_static_fns(true)
.wrap_static_fns_path(format!("wrap_{target}"))
.generate()?;
println!("/* binding for {target} */");
println!("{}", bindings);
Ok(())
}
fn main() -> Result<(), Box<dyn Error>> {
f("x86_64-linux-gnu")?;
f("aarch64-linux-gnu")?;
f("x86_64-apple-macos")?;
f("aarch64-apple-macos")?;
f("x86_64-pc-windows-msvc")?;
f("aarch64-pc-windows-msvc")?;
Ok(())
}
Expected to see 6 files are generated. However, only 4 files (wrap_x86_64-linux-gnu.c
, wrap_aarch64-linux-gnu.c
, wrap_x86_64-pc-windows-msvc.c
, wrap_aarch64-pc-windows-msvc.c
) are generated.
If .override_abi(bindgen::Abi::CUnwind, "hack")
is removed, all 6 files are generated.
The output of this code:
/* binding for x86_64-linux-gnu */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "hack__extern"]
pub fn hack() -> ::std::os::raw::c_int;
}
/* binding for aarch64-linux-gnu */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "hack__extern"]
pub fn hack() -> ::std::os::raw::c_int;
}
/* binding for x86_64-apple-macos */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "\u{1}_hack"]
pub fn hack() -> ::std::os::raw::c_int;
}
/* binding for aarch64-apple-macos */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "\u{1}_hack"]
pub fn hack() -> ::std::os::raw::c_int;
}
/* binding for x86_64-pc-windows-msvc */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "hack__extern"]
pub fn hack() -> ::std::os::raw::c_int;
}
/* binding for aarch64-pc-windows-msvc */
/* automatically generated by rust-bindgen 0.71.1 */
unsafe extern "C-unwind" {
#[link_name = "hack__extern"]
pub fn hack() -> ::std::os::raw::c_int;
}
Metadata
Metadata
Assignees
Labels
No labels