-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.rs
More file actions
53 lines (47 loc) · 1.75 KB
/
build.rs
File metadata and controls
53 lines (47 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use std::env;
use std::path::PathBuf;
fn main() {
let miniaudio_dir = PathBuf::from("vendor");
// Compile miniaudio.c via the implementation shim
cc::Build::new()
.file("vendor/miniaudio_impl.c")
.include(&miniaudio_dir)
.warnings(false)
.compile("miniaudio");
// OS-specific link flags
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
match target_os.as_str() {
"linux" => {
println!("cargo:rustc-link-lib=dl");
println!("cargo:rustc-link-lib=pthread");
println!("cargo:rustc-link-lib=m");
}
"macos" => {
println!("cargo:rustc-link-lib=framework=CoreAudio");
println!("cargo:rustc-link-lib=framework=AudioToolbox");
println!("cargo:rustc-link-lib=framework=CoreFoundation");
}
"windows" => {
println!("cargo:rustc-link-lib=ole32");
println!("cargo:rustc-link-lib=user32");
}
_ => {}
}
// Generate FFI bindings with bindgen
let bindings = bindgen::Builder::default()
.header(miniaudio_dir.join("miniaudio.h").to_str().unwrap())
.allowlist_type("ma_.*")
.allowlist_function("ma_.*")
.allowlist_var("MA_.*")
.derive_default(true)
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Failed to generate miniaudio bindings");
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_dir.join("miniaudio_bindings.rs"))
.expect("Failed to write bindings");
// Rerun if source files change
println!("cargo:rerun-if-changed=vendor/miniaudio_impl.c");
println!("cargo:rerun-if-changed=vendor/miniaudio.h");
}