-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.rs
More file actions
94 lines (81 loc) · 3.41 KB
/
build.rs
File metadata and controls
94 lines (81 loc) · 3.41 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
fn main() {
println!("cargo:rerun-if-changed=src/csharp.rs");
println!("cargo:rerun-if-changed=go/rust_asr.go");
println!("cargo:rerun-if-changed=src/java.rs");
println!("cargo:rerun-if-changed=src/kotlin.rs");
println!("cargo:rerun-if-changed=src/swift.rs");
if std::env::var_os("CARGO_FEATURE_C").is_some()
|| std::env::var_os("CARGO_FEATURE_CPP").is_some()
|| std::env::var_os("CARGO_FEATURE_GO").is_some()
{
std::fs::create_dir_all("c").expect("failed to create c bindings directory");
std::fs::create_dir_all("cpp").expect("failed to create C++ bindings directory");
let crate_dir = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR is not set");
let c_header = cbindgen::Builder::new()
.with_crate(&crate_dir)
.with_language(cbindgen::Language::C)
.with_include_guard("RUST_ASR_H")
.with_autogen_warning("/* Generated by cbindgen. Do not edit manually. */")
.generate()
.expect("failed to generate C bindings");
c_header.write_to_file("c/rust_asr.h");
let cpp_header = cbindgen::Builder::new()
.with_crate(&crate_dir)
.with_language(cbindgen::Language::Cxx)
.with_include_guard("RUST_ASR_HPP")
.with_namespace("rust_asr")
.with_autogen_warning("/* Generated by cbindgen. Do not edit manually. */")
.generate()
.expect("failed to generate C++ bindings");
cpp_header.write_to_file("cpp/rust_asr.hpp");
}
if std::env::var_os("CARGO_FEATURE_CSHARP").is_some() {
csbindgen::Builder::default()
.input_extern_file("src/csharp.rs")
.csharp_dll_name("rust_asr")
.csharp_namespace("RustAsr.Native")
.csharp_class_name("NativeMethods")
.csharp_class_accessibility("public")
.generate_csharp_file("csharp/NativeMethods.g.cs")
.expect("failed to generate C# bindings");
}
if std::env::var_os("CARGO_FEATURE_NODEJS").is_some() {
napi_build::setup();
}
if std::env::var_os("CARGO_FEATURE_PYTHON").is_some() {
pyo3_build_config::add_extension_module_link_args();
}
#[cfg(feature = "ruby")]
{
if std::env::var_os("CARGO_FEATURE_RUBY").is_some() {
add_ruby_extension_link_args();
}
}
if std::env::var_os("CARGO_FEATURE_SWIFT").is_some() {
swift_bridge_build::parse_bridges(vec!["src/swift.rs"])
.write_all_concatenated("swift/generated", env!("CARGO_PKG_NAME"));
}
}
#[cfg(feature = "ruby")]
fn add_ruby_extension_link_args() {
println!("cargo:rerun-if-env-changed=RUBY");
println!("cargo:rerun-if-env-changed=RUBY_ROOT");
println!("cargo:rerun-if-env-changed=RUBY_STATIC");
println!("cargo:rerun-if-env-changed=RUBY_VERSION");
let mut rbconfig = rb_sys_build::rb_config();
if cfg!(target_os = "macos") {
rbconfig.push_dldflags("-Wl,-undefined,dynamic_lookup");
}
if cfg!(windows) {
let ruby_static = std::env::var("RUBY_STATIC")
.map(|value| value == "true" || value == "1")
.unwrap_or_else(|_| {
rbconfig
.get("ENABLE_SHARED")
.map(|value| value == "no")
.unwrap_or(false)
});
rbconfig.link_ruby(ruby_static);
}
rbconfig.print_cargo_args();
}